响应由损坏的备份导致的SQL Server还原错误

如果备份媒体损坏,则会发生还原错误。操作系统可能会报告或检测到还原错误。无论哪种情况,您都有三个选项:

  • 纠正错误并重新启动还原操作。

  • 允许在出现错误的情况下继续还原,并在还原完成后修复数据库。

  • 放弃恢复操作,并使用避免损坏备份的备用恢复计划。

注释

媒体集或备份集必须包含最少的正确信息,才能解释为Microsoft磁带格式。如果不是这样,RESTORE将停止并指示备份的格式无效。

固化并重新启动恢复操作

可以通过以下方式纠正错误:

  • 如果磁带设备发生错误,您可以清洁或更换磁带驱动器。

  • 对于磁盘设备,您可以解决设备错误并替换损坏的文件。

  • 如果介质集被镜像,您可以用另一个镜像中的相应介质替换损坏的介质。

尽管有错误仍在继续

警告

在RESTORE语句中指定WITH CONTINUE_AFTER_ERROR将尝试还原数据库。然而,有许多类型的损坏会阻止恢复数据库。我们强烈建议您保留使用CONTINUE_AFTER_ERROR选项,直到用尽所有替代选项。

CONTINUE_AFTER_ERROR选项会导致恢复操作继续执行过去的错误,恢复它可以恢复的内容。进行前滚,您可以应用后续事务日志备份。如果前滚遇到阻止其到达目标时间点的错误,则会在日志中指示此错误。在恢复点,如果可以的话,数据库将联机。但如果无法完成恢复,数据库将保持脱机。

丢失的数据量取决于遇到的错误。例如,页面上的错误校验和只会导致该页面受到质疑;继续读取和处理媒体。相反,磁带设备报告的I/O错误可能会阻止恢复读取错误,从而阻止恢复剩余的磁带。

当指示恢复在错误后继续时,验证失败的页面将写入磁盘并记录在suspect_pages(可疑页面)表和错误日志。

最佳实践:使用WITH CONTINUE_After_ERROR恢复数据后,请检查错误日志以获取有关错误的详细信息。另外,保存并分析直接从RESTORE语句中获得的所有消息。

在出现错误的情况下继续

基本的恢复语法为:

使用CONTINUE_AFTER_ERROR,[NORECOVERY]从backup_device恢复数据库名称

管理脱机数据库

在错误仍然存在的恢复序列结束时,您可以使用DBCC CHECKDB修复数据库。为了使CHECKDB在使用RESTORE CONTINUE_after_ERROR之后能够最一致地运行,我们建议您在DBCC CHECKDP命令中使用WITH TABLOCK选项。有关更多信息,请参阅DBCC CHECKDB(Transact-SQL)。所有维修选项都可用。要了解所需的最低修复级别,请在没有修复选项的情况下运行DBCC CHECKDB。请注意,在极端情况下,可能没有足够的信息来修复数据库。

要获得对as-is数据的有限访问权限,可以使用ALTER database命令的emergency选项将数据库置于紧急模式。