peterwhyte-lgtm/dba-tools

GitHub: peterwhyte-lgtm/dba-tools

面向生产环境 SQL Server DBA 的工具包,结合批量诊断脚本、规则审查与 AI 评估,提供从健康检查到迁移规划的完整工作流。

Stars: 1 | Forks: 0

sqldba.blog

SQL Server 健康,由 AI 审查 —— 面向生产环境 DBA 的收集、仪表板和复制/粘贴脚本集合

SQL Server License Last commit Blog

## 这是什么 我是 Peter Whyte —— 生产环境 SQL Server DBA,运行着 [sqldba.blog](https://sqldba.blog)。这是我实际使用的工具包,它的核心理念是:**收集 DBA 在服务器上要查看的所有信息,然后让 AI 与你一起进行审查。** 核心工作流程分为三步。健康检查收集会对实例运行 39 个诊断脚本,并将每个结果保存为 CSV。规则审查将这些 CSV 转化为确定性的“严重 / 警告 / 信息”发现结果。然后,AI 评估会读取整个集合,执行固定阈值无法做到的事情 —— 将各 CSV 中的发现关联起来找出根本原因,并编写一份带优先级的报告,针对每个问题提供证据和修复方案。它就像你的第二位审查员,阅读了每一项输出,不知疲倦,能敏锐发现你在凌晨 2 点容易漏掉的盲点。 在其底层包含了生产环境 DBA 需要的所有其他内容,且均可独立使用: - **170 多个 SQL 脚本**,你可以直接打开并复制粘贴到 SSMS 中 —— 无需参数,没有魔法变量,无需安装 - **PowerShell 包装器**,可从终端运行相同的脚本并导出 CSV - **一个本地 Web UI**,用于查看、验证和诊断收集结果 —— 健康记分卡、安全下钻、磁盘容量、AI 报告、实时事件分类 - **操作手册、变更单和迁移工具包**,用于在有充足时间时妥善完成计划内工作 每一个脚本都源于真实的场景:一次故障事件、一个迁移窗口、一次客户交接,或需要快速安全完成的例行检查。默认在 localhost 上运行,当你传入指定实例名时则会对其运行,或者通过多服务器脚本对一系列服务器列表运行。 默认情况下,所有操作都是只读的。每个脚本都有一个标头,注明了所需的权限及其操作范围。没有任何东西会向外部发送数据,也没有任何东西依赖框架 —— 并且在你亲自运行评估步骤之前,不会向任何 AI 发送任何内容。 ## 从这里开始 克隆代码仓库并运行安装脚本。这里假设你已安装了本地 SQL Server,无需任何参数: ``` git clone https://github.com/peterwhyte-lgtm/dba-tools cd dba-tools .\Initialize-Environment.ps1 ``` 这会检查 PowerShell 版本,如果缺少 SqlServer 模块则进行安装,创建输出目录,并验证连接。无论成功还是失败,它都会明确告诉你下一步该怎么做。

Initialize-Environment output

如果要将目标改为远程或命名实例,请传入 `-ServerInstance`: ``` .\Initialize-Environment.ps1 -ServerInstance PROD01\SQL2025 ``` 一旦安装验证通过,该服务器信息就会保存在当前会话中,每个脚本都会自动获取它,无需在每次运行时添加 `-ServerInstance` 参数。 ## 健康检查 —— 收集、审查、AI 评估 旗舰级工作流程。只需三条命令,就能让你对服务器的了解从“一无所知”变成一份带优先级的书面评估报告: ``` .\powershell\reporting\Invoke-HealthCheckCollection.ps1 -ServerInstance PROD01\SQL2025 # 1. collect .\powershell\reporting\Review-HealthCheckOutput.ps1 # 2. rules review .\powershell\reporting\Invoke-AiAssessment.ps1 # 3. AI assessment ```

Health check review findings
Review-HealthCheckOutput — CRITICAL / WARNING / INFO findings across the instance

