SQL Server 数据库日志清理步骤与 SQL 脚本
SQL Server 运行过程中事务日志容易膨胀,影响存储性能。本文将演示如何通过将数据库切换至简单恢复模式、收缩日志文件,再恢复至完全恢复模式的步骤,安全高效地清理 SQL Server 数据库日志。
结果或目标
在完成以下操作后,目标数据库的事务日志文件体积应显著缩小,剩余可用空间增加,同时数据库的故障保护机制(完全恢复模式)得以保留。
准备条件
- 确定目标库:明确需要清理日志的数据库名称。
- 识别日志文件:获取数据库中日志文件的逻辑名称(Name),通常该名称不含扩展名。
- 风险提醒:虽然操作步骤包含了模式还原,但在生产环境中执行前,建议先确认是否有持续的备份链依赖。若误入复杂场景(如日志备份中断),请先备份当前数据。
第1步:查询日志文件名和大小
目的:找到日志文件的准确标识名称及当前占用空间。
操作入口:SQL Server Management Studio (SSMS) 查询窗口。
具体动作:替换代码中的 `数据库名` 并执行:
USE 数据库名
GO
SELECT file_id, name, size, * FROM sys.database_files;
执行后会返回表结果,观察 `name` 字段以区分数据文件和日志文件,查看 `size` 确认当前占用情况。
如图示结果所示,请记录下 `name` 列中对应日志文件的那行名称,后续清理步骤需引用此名称。
第2步:执行日志清理(切换模式与收缩)
目的:允许即时截断日志,并物理删除末尾未用的日志块以释放磁盘空间。
重要参数:文件名 必须替换为上一步查得的逻辑名称;11 表示将日志文件收缩至约 11MB(若希望彻底清空或更小,可调整为更小的数字或直接留空配合其他参数,但保留特定大小可避免反复收缩)。这里使用 TRUNCATEONLY 选项指定仅移除末尾未使用的部分。
具体动作:依次执行以下 T-SQL 代码:
-- 1. 切换到主库上下文
USE [master]
GO
-- 2. 立即将恢复模式设为简单(防止事务堆积并允许截断)
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE -- 确保切换完成
GO
-- 3. 使用目标库上下文
USE 数据库名
GO
-- 4. 收缩指定的日志文件
DBCC SHRINKFILE (N'文件名' , 11, TRUNCATEONLY)
GO
-- 5. 回到主库上下文,准备改回完全模式
USE [master]
GO
-- 6. 立即将恢复模式设回完全
ALTER DATABASE 数据库名 SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE 数据库名 SET RECOVERY FULL -- 还原为完全模式,保证能进行完整备份链恢复
GO
完成判断
重新执行第一步的查询语句,可以看到该日志文件的 size 明显减小。此时数据库已恢复正常的安全记录状态(完全模式)。
简要总结
通过临时切入“简单恢复模式”是快速且有效解决 SQL Server 日志疯涨的方法。关键在于务必记得在最后一步将其还原为完全 (FULL) 模式,以防止未来出现无法进行差异备份或增量日志备份的风险。以上就是 SQL Server 清理日志的详细操作内容,更多关于数据库优化维护的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













