是否可以在没有备用文件的情况下从待机/只读状态恢复SQL数据库?


8

如果缺少“备用文件”,有什么方法可以从备用/只读模式恢复SQL数据库?

(在日志传送方案中,我看到一些引用将其称为TUF文件,但就我而言,这只是手动还原,备用文件具有BAK扩展名。)

进行“ RESTORE DATABASE foo WITH RECOVERY”会导致致命错误:

During startup of warm standby database 'foo', its standby file
('path\filename.bak') was inaccessible to the RESTORE statement.
The operating system error was '5(Access is denied.)'. Diagnose the
operating system error, correct the problem, and retry startup.

恢复是在前一段时间完成的,不幸的是,备用文件位于备份文件夹中,并被我们的文件夹清理例程删除。该文件的副本在任何其他媒体上均不存在。还原到这一点的原始备份也早已消失。

幸运的是,这对我们来说不是什么大问题(这是临时还原),但是除了“不删除该文件”之外,我找不到关于此问题的其他有用参考。

如果涉及到它,我想我可以编写整个数据库的脚本,或者使用SSIS将所有对象复制到一个新的数据库容器中,因为我前面有数据库的只读副本。

有什么办法解决这个问题?我当然不希望自己能够将其翻转回“还原”状态并继续执行后续的还原操作或其他任何操作,我只是想将其强制为当前状态的正常在线模式,这样我才能例如更改权限,更改恢复模式或进行新的完整备份等。

Answers:


7

事实证明,如果您使用CONTINUE_AFTER_ERROR,就可以完成此操作

RESTORE DATABASE foo WITH RECOVERY, CONTINUE_AFTER_ERROR

尝试时,我仍然收到警告,但随后执行了CHECKDB,未收到任何错误。

RESTORE WITH CONTINUE_AFTER_ERROR was successful but some damage was encountered. Inconsistencies in the database are possible.
RESTORE DATABASE successfully processed 0 pages in 4.180 seconds (0.000 MB/sec).
Msg 3441, Level 17, State 1, Line 13
During startup of warm standby database 'foo' (database ID 46), its standby file ('C:\MSSQL\Backup\foo_standby') was inaccessible to the RESTORE statement. The operating system error was '2(The system cannot find the file specified.)'. Diagnose the operating system error, correct the problem, and retry startup.

给出警告后,我不确定是否会在没有良好备份的生产数据库上尝试使用它,这不是100%肯定的。考虑到它是一个临时还原,可能值得尝试一下。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.