**第一步**一次性收集 39 个脚本的执行结果 —— 备份、等待、阻塞、内存、磁盘、安全攻击面、Agent 作业、完整性检查等等 —— 并将它们存入一个按时间戳命名、包含所有 CSV 文件的文件夹中。 **第二步**应用固定规则:缺失或过期的备份、未处于在线状态的数据库、陈旧的 DBCC CHECKDB、可疑页、启用了 sa 账户、基于百分比的自动增长、未配置最大服务器内存、高于阈值的 I/O 延迟、事务日志压力、高 VLF 计数、维护作业失败。 **第三步**是整个收集过程的核心。AI 会读取每一个 CSV,并关联规则无法覆盖的内容:缺失索引的发现结果恰好与高 CPU 查询对应;自动增长历史解释了 VLF 计数偏高的原因;某个弱权限登录名同时也是 sysadmin。最终输出是一份书面报告 —— 包含整体结论、带有证据和各自修复方案的优先级问题列表、安全态势、重点监控对象 —— 并被保存到 `output-files\assessments\`。 运行 AI 步骤有两种方式,两者均由相同的准则驱动: - **在你的编辑器中使用 Claude Code** —— 打开代码仓库,登录,然后请求进行健康评估。无需处理密钥。 - **API 脚本** —— `Invoke-AiAssessment.ps1`,支持脚本化和定时调度。适用于在家使用个人密钥或在工作中使用企业密钥/网关;仓库中不存储任何与账户相关的信息。`-DryRun` 会将确切的提示词写入文件而不调用任何 API,以便企业安全审查能够逐字节查看将要发送的确切内容。 这两种方式的设置方法(包括企业数据审查相关的问题)请参见:[docs/ai-assessment.md](docs/ai-assessment.md) 如果是用于客户交接或所有权审查,我们还提供了一个不带评分且不依赖 AI 的 markdown 报告: ``` .\powershell\reporting\Invoke-AssessmentReport.ps1 -ServerInstance PROD01\SQL2025 -AssessedBy "Peter Whyte" ``` ## Web UI —— 查看、验证、诊断 这是一个本地浏览器仪表板,用于在收集输出后进行查看和签字确认。一个收集操作即可为所有页面提供数据: ``` .\web-ui\Start-WebUi.ps1 # 在 http://localhost:8787 打开 ```

Web UI running in VS Code terminal alongside the browser
VS Code terminal (bottom) running Start-WebUi.ps1, browser UI (top) — browse scripts by category, search, and run against any instance

- **健康检查** —— 带有严重程度和类别过滤器的记分卡,以及与上次收集相比的发现差异:什么是新出现的,什么已解决 - **安全** —— 攻击面与访问风险的关键指标,支持三级下钻,从数值统计到 CSV 行数据,再到补救用的 T-SQL - **磁盘** —— 通过两种视角查看容量:按使用率百分比从最差开始排序显示所有数据库,以及按绝对大小排在前面的数据库 - **AI 评估** —— 在浏览器中阅读报告,或从面板运行新的评估 - **分类** —— 实时事件驾驶舱:在故障排查期间运行诊断脚本并直接查看内嵌结果 - **脚本** —— 整个代码仓库的浏览/参考库 仅在 `localhost:8787` 上运行。服务器端没有外部依赖项 —— Chart.js 从 CDN 加载以呈现图表视图。该 UI 是可选的:上述的每一个工作流程都可以完全在终端中运行。多服务器集群仪表板已在开发规划中。 ## SQL 脚本 —— 打开、复制、粘贴、运行 浏览 `sql/` 目录并直接将其复制到 SSMS 中。无需参数,没有魔法变量,也不用安装。每个脚本返回单一结果集。

SQL script in SSMS
Open any script from sql/ — paste into SSMS — run

