解决事务日志已满的问题(错误 9002)
更新日期: 2006 年 4 月 14 日
本主题讨论对已满事务日志可以采取的几种应对措施,并就以后如何避免出现已满事务日志给出建议。如果事务日志已满,则 SQL Server 数据库引擎会发出 9002 错误。当数据库在线或恢复时,日志可能会满。如果数据库在线时日志已满,则数据库保持在线状态,但是只能进行读取而不能更新。如果恢复过程中日志已满,则数据库引擎将数据库标记为 RESOURCE PENDING。不管哪种情况,都需要用户执行操作才能使日志空间可用。
应对已满事务日志
正确响应已满事务日志在某种程度上取决于导致日志已满的情况。若要在给定情况下查找阻止日志截断的原因,请使用 sys.database 目录视图的 log_reuse_wait 列和 log_reuse_wait_desc 列。有关详细信息,请参阅 sys.databases (Transact-SQL)。有关延迟日志截断的因素的说明,请参阅导致日志截断延迟的因素。
重要提示: |
---|
如果数据库在恢复过程中出现 9002 错误,则在解决此问题后,可使用 ALTER DATABASE database_name SET ONLINE 恢复数据库。 |
响应已满事务日志的备选方法包括:
- 备份日志。
- 释放磁盘空间以便日志可以自动增长。
- 将日志文件移到具有足够空间的磁盘驱动器。
- 增加日志文件的大小。
- 在其他磁盘上添加日志文件。
- 完成或取消长时间运行的事务。
下列部分介绍了这些备选方法。请选择最适用于您情况的响应。
注意: |
---|
强行截断日志会破坏日志链,并在下次完整备份数据库之前使数据库处于容易受到攻击的状态。因此,未来版本的 SQL Server 将从 BACKUP 语句中删除 TRUNCATE_ONLY 选项。应避免使用此选项进行新的开发工作,并计划修改当前使用它的应用程序。 |
备份日志
在完整恢复模式或大容量日志恢复模式下,如果最近尚未备份事务日志,则请立即进行备份以免发生日志截断。如果从未备份日志,则必须创建两个日志备份,以允许数据库引擎将日志截断到上次的备份点。截断日志可释放空间以供新的日志记录使用。若要防止日志再次填满,请经常执行日志备份。
创建事务日志备份
重要提示: |
---|
如果数据库被损坏,请参阅尾日志备份。 |
释放磁盘空间
您可以通过删除或移动其他文件的方法来释放包含数据库事务日志文件的磁盘驱动器上的磁盘空间。释放磁盘空间后,恢复系统将自动扩大日志文件。
将日志文件移至其他磁盘
如果在当前包含日志文件的驱动器上无法释放足够的磁盘空间,请考虑将该文件移至空间充足的其他驱动器上。
重要提示: |
---|
日志文件决不要放在压缩文件系统中。 |
移动日志文件
增加日志文件的大小
如果日志磁盘上具有可用空间,则可以增加日志文件的大小。
增加文件大小
如果禁用自动增长,数据库处于在线状态,并且磁盘上有足够的可用空间,则可采用以下方法之一:
- 手动增加文件大小以生成单个增量。
- 使用 ALTER DATABASE 语句启用自动增长以针对 FILEGROWTH 选项设置非零增量。
注意: |
---|
不管哪种情况,如果已达到当前大小限制,则应增加 MAXSIZE 值。 |
在其他磁盘上添加日志文件
使用 ALTER DATABASE <database_name> ADD LOG FILE,向具有足够空间的其他磁盘上的数据库中添加新日志文件。
添加日志文件
- 添加和删除数据文件和事务日志文件 (Transact-SQL)
- 如何向数据库中添加数据或日志文件 (SQL Server Management Studio)
标识和管理长时间运行的事务
有关详细信息,请参阅管理长时间运行的事务。
请参阅
概念
创建事务日志备份
导致日志截断延迟的因素
恢复模式概述
事务日志简介
使用事务日志备份
其他资源
ALTER DATABASE (Transact-SQL)
管理事务日志
sp_add_log_file_recover_suspect_db (Transact-SQL)
帮助和信息
更改历史记录
发布日期 | 历史记录 |
---|---|
2006 年 4 月 14 日 |
|