起因是最近服务经常报错发现是硬盘存储空间不够由于暂时无法增加存储盘容量。只能搬走的搬走不能搬走的剩下就是数据库了虽然可以移动数据库文件但不到万不得已就先不移动数据库文件并且发现数据库的日志文件好大先从日志文件开始处理。--处理前数据库日志文件223G比数据库本体还大。一般可能有三种原因1长时间运行的事务某个大规模操作如大批量UPDATE、DELETE开始后一直未提交或回滚。2恢复模式为 FULL 但未配置日志备份这是最常见的原因。在完整恢复模式下只有事务日志备份 (BACKUP LOG) 才能截断日志。如果只做完整备份而不做日志备份日志会无限增长。3高可用/灾难恢复同步延迟如果配置了AlwaysOn、镜像或复制但辅助副本长时间不可用或同步严重延迟主副本的日志也无法被截断。1,先做事务日志备份必须先备份否则无法正常收缩日志-- 完整日志备份先备份才能截断日志 BACKUP LOG 数据库名 TO DISK D:\备份路径\数据库名_Log.bak WITH COMPRESSION;2,查看日志文件当前占用、可收缩空间USE 数据库名 GO DBCC SQLPERF(LOGSPACE)3,收缩日志文件推荐收缩到业务合理大小不要缩到极小避免瞬间暴涨-- 查看日志逻辑文件名 EXEC sp_helpfile; -- 收缩日志示例收缩到2G DBCC SHRINKFILE (N数据库日志逻辑名, 2048); 会返回一张表字段 FileId文件 ID CurrentSize收缩后文件占用页数每页 8KB MinimumSize文件最小可占用页数 UsedPages当前实际已使用页数 EstimatedPagesSQL 预估可释放页数优化设置日志文件自动增长合理步长避免频繁自动增长产生碎片不要设置 1MB 小步长。4,把当前正在写入的 SQL Server 错误日志文件归档封存新开一个空白的错误日志文件用来记录后续日志SQL Server 默认只会保留6 个错误日志文件ERRORLOG当前正在写的日志ERRORLOG.1上一轮归档日志ERRORLOG.2ERRORLOG.3ERRORLOG.4ERRORLOG.5每次执行一次sp_cycle_errorlog当前正在写的ERRORLOG→ 重命名为ERRORLOG.1旧的依次往后滚.1→.2…….5会被直接删除生成全新空白ERRORLOG用来记录新报错、运行日志-- 循环归档错误日志默认只保留6个可清理旧日志 EXEC sp_cycle_errorlog;5,收缩完成后务必重建索引消除碎片-- 重建全表索引 ALTER INDEX ALL ON 表名 REBUILD;注意不应将收缩操作视为常规维护操作。 由于定期业务作而增长的数据和日志文件不需要收缩作。 收缩命令会影响运行时的数据库性能。 应在低使用率期间运行它们。 如果常规应用程序工作负荷会导致文件再次增长到相同的分配大小则不建议收缩数据文件。参考管理事务日志文件大小 - SQL Server | Microsoft Learn