| 类别 | 你能获得的内容 | |----------|-------------| | [`sql/performance/`](sql/performance/) | 等待统计、阻塞链、活动请求、长耗时查询、缺失索引、死锁、计划缓存、堆表、未使用的索引 | | [`sql/monitoring/`](sql/monitoring/) | 实例配置评分、数据库健康、TempDB、内存、MAXDOP、SQL Agent 作业、磁盘、VLF 计数、自动增长历史 | | [`sql/backups/`](sql/backups/) | 各数据库的覆盖情况、历史记录、备份年龄、加密状态、还原持续时间估算 | | [`sql/security/`](sql/security/) | sysadmin 成员、登录名审计、孤立用户、弱登录名、链接服务器安全性、数据库权限 | | [`sql/migration/`](sql/migration/) | 风险评估、兼容性审计、已弃用的功能、登录清单、DDL 生成器 | | [`sql/high-availability/`](sql/high-availability/) | AG 副本健康状态、同步状态、延迟、只读辅助副本使用情况 | | [`sql/maintenance/`](sql/maintenance/) | 生成备份作业、索引维护作业、清理 DDL、维护作业状态 | 附带描述的完整列表请见:[docs/script-catalog.md](docs/script-catalog.md) ## PowerShell —— 从终端运行,保存为 CSV 相同的脚本,可以在任意目录下通过名称直接调用。没有路径限制,除了 SqlServer 模块外没有任何模块依赖。 ``` # 通过名称运行任意脚本 — 模糊匹配。结果始终保存为 CSV 到 output-files/。 .\run.ps1 Get-WaitStatistics .\run.ps1 Get-BlockingChains -ServerInstance PROD01\SQL2025 .\run.ps1 Get-BackupCoverage -OutputFormat Csv # CSV only, no terminal output # 为会话设置一次服务器 — 每个脚本都会自动获取 .\tools\local-sql\Set-SqlConnection.ps1 -ServerInstance PROD01\SQL2025 .\run.ps1 Get-WaitStatistics ```

run.ps1 in action
.\run.ps1 — resolves any script by name, outputs to terminal or CSV

## 运维操作手册 `docs/ops/` 涵盖了所有的计划内工作 —— 即在维护窗口前后需要做对的事情,而不是你当下正在紧急诊断的内容。 **变更单** —— 适用于版本升级、服务器迁移和 AG 故障转移的、符合 CAB(变更顾问委员会)标准的审批文档。包含执行前后检查和回滚标准。 **执行清单** —— 针对 AG 集群迁移、独立服务器更换、DR(灾难恢复)故障转移和 SQL 版本升级的分步指南。专为执行人员编写,而非审查人员。 **操作手册** —— 涵盖独立迁移、AG 集群迁移、操作系统升级、版本更改以及版本升级的完整指南。明确说明了在什么情况下、按什么顺序执行什么操作,并针对意外情况设置了决策点。 **变更模板** —— 用于 TDE、CDC、镜像、AG 配置、统计信息维护、DBCC 模式和补丁更新的 SQL。复制模板,填入变量,执行前仔细核对。 ### 迁移工具包 在迁移窗口开启前,针对源服务器运行以下命令: ``` # 迁移前风险扫描 — 跨 compat、features、logins、config 的 HIGH/MEDIUM/INFO 发现 .\powershell\migration\Invoke-PreMigrationAssessment.ps1 -ServerInstance PROD01\SQL2025 # 捕获 baseline metrics 以进行前后比较 .\powershell\migration\Export-MigrationBaseline.ps1 -ServerInstance PROD01\SQL2025 -Label pre ``` 涵盖范围:兼容性差异、正在使用中的已弃用功能、特定版本专有功能、链接服务器依赖、AG 成员身份、带有迁移风险的登录清单、迁移后验证检查列表。 ## 环境要求 | | 最低要求 | 推荐配置 | |-|---------|-------------| | SQL Server | 2016 (13.x) | 2019+ | | PowerShell | 5.1 | 7+(运行并行的多服务器脚本必需) | | SQL 执行 | PATH 中的 `sqlcmd.exe` | SqlServer 模块 (`Invoke-Sqlcmd`) | | 权限 | `VIEW SERVER STATE`, `VIEW ANY DATABASE` | 同左 | ``` Install-Module -Name SqlServer -Scope CurrentUser -Force ``` 此外,AI 评估步骤还需要 Claude Code(已登录)或 `ANTHROPIC_API_KEY` —— 请参阅 [docs/ai-assessment.md](docs/ai-assessment.md)。其他所有操作完全在本地运行。 ## 贡献 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。这是 Peter 的个人工具包 —— 欢迎大家贡献,但范围和发展方向由他最终决定。提交的脚本必须是只读的、返回单一结果集,并包含标准的标头信息。

sqldba.blog —— 每一个脚本都有一篇结合真实应用场景的配套文章

Peter Whyte 构建并维护  ·  MIT

标签:AI合规, Libemu, SQL Server, T-SQL, 性能监控, 数据库, 运维工具