解决事务日志已满的问题(SQL Server 错误 9002)
本主题讨论对已满事务日志可以采取的几种应对措施,并就以后如何避免出现已满事务日志给出建议。 当事务日志已满时,SQL Server 数据库引擎会发出 9002 错误。 当数据库联机或恢复时,日志可能会满。 如果日志在数据库处于联机状态时已满,则该数据库仍会保持联机状态,但只能读取,不能更新。 如果恢复过程中日志已满,则 数据库引擎 将数据库标记为 RESOURCE PENDING。 不管哪种情况,都需要用户执行操作才能使日志空间可用。
应对已满事务日志
正确响应已满事务日志在某种程度上取决于导致日志已满的情况。 若要在给定情况下查找阻止日志截断的原因,请使用 sys.database 目录视图的 log_reuse_wait 列和 log_reuse_wait_desc 列。 有关详细信息,请参阅 sys.databases (Transact-SQL)。 有关延迟日志截断的因素的说明,请参阅事务日志 (SQL Server)。
重要
如果数据库在恢复过程中出现 9002 错误,则在解决此问题后,可使用 ALTER DATABASE database_name SET ONLINE 恢复数据库。
响应已满事务日志的备选方法包括:
备份日志。
释放磁盘空间以便日志可以自动增长。
将日志文件移到具有足够空间的磁盘驱动器。
增加日志文件的大小。
在其他磁盘上添加日志文件。
完成或取消长时间运行的事务。
下列部分介绍了这些备选方法。 请选择最适用于您情况的响应。
备份日志
在完整恢复模式或大容量日志恢复模式下,如果最近尚未备份事务日志,则请立即进行备份以免发生日志截断。 如果从未备份日志,则必须创建两个日志备份,以允许数据库引擎将日志截断到上次的备份点。 截断日志可释放空间以供新的日志记录使用。 若要防止日志再次填满,请经常执行日志备份。
创建事务日志备份
重要
如果数据库已损坏,请参阅结尾日志备份 (SQL Server)。
SqlBackup (SMO)
释放磁盘空间
您可以通过删除或移动其他文件的方法来释放包含数据库事务日志文件的磁盘驱动器上的磁盘空间。 释放磁盘空间后,恢复系统将自动扩大日志文件。
将日志文件移至其他磁盘
如果在当前包含日志文件的驱动器上无法释放足够的磁盘空间,请考虑将该文件移至空间充足的其他驱动器上。
重要
日志文件决不要放在压缩文件系统中。
移动日志文件
增加日志文件的大小
如果日志磁盘上具有可用空间,则可以增加日志文件的大小。 日志文件的最大大小是每个日志文件 2 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)