从 SQL Server 数据库过满的事务日志中恢复

简介
本文介绍事务日志变得过于庞大时您必须执行的步骤。过满的事务日志会导致 Microsoft SQL Server 数据库无法使用。本文介绍如何截断和收缩事务日志以及如何防止事务日志异常增长。

更多信息

减少事务日志大小

若要从事务日志过满的情况中恢复,您必须减少事务日志的大小。为此,必须截断事务日志中非活动的事务并收缩事务日志文件。

注意:事务日志对于维护数据库的事务完整性非常重要。因此,即使您为数据库和事务日志制作了备份,也不得删除事务日志文件。


有关减少事务日志大小的详细信息,请访问以下 Microsoft 网站:

截断事务日志中的非活动事务

当事务日志过满时,您必须立即备份事务日志文件。创建事务日志文件的备份后,SQL Server 会自动截断事务日志的非活动部分。事务日志文件的非活动部分包含已完成的事务,因此,在恢复过程中 SQL Server 将不再用到事务日志文件。SQL Server 会重新利用事务日志中这段被截断的非活动空间,而不会允许事务日志继续增长并占用更多空间。

要进一步了解在备份事务日志以及从事务日志备份中还原时必须考虑的问题,请参见 SQL Server 联机丛书中的以下主题:
  • 事务日志备份
  • 事务日志备份和还原
还可以通过截断的方法,从事务日志文件中删除非活动的事务。有关截断事务日志的其他信息,请参见 SQL Server 联机丛书中的“截断事务日志”主题。

重要说明:手动截断事务日志文件后,必须在创建事务日志备份之前创建一个完整的数据库备份。

有关截断事务日志文件时可能出现的问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
62866SQL 事务日志未被截断的原因的说明

收缩事务日志文件

备份操作或截断方法不会减小事务文件的大小。要减小事务日志文件的大小,必须收缩事务日志文件。要将事务日志文件收缩到所需大小并删除无用的页面,您必须使用 DBCC SHRINKFILE 操作。DBCC SHRINKFILE Transact-SQL 语句只能收缩日志文件中的非活动部分。

注意:当 DBCC SHRINKFILE Transact-SQL 语句单独使用时,不能截断日志并收缩日志文件中的已用空间。

有关收缩事务日志文件的更多信息,请参见 SQL Server 联机丛书中的以下主题:
  • 收缩事务日志
  • DBCC SHRINKFILE
有关如何在 SQL Server 2000 中收缩事务日志文件的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
272318使用 DBCC SHRINKFILE 收缩 SQL Server 2000 中的事务日志
有关收缩事务日志文件时可能出现的问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
814574PRB:收缩事务日志文件时出现“无法收缩日志文件...”错误信息
324432 PRB:DBCC SHRINKFILE 和 SHRINKDATABASE 命令可能由于稀疏填充的 Text、Ntext 或 Image 列而无法工作

防止事务日志文件异常增长

