结尾日志备份 (SQL Server)

适用于SQL Server

本文仅与使用完整恢复模式或大容量日志恢复模式的 SQL Server 数据库的备份和还原相关。

“结尾日志备份”捕获尚未备份的任何日志记录(日志尾部),以防工作丢失并确保日志链完好无损。 在将 SQL Server 数据库恢复到其最近一个时间点之前,必须先备份数据库的事务日志。 结尾日志备份是数据库恢复计划中相关的最后一个备份。

并非所有还原方案都要求执行结尾日志备份。 如果恢复点包含在较早的日志备份中,则无需结尾日志备份。 如果准备移动或替换(覆盖)数据库,并且在最新备份后不需要将该数据库还原到某一时间点,则不需要结尾日志备份。

需要结尾日志备份的场景

建议您在以下方案中执行结尾日志备份:

  • 如果数据库处于联机状态并且您计划对数据库执行还原操作,则从备份日志结尾开始。 要避免联机数据库出错,必须使用 BACKUP Transact-SQL 语句的 WITH NORECOVERY 选项。

  • 如果数据库处于脱机状态而无法启动,则需要还原数据库,从备份日志结尾开始。 由于此时不会发生任何事务,因此请使用 WITH NO_TRUNCATE 选项。 NO_TRUNCATE 实际上与仅复制事务日志备份相同。 由于此时不会发生任何事务,因此可以选择使用 WITH NORECOVERY

  • 如果数据库损坏,则尝试使用 WITH CONTINUE_AFTER_ERROR 语句的 BACKUP 选项执行结尾日志备份。

    在损坏的数据库上,仅当日志文件未受损、数据库处于支持结尾日志备份的状态并且数据库不包含任何大容量日志更改时,日志尾部备份才会成功。 如果无法创建结尾日志备份,则最新日志备份后提交的任何事务都将丢失。

下表汇总了 NORECOVERYNO_TRUNCATECONTINUE_AFTER_ERRORBACKUP 选项。

BACKUP LOG 选项 评论
NORECOVERY 如果打算对数据库继续执行还原操作,请使用 NORECOVERYNORECOVERY 使数据库进入还原状态。 此步骤确保数据库在结尾日志备份后不会发生更改。 除非同时指定 NO_TRUNCATECOPY_ONLY 选项,否则将截断日志。

重要提示:除非数据库受损或脱机,否则不建议使用 NO_TRUNCATE。 在使用 NORECOVERY 执行还原之前,可能需要将数据库置于单用户模式以获得独占访问权限。 还原后,请将数据库重新设置为多用户模式。
CONTINUE_AFTER_ERROR 仅当要备份受损数据库的尾部时,才使用 CONTINUE_AFTER_ERROR

对受损数据库备份日志尾部时,日志备份中正常捕获的部分元数据可能不可用。 有关详细信息,请参阅下一部分。

包含不完整备份元数据的结尾日志备份

结尾日志备份可捕获日志尾部,即使数据库脱机、损坏或缺少数据文件。 这可能导致还原信息命令和 msdb 生成不完整的元数据。 但只有元数据是不完整的,而捕获的日志是完整且可用的。

如果结尾日志备份包含不完整的元数据,则 backupset 表中的 has_incomplete_metadata 设置为 1。 此外,在 RESTORE HEADERONLY的输出中,HasIncompleteMetadata 设置为 1

如果结尾日志备份中的元数据不完整,则 backupfilegroup 表在结尾日志备份时会丢失文件组的大多数相关信息。 大多数 backupfilegroup 表列为 NULL;只有以下列有意义:

  • backup_set_id
  • filegroup_id
  • type
  • type_desc
  • is_readonly

相关任务

若要创建结尾日志备份,请参阅在数据库损坏时备份事务日志 (SQL Server)

若要还原事务日志备份,请参阅还原事务日志备份 (SQL Server)