排查完整事务日志问题 (SQL Server 错误 9002)

本主题讨论对完整事务日志的可能响应,并建议将来如何避免它。 当事务日志已满时,SQL Server 数据库引擎会发出 9002 错误。 当数据库处于联机或恢复状态时,日志可以填充。 如果日志在数据库处于联机状态时已满,则该数据库仍会保持联机状态,但只能读取,不能更新。 如果在恢复期间日志填满,数据库引擎会将数据库标记为 [RESOURCE PENDING]。 不管哪种情况,都需要用户执行操作才能使日志空间可用。

响应完整事务日志

对完整事务日志的相应响应部分取决于导致日志填充的条件或条件。 若要发现在特定情况下阻止日志截断的原因,请使用 sys.database 目录视图中的 log_reuse_waitlog_reuse_wait_desc 列。 有关详细信息,请参阅 sys.databases (Transact-SQL)。 有关可能会延迟日志截断的因素的说明,请参阅事务日志(SQL Server)。

重要

如果在发生 9002 错误时数据库处于恢复状态,在解决问题后,请使用 ALTER DATABASE database_name SET ONLINE 恢复数据库。

响应完整事务日志的替代方法包括:

  • 备份日志。

  • 释放磁盘空间,以便日志可以自动增长。

  • 将日志文件移动到具有足够空间的磁盘驱动器。

  • 增加日志文件的大小。

  • 在不同的磁盘上添加日志文件。

  • 完成或终止长时间运行的事务。

以下各节将讨论这些替代方法。 选择最适合你的情况的响应。

备份日志

在完整恢复模式或大容量日志恢复模式下,如果事务日志最近尚未备份,则备份可能是阻止日志截断的内容。 如果从未备份日志,则必须创建两个日志备份,以允许数据库引擎将日志截断到上次的备份点。 截断日志可释放空间以供新的日志记录使用。 若要防止日志再次填满,请经常执行日志备份。

创建事务日志备份

重要

如果数据库已损坏,请参阅 Tail-Log 备份(SQL Server)。

释放磁盘空间

你可以通过删除或移动其他文件的方法来释放包含数据库事务日志文件的磁盘驱动器上的磁盘空间。 释放磁盘空间后,恢复系统将自动扩大日志文件。

将日志文件移动到其他磁盘

如果当前包含日志文件的驱动器上无法释放足够的磁盘空间,请考虑将该文件移动到具有足够空间的另一个驱动器。

重要

日志文件决不要放在压缩文件系统中。

移动日志文件

增加日志文件的大小

如果日志磁盘上具有可用空间,则可以增加日志文件的大小。 每个日志文件的最大大小为 2 TB(TB)。

增加文件大小

如果禁用了自动增长,则数据库处于联机状态,并且磁盘上有足够的空间可用,要么:

  • 手动增加文件大小以生成单个增量。

  • 使用 ALTER DATABASE 语句为 FILEGROWTH 选项设置非零增长增量,启用自动增长。

注释

在任一情况下,如果已达到当前大小限制,请增加 MAXSIZE 值。

在不同磁盘上添加日志文件

使用 ALTER DATABASE <database_name> ADD LOG FILE 将新日志文件添加到具有足够空间的其他磁盘上的数据库。

添加日志文件

另请参阅

ALTER DATABASE (Transact-SQL)
管理事务日志文件的大小
事务日志备份 (SQL Server)
sp_add_log_file_recover_suspect_db(Transact-SQL)