备份和还原期间可能出现的媒体错误 (SQL Server)

适用范围:SQL Server

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

注意

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

备份校验和

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

该 BACKUP 语句可以选择计算备份流上的备份校验和;如果给定页面上存在页校验和或撕裂页信息,则备份页面时, BACKUP 还会验证页面的校验和和撕裂页状态和页面 ID。 创建备份校验和时,备份操作不会向页中添加任何校验和。 将在这些页位于数据库中时对其进行备份,备份不会修改这些页。

由于验证和生成备份校验和引起的开销,使用备份校验和会对性能造成潜在的影响。 工作负荷和备份吞吐量都可能受到影响。 因此,不是必须使用备份校验和。 如果决定在备份过程中生成校验和,请仔细监视由此引起的 CPU 开销以及对系统中任何并发工作负荷造成的影响。

BACKUP 从不修改磁盘上的源页和页面的内容。

在启用备份校验和后,备份操作将执行以下步骤:

  1. 向备份介质写入页之前,备份操作将验证页级信息(页校验和或页残缺检测)是否存在。 如果两者都不存在,则备份无法验证页。 将按原样包含未经验证的页,并且其内容将添加到总备份校验和中。

    如果备份操作在验证过程中遇到页错误,备份将失败。

    注意

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

  2. 无论是否存在页校验和, BACKUP 都会为备份流生成单独的备份校验和。 还原操作可使用(可选)备份校验和来验证该备份是否损坏。 备份校验和存储在备份介质上,而不是存储在数据库页上。 备份校验还可根据需要在还原时使用。

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

在还原操作期间,如果备份介质上存在备份校验和,则默认情况下,和RESTORERESTORE VERIFYONLY语句都RESTORE验证备份校验和和和页校验和。 如果不存在备份校验和,则这两种还原操作直接执行,而不会进行验证;这是因为没有备份校验和,还原无法可靠地验证页校验和。

在备份或还原操作过程中响应页校验和错误

默认情况下,遇到页面校验和错误后,或BACKUPRESTORE操作会失败,并且RESTORERESTORE VERIFYONLY操作会继续。 但是,您可以控制某一给定操作在遇到错误时是失败还是尽可能继续。

BACKUP如果在遇到错误后操作继续,该操作将执行以下步骤:

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

  2. 记录 SQL Server 错误日志中的错误。

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

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

相关任务

启用或禁用备份校验和

控制备份操作中对错误的响应

另请参阅

ALTER DATABASE (Transact-SQL)
BACKUP (Transact-SQL)
backupset (Transact-SQL)
镜像备份媒体集 (SQL Server)
RESTORE (Transact-SQL)
RESTORE VERIFYONLY (Transact-SQL)