还是sql server的恢复问题(100分)

  • 主题发起人 主题发起人 smartdelphi
  • 开始时间 开始时间
S

smartdelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
由于恢复数据库时,不能有其它的连接。
因此,在备份时我另外用了一个adoconnection
adoconnection_main是原来用来连接我的数据库的。
adoconnection_restore是用来恢复用的,它连在数据库master上。
恢复程序如下:
adoconnection_main.Connected :=false;
adoconnection_main.DefaultDatabase :='master';

//adoquery1连在adoconnection_restore上
adoquery1.sql.Clear;
adoquery1.open;
adoquery1.SQL.clear;
adoquery1.SQL.add('restore database wuye from disk=''c:/xx.dat''');
adoquery1.ExecSQL ;

但是还是提示没有独占数据库,到底为什么,怎么办

另外,如何直到到底有几个用户连接在某一个数据库上呢
存储过程sp_who返回的是连接在哪一个上的。
而且,没有连接是,sp_who返回的已经是8了。

 
这是可以在线的用户列表,或许对你有帮助!
select distinct loginame from master..sysprocesses
 
这个地方可能有问题:
adoquery1.sql.Clear;
adoquery1.open;
adoquery1.SQL.clear;
adoquery1.SQL.add('restore database wuye from disk=''c:/xx.dat''');
adoquery1.ExecSQL ;
对于ADOQUERY,必须先CLOSE,然后才能给SQL.TEXT赋值。
 
我对delphi不太熟,如果你用的是sqlserver,你可以试一下以单用户模式登陆,直接在
企业管理气里操作,基本上不操作服务器端,我认为很难以独占服务器
 
这个问题我已经解答过了。你可以参考:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1121642


如果是单用户,用以下的方法可以,但如果是多用户,自己试验一下吧,我也不知道可不可以。
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;
 
MSSQL SERVER中有DISCONNECT,但我看了他的例子不能执行,收藏!
 
恢复模块不能曾经连接过要恢复的数据库,只能连接到master或其他数据库。
 
用sp_dboption dbname,offline,true
 
我用DBExpress也无法成功恢复数据库(我把连接都关闭了。还不行)
 
其实还有好多因素影响你restore,最好的办法是,把数据库管理器停止一下,然后又开启一下,接着马上做恢复操作,保证万无一失。
或者你用kill把列出的用户都删掉(除了自己),然后再恢复...
 
后退
顶部