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

如果备份媒体损坏,将发生还原错误。还原错误可能会由操作系统报告或由校验和检测到。无论何种情况,您都有三种选择:

  • 修复错误并重新启动还原操作。

  • 忽略错误,继续还原操作,并在还原完成后修复数据库。

  • 放弃还原操作,使用可避免损坏备份的备用还原计划。

注意注意

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

修复并重新启动还原操作

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

  • 如果磁带设备发生错误,可卸下或更换磁带机。

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

  • 如果媒体集已镜像,可以使用另一个镜像的相应媒体替换损坏的媒体。

忽略错误继续执行操作

注意事项注意

在 RESTORE 语句中指定 WITH CONTINUE_AFTER_ERROR 将尝试还原数据库。但是,有许多种损坏会阻止恢复数据库。极力建议您尽量避免使用 CONTINUE_AFTER_ERROR 选项,除非已经尝试了所有替代方法但仍无效。

CONTINUE_AFTER_ERROR 选项将使还原操作跳过错误继续进行,并还原所能还原的内容。将发生前滚,您可以应用后续事务日志备份。如果前滚遇到的错误阻止前滚到达目标时点,此错误将指示在日志中。在恢复点,数据库将在可能的情况下联机。但如果无法完成恢复,数据库将保持脱机状态。

数据丢失量取决于遇到的错误。例如,页中的错误校验和仅能引起该页受到置疑,但会继续读取和处理媒体。相反,磁带设备报告的 I/O 错误可能会阻止还原忽略错误进行读取,并阻止还原磁带的其余部分。

当出现错误后指示继续还原时,未通过验证的页将被写入磁盘并记录到 suspect_pages 表和错误日志中。

**最佳方法:**使用 WITH CONTINUE_AFTER_ERROR 还原数据后,请检查错误日志了解有关错误的详细信息。另外,请保存并分析直接从 RESTORE 语句获取的所有消息。

忽略错误继续

基本的 RESTORE 语法为:

RESTORE DATABASE database_name FROM backup_device WITH CONTINUE_AFTER_ERROR, [ NORECOVERY ]

管理脱机数据库

您可以在忽略错误继续执行的还原顺序结束时使用 DBCC CHECKDB 修复数据库。要使 CHECKDB 在使用 RESTORE CONTINUE_AFTER_ERROR 后以最大的一致性运行,建议您在 DBCC CHECKDB 命令中使用 WITH TABLOCK 选项。有关详细信息,请参阅 DBCC CHECKDB (Transact-SQL)。所有修复选项都可用。若要了解所需的最低修复级别,请在不使用修复选项的情况下运行 DBCC CHECKDB。请注意,在极个别情况下,可能没有足够的信息来修复数据库。

若要获得按原样访问数据的有限权限,您可以使用 ALTER DATABASE 命令的 EMERGENCY 选项将数据库置于紧急模式。