求助:数据库日志恢复时出错。
数据库及日志的备份、恢复程序代码如下:
with adoquery1 do
begin
//备份数据库
close;
sql.clear;
sql.Add('backup database aa to disk=''c:\aa.bak'' with init');
prepared;
execsql;
//备份日志
close;
sql.clear;
sql.Add('backup log aa to disk=''c:\aa.dat'' with init,no_truncate');
prepared;
execsql;
end;
with adoquery1 do
begin
//恢复数据库
close;
sql.Clear;
sql.Add('use master');
prepared;
execsql;
close;
sql.Clear;
sql.Add('restore database aa from disk=''c:\aa.bak'' with replace');
prepared;
execsql;
close;
sql.Clear;
sql.Add('use aa');
prepared;
execsql;
//恢复日志
close;
sql.Clear;
sql.Add('use master');
prepared;
execsql;
close;
sql.Clear;
sql.Add('restore log aa from disk=''c:\aa.dat''');
prepared;
execsql;
close;
sql.Clear;
sql.Add('use aa');
prepared;
execsql;
end;
程序运行到“恢复日志”部分时出错,出错提示:“先前的还原操作未指定WITH NORECOVERY或WITH STANDBY。请在除最后步骤之外的所有其它步骤中指定WITH NORECOVERY或WITH STANDBY后,重新启动该还原序列。”
请教专家:程序应如何修改才能成功恢复日志?盼复,万分感激!
问题点数:50、回复次数:7Top
1 楼pengdali()回复于 2003-09-03 23:55:12 得分 10
restore database aa from disk='c:\aa.bak' WITH NORECOVERYTop
2 楼txlicenhe(马可)回复于 2003-09-04 08:06:54 得分 10
restore database aa from disk='c:\aa.bak' WITH NORECOVERY
or
restore database aa from disk='c:\aa.bak' WITH STANDBY
Top
3 楼zarge(鲨去来兮)回复于 2003-09-04 08:33:54 得分 20
restore log和restore database要对应使用
如果
restore database aa from disk='c:\aa.bak' WITH NORECOVERY
就要用
restore log aa from disk='c:\aa.dat' WITH NORECOVERY
如果
restore database aa from disk='c:\aa.bak' WITH STANDBY = UNDO_FILE_NAME
就要用
restore log aa from disk='c:\aa.dat' WITH STANDBY = UNDO_FILE_NAME
最后再执行
restore log aa WITH Recovery
数据库才可以使用
如果
restore database aa from disk='c:\aa.bak' WITH Replace
就不能再恢复日志备份了
Top
4 楼duola1(朵啦)回复于 2003-09-04 08:57:41 得分 0
请教楼上高手们:
"如果restore database aa from disk='c:\aa.bak' WITH Replace就不能再恢复日志备份了",那么这条语句除了恢复数据库外,对日志文件有什么影响吗?
Top
5 楼duola1(朵啦)回复于 2003-09-04 17:15:04 得分 0
UPTop
6 楼duola1(朵啦)回复于 2003-09-04 21:28:52 得分 0
UPTop
7 楼zarge(鲨去来兮)回复于 2003-09-04 22:07:31 得分 10
"如果restore database aa from disk='c:\aa.bak' WITH Replace就不能再恢复日志备份了",那么这条语句除了恢复数据库外,对日志文件有什么影响吗?
联机丛书:
NORECOVERY
指示还原操作不回滚任何未提交的事务。如果需要应用另一个事务日志,则必须指定 NORECOVERY 或 STANDBY 选项。如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,则默认为 RECOVERY。
当还原数据库备份和多个事务日志时,或在需要多个 RESTORE 语句时(例如在完整数据库备份后进行差异数据库备份),SQL Server 要求在除最后的 RESTORE 语句外的所有其它语句上使用 WITH NORECOVERY 选项。
说明 如果指定 NORECOVERY 选项,数据库将处于这个中间的未恢复状态而不可用。
当用于文件或文件组还原操作时,NORECOVERY 强制数据库在还原操作结束后保持还原状态。这在以下情况中很有用:
还原脚本正在运行并且始终要应用日志。
使用文件还原序列,并且在两次还原操作之间不能使用数据库。
RECOVERY
指示还原操作回滚任何未提交的事务。在恢复进程后即可随时使用数据库。
如果安排了后续 RESTORE 操作(RESTORE LOG 或从差异数据库备份 RESTORE DATABASE),则应改为指定 NORECOVERY 或 STANDBY。
如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,则默认为 RECOVERY。当从 SQL Server 早期版本中还原备份集时,可能要求将数据库升级。如果指定了 WITH RECOVERY,升级将自动进行。有关更多信息,请参见事务日志备份。
STANDBY = undo_file_name
指定撤消文件名以便可以取消恢复效果。撤消文件的大小取决于因未提交的事务所导致的撤消操作量。如果 NORECOVERY、RECOVERY 和 STANDBY 均未指定,则默认为 RECOVERY。
STANDBY 允许将数据库设定为在事务日志还原期间只能读取,并且可用于备用服务器情形,或用于需要在日志还原操作之间检查数据库的特殊恢复情形。
如果指定的撤消文件名不存在,SQL Server 将创建该文件。如果该文件已存在,则 SQL Server 将重写它。
Top




