怎样做sql server数据库的还原(50分)

  • 主题发起人 主题发起人 skyhill
  • 开始时间 开始时间
try
DM.ADOConnection1.Connected:=False;//关闭sbhy数据库
DM.adocommand1.Connection:=DM.ADOConnection2;//转移连接到数据库master
DM.ADOCommand1.CommandText:='ALTER DATABASE sbhy SET OFFLINE WITH ROLLBACK IMMEDIATE';//切断sbhy连接
DM.ADOCommand1.Execute;

DM.ADOCommand1.CommandText:='RESTORE DATABASE sbhy FROM DISK = ''' +opendialog1.FileName +'''';//恢复sbhy数据库
DM.ADOCommand1.Execute;
showmessage('完成');
finally
DM.ADOCommand1.CommandText:='ALTER DATABASE sbhy SET ONLINE WITH ROLLBACK IMMEDIATE';//重新连接sbhy数据库
DM.ADOCommand1.Execute;
DM.ADOConnection2.Connected:=False;//关闭master数据库
end;
DM.ADOConnection1.Connected:=True;//打开sbhy数据库
DM.adocommand1.Connection:=DM.ADOConnection1;//恢复连接到数据库sbhy
 
to:bluerain你的代码根本就不能解决skyhill提的问题,我试了SQL下的方式。
测试:如下在A机上启动一个对目标数据库的访问,如查询分析器
在B机上运行你的程序,备份成功,还原还是老问题不成功。
请注意我们的目标不是在单用户的基础上还原成功,而是在多用户在使用的基础上
还原成功。
 
to xuefeiyang:
你做法是正确的,非常感谢我又学了一招。
关键在于还原数据库之前
'ALTER DATABASE sbhy SET OFFLINE WITH ROLLBACK IMMEDIATE'

Set offline/online这个开关我找了好久。
 
我试了以下但是这一句抱错呢
'ALTER DATABASE sbhy SET OFFLINE WITH ROLLBACK IMMEDIATE'

说 set 设置不对呢?
 
to tomljh 为什么提示我set有误呢,我的是sql70!
 
在服务器上用存储过程。
RESTORE DATABASE databasename
FROM DISK = 备份文件名 with REPLACE
 
xuefeiyang的语法是针对sql2000的。
如果是sql7,使用如下:

EXEC sp_dboption 'databasename', 'offline', 'TRUE'
RESTORE DATABASE databasename FROM DISK = 备份文件名 with REPLACE
EXEC sp_dboption 'databasename', 'offline', 'false'


另大家用single user开关也可以
EXEC sp_dboption 'dababasename','single user', 'TRUE'
RESTORE DATABASE databasename FROM DISK = 备份文件名 with REPLACE
EXEC sp_dboption 'dababasename','single user', 'false'


 
用楼上同志的做法,如果打开过该数据库,需要等很长时间才能执行以上语句,
否则告诉还有其他客户在使用数据库,有没有办法可以很快,执行该语句;
 
Restore database ... 这条语句在查询分析器中,对数据库自身进行还原也会出现"未取得对数据库的排它访问权限",
我没有取得这个权限,用了另外一个方法解决了这个问题,
1 断开数据库的连接
2 动态的创建一个数据库别名,连接master数据库,在master数据库中执行Restore database ...
3 删除新建的数据库别名

但我还想知道如何取得对数据库的排它访问权限
 
还原?是什么意思?是恢复到几月几号?还是把以前有的数据库文件恢复到新的SQLServer中
如果是后者我还有办法在Sql分析器中的help中查找“SP_attach_db“,有详细的说明。
 
也许有用:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1334885
 
做一个存储过程,如sjhf。将此过程放在你并不应用的数据库中,像:
master。设置ODBC如:sjhf。用adostoredproc连接。CREATE PROCEDURE sjhf @backpath char(50) AS
restore database 你的数据库 from disk=@backpath GO 。执行时先将备份路径传给它就可以了。
其余的就像是上面说的那样。要先将数据库断开。
 
后退
顶部