当前位置: 首页 > news >正文

收缩SQL Server的数据库日志文件

1. 收缩单个数据库的日志文件

USE [master]
GO
ALTER DATABASE [数据库名] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [数据库名] SET RECOVERY SIMPLE --简单模式
GO
USE [数据库名]
GO
DBCC SHRINKFILE (N'数据库名_Log' , 1, TRUNCATEONLY) --1表示1024kb
GOUSE [master]
GO
ALTER DATABASE [数据库名] SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE [数据库名] SET RECOVERY FULL --还原为完全模式
GO

2. 批量收缩数据库的日志文件

这个脚本会遍历 SQL Server 实例中的所有用户数据库(排除系统库),并按以下逻辑收缩日志文件:

  • 将数据库恢复模式设为 SIMPLE(截断不活动的日志)
  • 收缩日志文件到目标大小(可自定义)
  • 恢复原有的恢复模式(避免破坏业务备份策略)
-- 声明变量
DECLARE @DBName NVARCHAR(128),          -- 数据库名称@TargetSizeMB INT = 1,        -- 日志文件目标大小(MB),可根据需要修改@RecoveryModel NVARCHAR(60),    -- 保存原恢复模式@SQL NVARCHAR(MAX);            -- 动态SQL语句-- 游标遍历所有用户数据库(排除系统数据库)
DECLARE db_cursor CURSOR FOR
SELECT name 
FROM sys.databases 
WHERE [name] NOT IN('master','model','msdb','tempdb')  -- 排除master/model/msdb/tempdbAND database_id > 4                -- 排除master/model/msdb/tempdbAND state = 0                  -- 数据库处于在线状态AND is_read_only = 0;          -- 非只读数据库-- 打开游标
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @DBName;-- 循环处理每个数据库
WHILE @@FETCH_STATUS = 0
BEGINBEGIN TRY-- 1. 获取当前数据库的恢复模式SELECT @RecoveryModel = recovery_model_descFROM sys.databases WHERE name = @DBName;PRINT N'=============================================';PRINT N'正在处理数据库:' + @DBName;PRINT N'原恢复模式:' + @RecoveryModel;-- 2. 切换到SIMPLE模式(截断日志)SET @SQL = 'ALTER DATABASE [' + @DBName + '] SET RECOVERY SIMPLE WITH NO_WAIT';EXEC sp_executesql @SQL;-- 3. 收缩日志文件到目标大小----  脚本中用 2 代表日志文件(默认情况下,数据文件是 1,日志文件是 2)--SET @SQL = 'USE [' + @DBName + ']; DBCC SHRINKFILE (2, ' + CAST(@TargetSizeMB AS NVARCHAR) + ');';EXEC sp_executesql @SQL;-- 4. 恢复原恢复模式SET @SQL = 'ALTER DATABASE [' + @DBName + '] SET RECOVERY ' + @RecoveryModel + ' WITH NO_WAIT';EXEC sp_executesql @SQL;PRINT N'数据库 ' + @DBName + ' 日志文件已收缩至 ' + CAST(@TargetSizeMB AS NVARCHAR) + ' MB';END TRYBEGIN CATCH-- 捕获异常并打印错误信息PRINT N'处理数据库 ' + @DBName + ' 失败:' + ERROR_MESSAGE();END CATCH-- 获取下一个数据库FETCH NEXT FROM db_cursor INTO @DBName;
END-- 关闭并释放游标
CLOSE db_cursor;
DEALLOCATE db_cursor;PRINT N'=============================================';
PRINT N'批量收缩日志文件完成!';

3. 关键说明

3.1 目标大小调整
修改 @TargetSizeMB 的值(默认 1MB),设置你想要的日志文件大小。

3.2 排除特定数据库
如果不想收缩某些数据库,可在游标查询中添加排除条件,例如:

AND [name] NOT IN ('DB1', 'DB2', 'DB3')  -- 排除不需要收缩的数据库

3.3 日志文件编号

脚本中用 2 代表日志文件(默认情况下,数据文件是 1,日志文件是 2)。
如果你的数据库日志文件编号不是 2,可先执行以下语句确认:

