我用ADoConnection连接MASTER数据库,对我自己的DB数据库执行恢复操作,我知道需要用alter database '+DB+' set single_user with rollback immediate RESTORE DATABASE '+DB+' FROM DISK = '''来对数据库进行排他访问,才能执行成功,然后再设置alter database '+DB+' set multi_user,以前屡试不爽,都已经定型了!应该没有任何问题,但是在一台安装个人版MS SQL2000的数据库时执行失败,还是提示无法恢复数据库,必须对数据库进行排他访问,那么这种情况只能是有进程在占用我的数据库,但是我从任务管理器找了好长时间,确定没有任何进程在占用啊!谁知道这是什么情况,应该如何解决?另外我用企业管理器的还原数据库功能可以成功恢复数据库!
急,100分求解!

解决方案 »

  1.   


    /*为了对目标数据库进行独占操作,    你可以使用以下存储过程来关闭所有用户连接*/
    CREATE PROCEDURE MYkillspid (@dbname  varchar(20) ) AS SET NOCOUNT ON  begin
       declare  @sql  nvarchar(500),  @temp varchar(1000) 
       declare  @spid  int 
       set  @sql='declare  getspid  cursor  for select  spid  from  sysprocesses  
             where dbid=db_id('''+@dbname+''')'
       exec  (@sql) 
       open  getspid 
       fetch  next  from  getspid  into  @spid 
       while  @@fetch_status <> -1 
       begin 
          set @temp='kill  '+rtrim(@spid) 
          exec(@temp) 
          fetch  next  from  getspid  into  @spid 
       end
       close  getspid 
       deallocate  getspid 
    end
      

  2.   

    对了,这个存储过程是不是要写在MASTER库里?!