SQL Server 收缩大日志文件操作日志
|
admin
2026年5月11日 10:3
本文热度 100
|
一、操作背景
二、操作前检查
SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'DNName';
SELECT name AS [LogicalName], size/128 AS [SizeMB], CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128 AS [UsedMB], (size/128 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128) AS [FreeMB]FROM sys.database_filesWHERE type_desc = 'LOG';
SELECT log_reuse_wait_desc, name FROM sys.databases WHERE name = 'DNName';
三、执行收缩操作(带安全步骤)
USE [master];GO
ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT;GOALTER DATABASE DNName SET RECOVERY SIMPLE;GOPRINT '数据库已切换到简单模式';
USE DNName;GO
DBCC SHRINKFILE (N'DNName_Log', 0, TRUNCATEONLY);GO
PRINT '日志文件收缩完成';
USE [master];GOALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT;GOALTER DATABASE DNName SET RECOVERY FULL;GOPRINT '数据库已切回完全恢复模式';
四、操作后验证
SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'DNName';
USE DNName;GOSELECT name AS [LogicalName], size/128 AS [SizeMB], CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128 AS [UsedMB]FROM sys.database_filesWHERE type_desc = 'LOG';
五、操作日志记录(填写实际值)
六、重要提醒(写在日志末尾)
收缩后必须立即执行一次完整数据库备份,否则日志文件会从收缩点重新开始累积,且无法还原到收缩后的时间点。
不建议频繁收缩日志,会导致日志文件反复膨胀和收缩,影响性能和VLH结构。
正常运维应该通过定期日志备份来管理日志大小,而非靠收缩。
若日志始终无法收缩,检查是否有未提交事务、复制、镜像、AlwaysOn等阻塞日志截断的因素。
该文章在 2026/5/11 10:03:10 编辑过