Skip to content

About

方便sql server数据库收缩,制订规范,优化策略,方便实用

Resources

Stars

5 stars

Watchers

0 watching

Forks

Latest commit

 

History

9 Commits

Folders and files

Repository files navigation

SQL Server 事务日志批量安全清理工具 (SqlLogCleaner) ver 2.0.0.1

License: MIT Platform

SqlLogCleaner 封面图

一款专为企业级多账套环境(如金蝶、用友等 ERP 生产环境)打造的 SQL Server 事务日志(LDF)批量资产盘点与安全自适应收缩工具。

纯绿色单文件设计,零外部依赖,完美向后兼容至 Windows XP / Server 2003,向前兼容至最新 Windows Server 环境。


🚀 核心演进功能 (ver 2.0+)

  • 行级资产盘点网格:一键连接后,主界面右侧常驻实例内所有数据库的日志逻辑名、总体积、已用空间及已用率,资产状态一目了然。
  • 行级自适应策略审计:系统根据日志体积自动执行智能分治路由:
    • 普通账套 ($\le$50GB):默认分派 直接指定大小(10M) 策略,确保清洗效率。
    • 超大账套 ($>$50GB):自适应分派 循环递减法(20%) 梯度下楼梯策略,严防磁盘 I/O 锁死。
    • 运维人员可在网格内通过 ComboBox 针对每一行单独调整执行策略。
  • 流式运维记录看板:左侧面板升级为带流式时间戳的动态处理记录流,批量处理状态(🟢 完成 / 🔴 失败及原因)实时滚动刷新,杜绝界面假死。
  • 高弹性响应式布局:表单全面支持最大化、全屏及自由拉伸,自适应高分辨率机房大屏。

🔬 专家级技术闭环

1. VLF 活动状态对冲审计算法(防死锁)

在执行“循环递减”策略时,针对底层 VLF(虚拟日志文件)因处于活动状态(Active)而无法释放的物理阻塞,工具在每次收缩命令后增加轻量级动态体积对冲审计。一旦比对发现体积不再变小,将保护性地主动跳出当前账套循环,并强制执行最后一次 TRUNCATEONLY 截断收尾,彻底规避因死扣目标值导致的线程死循环与程序挂起。

2. 兼容奇葩库名的 VARCHAR 容错缓冲技术

针对企业历史遗留的纯数字、带减号、空格等特殊账套名称导致的 DBCC SQLPERF(LOGSPACE) 输出行数据错位痛点,工具采用两步降维防御:临时匿名表一律改用纯文本(VARCHAR)无条件接收,确保第一步绝对不报类型转换错误;随后在输出给 C# 前通过 ISNUMERIC() 逐行清洗拦截,脏字符直接归零(ELSE 0)保护,具备极强的穿透力。


🛡️ 生产环境标准运维规范 (三步保命法)

虽然工具提供了完备的防呆机制,但在面对重要生产财务账套时,仍需铁腕固守以下运维流程:

  1. 【前置完整备份】:在批量收缩前,务必通过微软原生 Management Studio (SSMS) 对勾选的目标账套执行一次完整备份。
  2. 【行级策略清洗】:备份成功后,通过本工具勾选目标库,调配好行级策略,点击 开始批量清理选中的日志 执行安全清洗。
  3. 【后置重建日志】:清洗任务完成后,必须立即再次执行一次完整备份,用以重新建立干净健康的事务日志链,防止因日志截断引发后续系统的差异/增量备份机制瘫痪。

🛠️ 编译与运行环境

  • 开发环境:Visual Studio 2012 / 2019+
  • 目标框架:.NET Framework 4.0 (支持在无任何高版本运行库的古董机房服务器上直接绿色运行)
  • 数据库兼容性:SQL Server 2000 / 2005 / 2008 / 2012 / 2014 / 2016 / 2017 / 2019 / 2022+

一些备注或知识碎片:

⚠️ 安全合规与执行预警备份前置:在执行 SafeTruncateLog 前,请确保已利用备份策略(如 BACKUP LOG)转储日志。否则在生产环境直接切换 SIMPLE 会破坏灾备链并截断活动日志。高可用镜像/AlwaysOn 提示:若目标数据库处于镜像或 AlwaysOn 可用性组中,其无法被设为 SIMPLE 恢复模式,上述日志清理步骤需通过主库的 BACKUP LOG 策略处理 Microsoft Learn。日志文件名适配:上述 DBCC SHRINKFILE 语句假设日志文件名为 [数据库名_log]。如果由于历史迁移導致物理文件名不一致,请在执行盘点时,通过查询 sys.database_files 动态获取真实的日志逻辑文件名进行替换 Microsoft Learn。

SQL Server 日志收缩严禁直接使用 DBCC SHRINKDATABASE,这会产生严重的物理磁盘碎片。推荐的标准安全做法是:截断日志 (\rightarrow ) 将恢复模式切换为 SIMPLE (\rightarrow ) 释放空间 (\rightarrow ) 切回 FULL。

⚖️ 开源许可证

本项目基于 MIT License 许可证开源。包含强烈的免责声明(“AS IS”),商业或个人魔改、闭源、分发完全自由,原作者不承担由于生产环境不规范操作引发的任何数据安全或运维事故责任。

About

方便sql server数据库收缩,制订规范,优化策略,方便实用

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages