适用范围:SQL Server
SQL Server 让你在恢复数据库时不必顾及检测到的错误。 一个重要的新型错误检测机制是可选择创建备份校验和,该校验和可由备份操作创建,并由还原操作进行验证。 您可以控制操作是否检查错误,以及遇到错误时是停止操作还是继续操作。 如果备份包含备份校验和,RESTORE 以及 RESTORERESTORE VERIFYONLY 语句可以检查是否存在错误。
注意
镜像备份可为一个介质集提供最多 4 个副本(镜像),从而在介质损坏导致错误时提供可用于恢复的备用副本。 有关详细信息,请参阅镜像备份媒体集 (SQL Server)。
备份校验和
SQL Server 支持三种校验和:页校验和、日志块校验和以及备份校验和。 生成备份校验和时,BACKUP 会验证从数据库读取的数据是否与数据库中存在的任何校验和或页撕裂指示一致。
该 BACKUP 语句可以选择对备份流计算备份校验和;如果某一页中存在页校验和或撕裂页信息,则在备份该页时,BACKUP 还会验证该页的校验和、撕裂页状态以及页 ID。 在创建备份校验和时,备份操作不会向页面添加任何校验和。 将在这些页位于数据库中时对其进行备份,备份不会修改这些页。
由于验证和生成备份校验和引起的开销,使用备份校验和会对性能造成潜在的影响。 工作负荷和备份吞吐量都可能受到影响。 因此,可以选择使用备份校验和。 如果决定在备份过程中生成校验和,请仔细监视由此引起的 CPU 开销以及对系统中任何并发工作负荷造成的影响。
BACKUP 从不修改磁盘上的源页和页面的内容。
在启用备份校验和后,备份操作将执行以下步骤:
向备份介质写入页之前,备份操作将验证页级信息(页校验和或页残缺检测)是否存在。 如果两者都不存在,则备份无法验证页。 未经验证的页将按原样包含,其内容将添加到整个备份的校验和中。
如果备份操作在验证过程中遇到页错误,备份将失败。
注意
有关页校验和和页撕裂检测的详细信息,请参阅 ALTER DATABASE 语句的 PAGE_VERIFY 选项。 有关详细信息,请参阅ALTER DATABASE SET选项(Transact-SQL)。
无论是否存在页校验和, BACKUP 都会为备份流生成单独的备份校验和。 还原操作可使用(可选)备份校验和来验证该备份是否损坏。 备份校验和存储在备份介质上,而不存储在数据库页中。 备份校验还可根据需要在还原时使用。
备份集标记为包含备份校验和(在 msdb..backupset 的 has_backup_checksums列中)。 有关详细信息,请参阅 backupset (Transact-SQL)。
在还原操作期间,如果备份介质上存在备份校验和,则默认情况下,RESTORE 和 RESTORERESTORE VERIFYONLY 语句都会验证备份校验和和页校验和。 如果不存在备份校验和,则任一还原操作都会在不进行任何验证的情况下继续进行;这是因为如果没有备份校验和,还原过程便无法可靠地验证页面校验和。
备份或还原操作期间对页校验和错误的响应
默认情况下,遇到页面校验和错误后,BACKUP或RESTORE操作会失败,而RESTORERESTORE VERIFYONLY操作会继续。 但是,您可以控制某一给定操作在遇到错误时是失败还是尽可能继续。
BACKUP如果在遇到错误后操作继续,该操作将执行以下步骤:
将备份介质中的备份集标记为包含错误,并跟踪 msdb 数据库中 suspect_pages 表中的页。 有关详细信息,请参阅 suspect_pages (Transact-SQL)。
记录 SQL Server 错误日志中的错误。
将备份集标记为包含此类错误(在 msdb..backupset 的 is_damaged 列中)。 有关详细信息,请参阅 backupset (Transact-SQL)。
发出一条消息,说明已成功生成备份,但备份中包含页错误。
相关任务
启用或禁用备份校验和
控制备份操作中对错误的响应
另请参阅
ALTER DATABASE (Transact-SQL)
BACKUP (Transact-SQL)
backupset (Transact-SQL)
镜像备份媒体集 (SQL Server)
RESTORE (Transact-SQL)
RESTORE VERIFYONLY (Transact-SQL)