其实首先就很简单:
1.数据库有人在使用时,不能还原,因为sql无法确定这样覆盖数据库是否会带来灾难性的后果
所以还原成现有的数据库时,必须断开所有用户对该数据库的连接2.你不能站在凳子换自己站住的登子,必须借助其他凳子(即先离开自己站的凳子)才能换掉自己脚下的
这句话的意思就是,如果你要还原的数据库名是你自己当前连接的数据库的话,必须断开自己的连接
切换到master数据库再还原.
1.数据库有人在使用时,不能还原,因为sql无法确定这样覆盖数据库是否会带来灾难性的后果
所以还原成现有的数据库时,必须断开所有用户对该数据库的连接2.你不能站在凳子换自己站住的登子,必须借助其他凳子(即先离开自己站的凳子)才能换掉自己脚下的
这句话的意思就是,如果你要还原的数据库名是你自己当前连接的数据库的话,必须断开自己的连接
切换到master数据库再还原.
我现在还比较郁闷,以下代码,在家里OK,在公司里不行!
ExecCmd为自写函数,就是一个ADOCommand直接执行;procedure TfrmDBBak.DBRestore(DBName, DatPath, LogPath: string);
begin
//--数据库恢复
//注释
//在还原过程中,指定的数据库必须不处于使用状态。指定数据库中的任何数据将由还原的数据替换。 ExecCmd('USE master');
ExecCmd('EXEC sp_dropdevice ''BackupDat''');
ExecCmd('EXEC sp_addumpdevice ''disk'', ''BackupDat'','''+DatPath+'''');
ExecCmd('RESTORE DATABASE '+DBName+' FROM BackupDat'); // 出错行
end;
RESTORE DATABASE star FROM disk='C:\Documents and Settings\Administrator\桌面\star.BAK'-- star为一个数据库;直接在查询分析器里就OK了!我还想问一下这个问题与SQLServer的pack有关吗?!
有没有作用如果是短连接,你可以试试在企业管理器中展开你要还原的数据库,再试试这个 ExecCmd('USE master')有没有作用