我的软件做成了C/S模式,我在备份了数据库后,还原时出现了“数据库正在使用,没有获得数据库的排它访问权”的提示。但我不知怎样才能断掉数据库的所有连接,是不是有什么系统过程可以利用?

解决方案 »

  1.   

    Alter DataBase DBName SET OFFLINE WITH ROLLBACK IMMEDIATE
    Alter DataBase DBName SET ONLINE WITH ROLLBACK IMMEDIATE
      

  2.   

    短开:ALTER DATABASE DatabaseName SET OFFLINE WITH ROLLBACK IMMEDIATE
    但必须用:ALTER DATABASE DB_CLE SET ONLINE WITH ROLLBACK IMMEDIATE还原
      

  3.   

    如果再delphi中 把 连接数据库的控件 close 就可以了
      

  4.   

    把连接数据库的控件 close
      

  5.   

    月亮的可能可以,我试一下,其它的就可能不行,这个和DELPHI无关,因为除了你本人,可能还有其它用户在使用该数据库。fhuibo:那个DB_cle是什么,可以解释一下吗?谢谢各位!
      

  6.   

    你如果用ado控件
    adoquery1.SQL.text:='use master';
    adoquery1.ExecSQL;
    这样就可以转移到master数据库,下面就是你自己的恢复数据库语句
      

  7.   

    这个我也遇到过,后来解决了,你先建立存储过程,在master数据库中
    CREATE proc restoredatabase
     @dbname varchar(200) --要关闭进程的数据库名
    , @filename varchar(500)  --要还原的数据库备份的地址
    as  
    declare @sql  nvarchar(500)  
    declare @spid nvarchar(20) declare #tb cursor for
    select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
    open #tb
    fetch next from #tb into @spid
    while @@fetch_status=0
    begin  
    exec('kill '+@spid)
    fetch next from #tb into @spid
    end  
    close #tb
    deallocate #tb
                 restore database YHK_WaterL from disk=@filename
    GO然后在Delphi程序里调用如下:
      try
        //检查存储过程
        Str:='select 1 from sysobjects where name=''restoredatabase'' and objectproperty(id,''IsProcedure'')=1';
        QrOpenSql(ADOQuery1,Str);
        if ADOQuery1.Eof then
        begin
          Application.messagebox(pchar('数据库发生错误:存储过程丢失!'),'提示信息',Mb_ok + Mb_IconError);
          exit;
        end;
      ComputerName:='server';//用来存计算机名
      DatabaseName:='yourdatabase';
        with ADOQuery1 do
        begin
          close;
          sql.Clear;
          sql.Add('use master exec restoredatabase  '+DatabaseName+','''+trim(Edt_Path.Text)+'''');
          execsql;
        end;
      except
        Application.MessageBox('未预料的情况发生,数据恢复失败','数据恢复失败',MB_IconInformation);
        exit;
      end;