事务日志截断

如果从来没有从事务日志中删除过日志记录,日志记录将会逐渐填满供物理日志文件使用的所有磁盘空间。日志截断可自动释放逻辑日志中的空间以供事务日志重新使用。

除非由于某些原因导致延迟,日志截断将按照以下方式自动发生:

  • 简单恢复模式下,在检查点之后发生。

  • 完整恢复模式或大容量日志恢复模式下,在日志备份之后发生(如果自上次备份后出现检查点)。有关详细信息,请参阅本主题后面的“完整恢复模式和大容量日志恢复模式下的日志截断”部分。

虽然日志截断将自动发生,但是它也会由于多种因素发生延迟。有关导致日志截断延迟的因素的信息,请参阅可能延迟日志截断的因素

重要说明重要提示

如果日志截断延迟的时间较长,则事务日志可能会填满磁盘空间。有关如何处理已满事务日志的信息,请参阅解决事务日志已满的问题(错误 9002)

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

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

在完整恢复模式或大容量日志恢复模式下,直到日志备份捕获所有日志记录,才能截断日志的不活动部分。为了维护“日志链”(即具有连续日志序列号 (LSN) 的一系列日志记录),必须采取这一方式。在备份事务日志时截断日志,前提条件是:

  • 自日志上次备份后出现检查点。在完全恢复模式或大容量日志恢复模式下,截断日志时需要检查点,但仅有检查点是不够的。在检查点之后,日志至少在下次事务日志备份之前一直保持完整。

    有关详细信息,请参阅检查点和日志的活动部分

  • 其他任何因素都不会阻止截断日志。

    通常,可以使用定期备份来定期释放日志空间以供将来使用。但是,诸如长时间运行的事务等各种因素也可能会暂时阻止截断日志。有关详细信息,请参阅可能延迟日志截断的因素

  • BACKUP LOG 语句不指定 WITH COPY_ONLY。

备份事务日志

如何截断日志

注意注意

截断并不减小物理日志文件的大小。减小日志文件的物理大小需要收缩文件。有关收缩物理日志文件大小的信息,请参阅收缩事务日志

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

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

注意注意

有关虚拟日志文件如何发挥作用的信息,请参阅事务日志物理体系结构

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

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

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

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

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

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