在备份和还原期间检测和处理媒体错误

Microsoft SQL Server 2005 及更高版本允许您在恢复数据库时不必顾及检测到的错误。一个重要的新错误检测机制是创建备份校验和(可选),可以通过备份操作创建并通过还原操作验证。您可以控制操作是否检查错误,以及遇到错误时是停止操作还是继续操作。如果备份包含备份校验和,则 RESTORE 和 RESTORE VERIFYONLY 语句可以检查错误。

注意注意

镜像备份最多提供 4 个媒体集的副本(镜像),提供备用副本以便从损坏媒体导致的错误中恢复。有关详细信息,请参阅使用镜像备份介质集

BACKUP 过程中的校验和

SQL Server 支持三类校验和:页校验和、日志块校验和以及备份校验和。生成备份校验和时,BACKUP 将验证从数据库读取的数据是否与数据库中存在的任意校验和或页残缺指示一致。

BACKUP 语句选择性地计算备份流的备份校验和;如果给定页上存在页校验和或残缺页信息,则当备份该页时,BACKUP 还将验证它的校验和、残缺页状态以及 ID。创建备份校验和时,备份操作不会向页中添加任何校验和。将在这些页位于数据库中时对其进行备份,备份不会修改这些页。由于验证和生成备份校验和引起的开销,使用备份校验和会对性能造成潜在的影响。工作负荷和备份吞吐量都可能受到影响。因此,不是必须使用备份校验和。如果决定在备份过程中生成校验和,请仔细监视由此引起的 CPU 开销以及对系统中任何并发工作负荷造成的影响。

注意注意

BACKUP 永远不会修改磁盘上的资源页和页的内容。

下列 BACKUP 选项可控制备份校验和的行为:

  • CHECKSUM

    如果此选项已启用并且可用,将请求备份操作验证每页的校验和及页残缺,并生成整个备份的校验和。

    如果在备份操作过程中请求验证校验和:

    • 向备份媒体写入页之前,BACKUP 将验证页级信息(页校验和或页残缺检测)是否存在。如果页校验和及页残缺都不存在,则备份无法验证该页;将按原样包含该页,其内容将添加到总备份校验和中。

      注意注意

      有关页校验和及页残缺检测的详细信息,请参阅 ALTER DATABASE 语句的 PAGE_VERIFY 选项。有关详细信息,请参阅 ALTER DATABASE (Transact-SQL)

    • 为了在还原时可以选择性地使用,备份将生成一个单独的备份校验和(“备份校验和”),并将其记录在备份媒体上,而不论该媒体上是否存在页校验和。

    • 备份集标记为包含备份校验和(在 msdb..backupsethas_backup_checksums 列中)。有关详细信息,请参阅 backupset (Transact-SQL)

    注意注意

    对于日志备份,将生成并验证备份校验和。

  • NO_CHECKSUM

    显式禁止验证页和生成备份校验和。(这是默认的行为。)

控制对错误的响应

指定 CHECKSUMS 后,如果 BACKUP 在验证过程中遇到页错误,备份将失败。下列 BACKUP 选项可控制此行为:

  • CONTINUE_AFTER_ERROR

    指示 BACKUP 在遇到无效备份校验和时继续。在这种情况下,BACKUP 会:

    将备份媒体中的备份集标记为包含错误,并跟踪 msdb 数据库的 suspect_pages 表中的页。有关详细信息,请参阅 suspect_pages (Transact-SQL)

    • 记录 SQL Server 错误日志中的错误。

    • 将备份集标记为包含此类型的错误(在 msdb.backupsetis_damaged 列中)。有关详细信息,请参阅 backupset (Transact-SQL)

    • 发出一条消息,说明已成功生成备份,但备份中包含页错误。

  • STOP_ON_ERROR

    如果未验证校验和,则指示 BACKUP 失败。(这是默认的行为。)

RESTORE 和 RESTORE VERIFYONLY 过程中的校验和

如果备份媒体中存在备份校验和,则默认情况下,RESTORE 和 RESTORE VERIFYONLY 操作都将验证备份校验和及页校验和。如果不存在备份校验和,则这两种还原操作直接执行,而不会进行验证;这是因为没有备份校验和,还原无法可靠地验证页校验和。

使用 CHECKSUM 和 NO_CHECKSUM 这两个选项可以修改 RESTORE 和 RESTORE VERIFYONLY 处理校验和验证的方式,如下所示:

  • CHECKSUM

    在明确请求 CHECKSUM 进行还原操作并且备份包含备份校验和时,与默认情况相同,将同时验证备份校验和及页校验和。但是,如果备份集不包含备份校验和,还原操作将失败,并显示一条消息指明校验和不存在。

  • NO_CHECKSUM

    显式禁止还原操作对任何校验和进行默认验证。

控制对错误的响应

若要指定还原操作在遇到错误时的行为,请使用以下的 RESTORE 和 RESTORE VERIFYONLY 选项:

  • CONTINUE_AFTER_ERROR

    指定遇到错误后继续执行还原操作。这是 RESTORE VERIFYONLY 的默认行为,使其报告验证错误并继续,同时尽可能多地提供备份集的相关信息。CONTINUE_AFTER_ERROR 用于通知 RESTORE 尽可能继续。另外,这会使 RESTORE 跳过无效的校验和。

  • STOP_ON_ERROR

    指定还原操作在遇到第一个错误时停止并失败。这是 RESTORE 的默认行为。