看了好多贴,也试了N次了,可是老是不行,总是提示“未能获得排它性访问权”?
还想再问问:看到过这么一个贴:
http://search.csdn.net/expert/topic/53/5301/2003/6/17/1926442.htm里面说:
1 不要将程序连接到你要恢复的数据库上,你可以用use master2 你可以用sp_who或者select dbname = casewhen dbid = 0 then nullwhen dbid <> 0 then db_name(dbid)end, loginame from master..sysprocesses where hostname is not nullgroup by  dbid,loginame等列出现在正在使用的进程/用户3 调用kill proccess干掉他们4 然后再进行恢复---------
想问一下,如何调用KILL PROCCESS呢??谁帮忙写一下代码?
我在查询分析器里做了第二步,
返回如下结果:
DBNAME   LOGINNAME
NULL     SA
MASTER   SA
MASTER   XINGZI/BENBACON
BEN      SA
那然后怎么把他们KILL掉呢??
第4步是不是这样写呢?
sql.text := 'restore database BEN from disk = :2 with replace ';
parameters.parambyname('2').value := edit4.text;
<我是想恢复一个叫“BEN”的数据库>我也试过在restore database BEN from disk = :2 with replace前加
USER MASTER
但是还是会有“未能获得排他性访问权”,
是不是因为我的ADOCONNECTION是放在DATAMODULE里的缘故呢? 

解决方案 »

  1.   

    看下面,自己把握
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
    str:string;
    begin
    adoc1.Connected:=false; //这是连接业务数据库的
    ADOC.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=SUMMER';
    ADOC.LoginPrompt:=false;
    ADOC.Connected:=true;
    adoq_1.Connection:=adoc;
    adoq_2.Connection:=adoc;
    // ADOQ_1和ADOQ_2  是TADOquery
       adoq_1.close;
       adoq_1.sql.clear;
       adoq_1.sql.add('sp_who');
       adoq_1.open;   adoq_1.Filter:='dbname=''pp''';
      //pp为你的业务数据库
       adoq_1.filtered:=true;
       adoq_1.first;
     while  not  adoq_1.Eof   do
      begin
       str:=adoq_1.FieldByName('spid').asstring;
       adoq_2.close;
       adoq_2.sql.clear;
       adoq_2.sql.add(' kill '  + str  );
       adoq_2.ExecSQL;
       adoq_1.Next;
      end;
     adoq_1.close;
     adoq_1.sql.clear;
     adoq_1.sql.add('restore  database pp from  disk='''+opendialog1.filename+''' with  replace ');
     adoq_1.ExecSQL;
     showmessage('恢复成功');
    //你自己调试吧!
      

  2.   

    有相同的问题
      解决   先停止sql服条器再启动
      

  3.   

    1、连接MASTER数据库;
    2、Select dbid as DBID  from syscursortables where name = '数据库名';
    3、Delete sysprocesses where dbid=DBID
    4、....即可开始恢复