我在程序中通过ADO实现数据库备份和恢复,由于程序要连接到要恢复的数据库上,在恢复时出现错误:’因为数据库正在使用,所以未能获得对数据库的排它访问权。’,怎样才能解决这个问题?希望高手指点,并能给出具体例子。万分感激!

解决方案 »

  1.   


    1 不要将程序连接到你要恢复的数据库上,你可以用use master
    2 你可以用sp_who或者
    select dbname = case
    when dbid = 0 then null
    when dbid <> 0 then db_name(dbid)
    end, loginame from master..sysprocesses where hostname is not null
    group by  dbid,loginame
    等列出现在正在使用的进程/用户
    3 调用kill proccess干掉他们
    4 然后再进行恢复???不是刚有帖子,我回答了么?
      

  2.   

    你把连接关掉不就行了
    备份 BACKUP DATABASE  database_name TO  文件名
    恢复 RESTORE DATABASE 名誉database_name FROM  backup_device
      

  3.   

    (8).备份和恢复
        procedure TForm1.Button1Click(Sender: TObject);
        begin
          if OpenDialog1.Execute then
          begin
            try
              adoconnection1.Connected:=False;
              adoconnection1.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=FRIEND-YOFZKSCO;'+
              'Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=FRIEND-YOFZKSCO;Use Encryption for Data=False;Tag with column collation when possible=False';
              adoconnection1.Connected:=True;
              with adoQuery1 do
              begin
                Close;
                SQL.Clear;
                SQL.Add('Backup DataBase sfa to disk ='''+opendialog1.FileName+'''');
                ExecSQL;
              end;
            except
              ShowMessage('±?·Y꧰ü');
            Exit;
            end;
          end;
          Application.MessageBox('1§?2?ú£?êy?Y±?·Y3é1|','ìáê?',MB_OK + MB_ICONINFORMATION);
        end;
        procedure TForm1.Button2Click(Sender: TObject);
        begin
          if OpenDialog1.Execute then
          begin
            try
              adoconnection1.Connected:=false;
              adoconnection1.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=FRIEND-YOFZKSCO;'+
              'Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=FRIEND-YOFZKSCO;Use Encryption for Data=False;Tag with column collation when possible=False';
              adoconnection1.Connected:=true;
              with adoQuery1 do
              begin
                Close;
                SQL.Clear;
                SQL.Add('Restore DataBase sfa from disk ='''+opendialog1.FileName+'''');
                ExecSQL;
             end;
           except
             ShowMessage('???′꧰ü');
             Exit;
           end;
         end;
         Application.MessageBox('1§?2?ú£?êy?Y???′3é1|','ìáê?',MB_OK + MB_ICONINFORMATION);
        end;
      

  4.   

    Alter Database MyDB set offline WITH ROLLBACK IMMEDIATE;//停止别的连接
    use [master];//连接别的数据库
    Restore DataBase MyDB From Disk='c:\data'//data为备份的数据库文件
      

  5.   

    1.adoconnection1.connected:=false;
    2.設置另一個adoconnection2連接master數據庫。
    3.备份:BACKUP DATABASE  數據庫名 TO  文件名 with init
    4.恢复: RESTORE DATABASE 數據庫名 FROM  文件完整路徑 with replace