如果“备用文件”丢失,有什么方法可以从备用/只读模式恢复 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 将所有对象复制到一个新的数据库容器中,因为我面前有一个 db 的只读副本。
有什么办法可以解决这个问题?我当然不希望我能够将其翻转回“恢复”并继续进行后续恢复或其他任何操作,我只是想在当前状态下强制它进入正常在线模式,这样我就可以做到诸如更改权限,更改恢复模式,或进行新的完整备份之类的事情。
事实证明,如果您使用 CONTINUE_AFTER_ERROR 可以完成
当我尝试它时,我仍然收到警告,但后来做了一个 CHECKDB 并且没有收到任何错误。
鉴于警告,我不能 100% 确定我是否会在没有良好备份的生产数据库上尝试它。鉴于这是一个临时恢复,可能值得试一试。