-- 查看指定数据库的文件信息
USE 你的数据库名;
SELECT file_id, name, type_desc FROM sys.database_files;

3.4 权限要求
执行脚本的账号需要具备 ALTER ANY DATABASEVIEW SERVER STATE 权限,建议用 sa 或系统管理员账号执行。

4. 注意事项

生产环境谨慎操作: 建议在业务低峰期执行,收缩过程会消耗 IO 资源,可能影响数据库性能。

http://www.jsqmd.com/news/528300/

相关文章:

  • 避坑指南:HAL库SPI+DMA发送不全/卡busy的5种原因(附CubeMX配置截图)
  • 陈冠霖院长 北京苗东国际医学研究院 - 博客万
  • 2026年电加热反应釜厂家推荐:江苏恒德力化工设备制造有限公司,搅拌反应釜/高压反应釜/搪瓷反应釜厂家精选 - 品牌推荐官
  • ZET-Optical-Network-Terminal-Decoder:突破配置加密限制的全能解决方案
  • APatch深度故障排除指南:从问题诊断到系统优化的完整路径
  • 方管定制哪家强?西南地区看鑫满翔:规格全、交期快、精度高! - 深度智识库
  • 多语言语义向量模型实战:从入门到轻量化部署
  • 杭州维修门店详解|6城高端腕表维修科普(含百达翡丽/江诗丹顿等多品牌故障解析) - 时光修表匠
  • 盘点2026年口碑好的保温装饰一体板,推荐联系方式和价格 - mypinpai
  • 2026年喷墨打印机供应商哪家靠谱,不用电脑手机连打印机选购指南 - 工业设备
  • 外审员学习抓不住重点?众智商学院带你聚焦核心考点 - 众智商学院官方
  • 2026国内空气净化器排名前十品牌怎么选?技术、口碑、服务深度解析 - 博客万
  • 2026年玻璃瓶丝印厂家推荐:徐州冠天玻璃制品有限公司,玻璃瓶定制/玻璃瓶打孔/玻璃瓶喷涂厂家精选 - 品牌推荐官
  • 俊茹环保外墙保温装饰一体板在内蒙古靠谱吗,费用怎么算? - 工业品网
  • 方管采购避坑指南:西南基建与制造业升级下,贵州7家优质供应商严选 - 深度智识库
  • 欢迎关注「谛听招标」—— 你的 AI 智能投标管家 - 谛听招标
  • 2026年220kV升压站主变大门厂家推荐:安徽华旦科技,110kV升压站主变大门/110kV变电站主变大门厂家精选 - 品牌推荐官
  • 怎样补气血又快又有效?产后虚弱恢复慢,和悦怡红参膏双重滋补专攻气血亏虚,0蔗糖更安心 - 博客万
  • 2026北京汽车租赁公司推荐:永东鑫晨汽车服务,乘用车租赁/商用车租赁/商务车租赁公司精选 - 品牌推荐官
  • 2026交通信号灯生产厂合作案例多的推荐,价格怎么样 - 工业品牌热点
  • 2026年浙江地区保温装饰一体板,费用低且质量好的公司 - mypinpai
  • 由区间维数颜色问题到二维数点问题的转化
  • 2026年跨境电商侵权申诉服务商实用攻略:从需求匹配到效果验证的深度观察 - 小白条111
  • 苹果应用商城客服咨询AI流量赋能,重塑智能体验新标杆 - 王老吉弄
  • DuckDB - Installation on Windows
  • 大型楼层隔音垫怎么选择,甘肃地区性价比高的品牌推荐 - 工业品牌热点
  • 如何利用万爱通礼品卡?5个小技巧助你高效回收! - 团团收购物卡回收
  • 4大麦德龙购物卡回收公认平台排行榜 - 淘淘收小程序
  • 分析彩色家用打印机选购要点,广州市小篆科技有限公司产品性价比如何? - 工业推荐榜
  • 2026 年贵州螺旋钢管哪家好?鑫满翔管材实力铸就靠谱品质 - 深度智识库