Tail-Log 备份(SQL Server)

本主题仅适用于使用完整或大容量日志恢复模式的 SQL Server 数据库的备份和还原。

结尾日志备份捕获尚未备份的任何日志记录(日志尾部),以防止工作丢失并保持日志链不变。 在将 SQL Server 数据库恢复到其最新时间点之前,必须备份其事务日志的尾部。 结尾日志备份将是数据库恢复计划中关注的最后一个备份。

注释

并非所有还原方案都需要结尾日志备份。 如果恢复点包含在以前的日志备份中,则不需要尾日志备份。 此外,如果您移动或覆盖一个数据库,并且不需要将其还原到最近备份后的某个时间点,则不需要执行结尾日志备份。

需要 Tail-Log 备份的场景

建议在以下情况下执行尾部日志备份:

  • 如果数据库处于联机状态,并且你计划对数据库执行还原作,请首先备份日志的结尾。 若要避免联机数据库出错,必须使用 ... BACKUPTransact-SQL 语句的 WITH NORECOVERY 选项。

  • 如果数据库处于脱机状态并且无法启动,并且需要还原数据库,请先备份日志的结尾。 由于目前无法发生任何事务,因此使用 WITH NORECOVERY 是可选的。

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

    在损坏的数据库上进行日志尾部备份仅在以下情况下才能成功:日志文件未损坏,数据库处于支持尾日志备份的状态,并且数据库不包含任何批量记录的更改。 如果无法创建结尾日志备份,则丢失最新日志备份后提交的任何事务。

下表汇总了 BACKUP NORECOVERY 和 CONTINUE_AFTER_ERROR 选项。

BACKUP LOG 选项 注释
NORECOVERY 每当打算继续对数据库执行还原作时,请使用 NORECOVERY。 NORECOVERY 使数据库进入还原状态。 这可以保证数据库在结尾日志备份后不会更改。 除非还指定了NO_TRUNCATE选项或COPY_ONLY选项,否则日志将被截断。

**重要** 建议避免使用NO_TRUNCATE,但数据库损坏时除外。
在错误后继续 仅当备份损坏的数据库尾部时,才使用CONTINUE_AFTER_ERROR。

注意:在损坏的数据库上使用日志尾部备份时,日志备份中通常捕获的一些元数据可能不可用。 详细信息可在本主题后面的Tail-Log 具有不完整备份元数据的备份中找到。

具有不完整备份元数据的 Tail-Log 备份

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

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

如果结尾日志备份中的元数据不完整, 则备份文件组 表将在结尾日志备份时缺少有关文件组的大部分信息。 大多数 backupfilegroup 表列均为 NULL;唯一有意义的列如下所示:

  • backup_set_id

  • filegroup_id

  • 类型

  • 类型描述

  • is_readonly

相关任务

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

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

另请参阅

BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
SQL Server 数据库的备份和还原
仅复制备份 (SQL Server)
事务日志备份 (SQL Server)
应用事务日志备份 (SQL Server)