若要防止事务日志文件异常增长,请考虑使用以下方法之一:
  • 将事务日志文件的大小设置为一个较大值,以避免事务日志文件自动扩展。
  • 充分评估最佳内存大小后,使用内存单位而不是百分比来配置事务日志文件的自动扩展。

    有关配置自动增长选项时需要考虑的问题的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    315512SQL Server 中自动增长和自动收缩配置注意事项
  • 更改恢复模式。如果发生灾难或数据损坏,您必须恢复数据库,以维护数据库数据的一致性和事务的完整性。根据数据在数据库中的重要程度,您可以选择以下恢复模式之一,以便确定如何备份数据以及数据丢失可能给您带来的风险:
    • 简单恢复模式 (SIMPLE)
    • 完整恢复模式 (FULL)
    • 大容量日志记录恢复模式 (BULK-LOGGED)
    使用简单恢复模式,您可以将数据库恢复到最近的数据库备份。使用完整恢复模式或大容量日志记录恢复模式,您可以通过使用事务日志文件备份来还原数据库,这样可以将数据库恢复到故障发生时的故障点。

    默认情况下,在 SQL Server 2000 和 SQL Server 2005 中,SQL Server 数据库的恢复模式被设置为完整恢复模式。在完整恢复模式中,会定期备份事务日志,从而防止事务日志文件增长得过大,以致与数据库大小相比严重失衡。相比之下,如果不执行事务日志的定期备份,事务日志文件会不断增长,直至充满整个磁盘,而且您可能无法对 SQL Server 数据库执行任何数据修改操作。

    如果您不希望在灾难恢复操作过程中使用事务日志文件,则可以从完整恢复模式更改为简单恢复模式。
  • 定期备份事务日志文件,删除事务日志中非活动的事务。
  • 将事务设计为小型事务。
  • 确保没有任何未遂事务继续无限期地运行。
  • 将“更新统计”选项安排为每天运行。
  • 要对索引进行碎片整理以改善生产环境中的工作负荷性能,请使用 DBCC INDEXDEFRAG Transact-SQL 语句而不是 DBCC DBREINDEX Transact-SQL 语句。如果运行 DBCC DBREINDEX 语句,当 SQL Server 数据库处于完整恢复模式时,事务日志可能会大大扩展。此外,DBCC INDEXDEGRAG 语句不像 DBCC DBREINDEX 语句那样长时间持有锁。

    有关对 SQL Server 2000 中的索引进行碎片整理的其他信息,请参阅以下 Microsoft 网站: 如果您必须运行 DBCC DBREINDEX 语句(因为这是一个作业,是数据库维护计划的一部分),则必须将该作业分解为多个作业。此外,在执行这些作业的间歇,还必须经常备份事务日志。

有关事务日志文件的详细信息

在 SQL Server 2000 和 SQL Server 2005 中,每个数据库都至少包含一个数据文件和一个事务日志文件。SQL Server 在该数据文件中以物理方式存储数据。事务日志文件存储您对 SQL Server 数据库执行的所有修改的详细信息,以及执行每个修改的事务的详细信息。由于事务完整性被视为 SQL Server 的一个基本而固有的特点,因此不能在 SQL Server 中关闭对事务详细信息的记录。

在逻辑意义上,事务日志文件被划分为更小的段,这些段被称为虚拟日志文件。在 SQL Server 2000 中,您可以将事务日志文件配置为根据需要扩展。用户可以控制事务日志的扩展,也可以将其配置为使用所有可用的磁盘空间。SQL Server 对事务日志文件大小所做的任何修改(如截断或增长事务日志文件)都是以虚拟日志文件为单位执行的。

如果与 SQL Server 数据库相对应的事务日志文件被充满,而且事务日志文件选项被设置为自动增长,则事务日志文件将以虚拟日志文件为单位增长。有时,事务日志文件可能变得非常大,以致没有足够的磁盘空间。如果事务日志文件不断增长,致使日志文件占用了所有可用的磁盘空间而无法继续扩展,则将无法再对数据库执行任何数据修改操作。不仅如此,由于事务日志缺乏扩展空间,SQL Server 可能会将您的数据库标记为可疑数据库。

要进一步了解可能导致事务日志文件异常增长的情况,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
317375运行 SQL Server 的计算机上事务日志意外增大或充满

参考
要进一步了解恢复过程中与额外磁盘空间要求有关的疑难解答,请参见 SQL Server 联机丛书中的“磁盘空间不足”主题。有关事务日志结构的其他信息,请参见 SQL Server 联机丛书中的以下主题:
  • 事务日志结构
  • 事务日志逻辑结构
  • 事务日志物理结构
有关 SQL Server 2000 中的恢复模式的更多信息,请参见 SQL Server 联机丛书中的以下主题:
  • 选择恢复模式
  • 简单恢复
  • 完整恢复
  • 大容量日志记录恢复
  • 切换恢复模式

TLOG T-log filesize becomes full run out of space fills
属性

文章 ID:873235 - 上次审阅时间:07/16/2013 07:27:00 - 修订版本: 4.2

Microsoft SQL Server 2000 标准版, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Express Edition, Microsoft SQL 2005 Server Workgroup

  • kbsqlsetup kbdiskmemory kbdisasterrec kbhowto kbconfig kbinfo kbcip KB873235
反馈