数据库恢复问题?(40分)

  • 主题发起人 主题发起人 rev
  • 开始时间 开始时间
R

rev

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TRestoreFrm.BitBtn1Click(Sender: TObject);
var
ss:string;
begin

with maindm do begin
ss:='Restore database '+adocon.DefaultDatabase+' from disk=''';//adocon是ADOCONNECTION控件
// try
if OpenDialog1.Execute then
begin
ss:=ss+OpenDialog1.FileName+'''';
adocmd.CommandText:=ss; //adocmd是ADOCOMMAND控件
adocmd.Execute;
Application.MessageBox(
'数据恢复成功!',
'提示',
MB_OK + MB_ICONinformation);
end;
//except showmessage('操作失败请重新恢复!');
//end;
end;
end;
执行数据库恢复时提示,“未获得数据库操作排它性”,如何改?
 
当前的所有adoconnection必须先关掉
另外开个adoconnection连接到master库

-----
http://www.8421.org
 
另外开个adoconnection连接到master库,这有什么用?
 
用这个另外开的adoconnection就不会使要备份的数据库被访问,从而备份的时候
可以对它独占访问
 
连到数据库
然后USE MASTER;
然后sp_who得到要恢复数据的使用者
然后KILL
再恢复就行了
 
萧月禾提过这个贴子的,你找找他的贴子吧.
 
procedure TRestoreFrm.BitBtn1Click(Sender: TObject);
var
ss:string;
begin

with maindm do begin
ss:='Restore database kyckdb from disk=''';//adocon是ADOCONNECTION控件
// try
if OpenDialog1.Execute then
begin
ss:=ss+OpenDialog1.FileName+'''';

adocmd.Connection:=adocon2;
adocon.Connected :=false;

adocmd.CommandText:=ss; //adocmd是ADOCOMMAND控件
adocmd.Execute;
Application.MessageBox(
'数据恢复成功!',
'提示',
MB_OK + MB_ICONinformation);
end;
//except showmessage('操作失败请重新恢复!');
//end;
end;
maindm.adocmd.Connection:=maindm.adocon;
maindm.adocon.Connected :=true;
end;

adocon2是连接Master的,但没不对。
 
1. ADOConnection1 连接你的业务数据库。
2. ADOConnection2 连接 MASTER 数据库。
3. ADOCommand1.Connection := ADOConnection2;
假设你的数据库名为: DataBaseName
Button.OnClick:
begin
ADOConnection1.Connected := False;
ADOCommand1.CommandText := 'BACKUP DATABASE DataBaseName TO DISK = ' + #39 + 'C:/KKK.BAK' + #39;
ADOCommand1.Execute;
ADOCommand1.CommandText := 'ALTER DATABASE DataBaseName SET OFFLINE WITH ROLLBACK IMMEDIATE';
ADOCommand1.Execute;
ADOCommand1.CommandText := 'RESTORE DATABASE DataBaseName FROM DISK = ' + #39 + 'C:/KKK.BAK' + #39;
ADOCommand1.Execute;
ADOCommand1.CommandText := 'ALTER DATABASE DataBaseName SET ONLINE WITH ROLLBACK IMMEDIATE';
ADOCommand1.Execute;
ADOConnection1.Connected := True;
ADOTable1.Active := true;
end;
 
多人接受答案了。
 
后退
顶部