事务日志截断

更新日期: 2007 年 9 月 15 日

如果始终不从事务日志中删除日志记录,它最终会占据物理日志文件可用的所有磁盘空间。 日志截断会自动释放磁盘空间以供事务日志重新使用。

除非日志截断由于某个原因而延迟,否则它将按照以下条件自动运行:

  • 在简单恢复模式下是在检查点之后。
  • 在完整恢复模式或大容量日志恢复模式下,如果已自上次备份之后经过了一个检查点,则是在日志备份之后。 有关详细信息,请参阅本主题后面部分的“完整恢复模式和大容量日志恢复模式下的日志截断”。

尽管日志截断是自动运行的,但许多因素会导致日志截断延迟。 有关会导致日志截断延迟的因素的信息,请参阅导致日志截断延迟的因素

ms189085.note(zh-cn,SQL.90).gif重要提示:
当日志截断延迟较长时间时,事务日志可能会占满其可用的所有空间。 有关如何处理事务日志已满情况的信息,请参阅解决事务日志已满的问题(错误 9002)

有关日志截断的体系结构信息,请参阅本主题后面部分的“如何截断日志”。

完整恢复模式和大容量日志恢复模式下的日志截断

在完整恢复模式或大容量恢复模式下,日志的不活动部分无法截断,除非其所有日志记录均已在日志备份中被捕获。 这是维护“日志链”**所必需的,日志链是具有顺序不间断的日志序列号 (LSN) 的一系列日志记录。 在备份事务日志时截断日志,前提条件是:

  • 自日志上次备份后出现检查点。 在完整恢复模式或大容量日志恢复模式下,检查点是日志截断的必要条件而非充分条件。 在检查点之后,日志至少在下次事务日志备份之前一直保持完整。
    有关详细信息,请参阅检查点和日志的活动部分
  • 其他任何因素都不会阻止截断日志。
    通常,可以使用定期备份来定期释放日志空间以供将来使用。 但是,诸如长时间运行的事务等各种因素也可能会暂时阻止截断日志。 有关详细信息,请参阅导致日志截断延迟的因素
  • BACKUP LOG 语句不会指定 WITH NO_TRUNCATE、WITH NO_LOG 或 WITH COPY_ONLY。
    ms189085.note(zh-cn,SQL.90).gif重要提示:
    BACKUP LOG 语句的 NO_LOG 和 TRUNCATE_ONLY 选项会打断日志链,原因是它们会在不备份副本的情况下删除日志的不活动部分。 在下一次完整备份或差异数据库备份之前,将无法为数据库提供媒体故障保护。 下一版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功能的应用程序。

备份事务日志

如何截断日志

ms189085.note(zh-cn,SQL.90).gif注意:
截断并不减小物理日志文件的大小。 减小日志文件的物理大小需要收缩文件。 有关收缩物理日志文件大小的信息,请参阅收缩事务日志

事务日志是一种回绕的文件。 当创建数据库时,逻辑日志文件从物理日志文件的起始处开始。 新日志记录被添加到逻辑日志的末尾,然后向物理日志的末尾扩展。 数据库中的事务日志可映射在一个或多个物理文件上。 SQL Server 数据库引擎在内部将每一物理日志文件分成多个虚拟日志文件。 日志截断将释放逻辑日志中的空间,方法是从逻辑日志的起始处删除不活动虚拟日志文件。 有关事务日志体系结构的详细信息,请参阅事务日志逻辑体系结构事务日志物理体系结构

虚拟日志文件是可以重新使用的空间的单位。 只能截断仅包含不活动日志记录的虚拟日志文件。 不能截断事务日志的活动部分(“活动日志**”),因为需要使用活动日志来恢复数据库。 最新的检查点将定义活动日志。 日志可以截断到此检查点。

ms189085.note(zh-cn,SQL.90).gif注意:
有关虚拟日志文件如何发挥作用的信息,请参阅事务日志物理体系结构

执行检查点时,事务日志的不活动部分将标记为可重用。 此后,日志截断可以释放不活动的部分。 截断将释放不活动的虚拟日志文件以供重新使用。 最终,将新记录写入已释放的虚拟日志后,此虚拟日志文件将再次变为活动文件。

检查点中记录的一条信息是第一条日志记录的日志序列号 (LSN),该 LSN 必须存在才能进行成功的数据库范围的回滚。 该 LSN 称为“最小恢复 LSN**”(“MinLSN**”)。 日志的活动部分起点是包含 MinLSN 的虚拟日志。 截断事务日志时,只释放此虚拟日志文件前面的日志记录以供重新使用。

下列各图显示了截断前后的事务日志。 第一个图显示了从未截断的事务日志。 当前,逻辑日志使用四个虚拟日志文件。 逻辑日志开始于第一个逻辑日志文件的前面,并结束于虚拟日志 4。MinLSN 记录位于虚拟日志 3 中。虚拟日志 1 和虚拟日志 2 仅包含不活动的日志记录。 这些记录可以截断。 虚拟日志 5 仍未使用,不属于当前逻辑日志。

具有四个虚拟日志的事务日志

第二个图显示了日志截断后的情形。 已释放虚拟日志 1 和虚拟日志 2 以供重新使用。 现在,逻辑日志开始于虚拟日志 3 的开头。虚拟日志 5 仍未使用,不属于当前逻辑日志。

分为四个虚拟日志文件的日志文件

请参阅

概念

检查点和日志的活动部分
设置数据库选项
使用事务日志备份
选择数据库恢复模式
恢复模式概述

其他资源

BACKUP (Transact-SQL)
Truncate Method

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2007 年 9 月 15 日

更改的内容:
  • 修正了简介部分的内容,阐明了除非每个虚拟日志文件均包含活动日志,否则日志截断都会自动运行。
  • 将体系结构信息从简介部分移到“如何截断日志”部分。
  • 新增了指向有关如何备份事务日志的主题的链接。

2006 年 4 月 14 日

更改的内容:
  • 扩展了有关恢复模式对日志截断的影响的讨论。
  • 阐明了对图的说明。