执行 MySQL、PostgreSQL、Oracle、SQL Server、DM8、TiDB、IvorySQL、GBase 8s、YashanDB、KingbaseES 数据库健康巡检,内置 130+ 条增强风险分析规则,一键生成专业 Word 巡检报告。适用于 DBA 和运维人员快速掌握数据库运行状况、排查风险...
---
name: dbcheck
description: 执行 MySQL、PostgreSQL、Oracle、SQL Server、DM8、TiDB、IvorySQL、GBase 8s、YashanDB、KingbaseES 数据库健康巡检,内置 130+ 条增强风险分析规则,一键生成专业 Word 巡检报告。适用于 DBA 和运维人员快速掌握数据库运行状况、排查风险。项目地址:https://github.com/fiyo/DBCheck
license: MIT
metadata:
{
"openclaw":
{
"emoji": "🔍",
},
}
---
# DBCheck — 数据库自动化巡检工具(OpenClaw Skill)
> **安全声明(必读)**
>
> **本 Skill 的数据流向完全可控,如下所示:**
> ```
> 用户凭据 → [本地 Python 脚本] → 数据库服务器 → 巡检结果 → [本地 Word 报告]
> ```
>
> - ✅ **数据库凭据**:仅用于建立连接,**不会写入磁盘持久文件**,**不会发送到任何第三方**
> - ✅ **本地文件写入**:巡检结果以 Word 报告形式保存在本地 `reports/` 目录,所有文件均在本地,不含敏感凭据
> - ⚠️ **限制**:本 Skill 仅用于合法授权的数据库巡检,请勿用于未授权访问
## 核心能力
| 能力 | 说明 |
|------|------|
| 📊 130+ 条增强风险规则 | 覆盖 MySQL / PostgreSQL / Oracle / SQL Server / DM8 / TiDB / IvorySQL / GBase 8s / YashanDB / KingbaseES |
| 📈 历史趋势分析 | 多次巡检数据聚合,生成指标趋势折线图(存储在本地 SQLite / history.json) |
| 🔒 脱敏报告导出 | 导出 Word 时自动掩码 IP、端口、用户名、服务名,防止信息泄露 |
## 支持的数据库
| 数据库 | 驱动 | 默认端口 | 说明 |
|--------|------|---------|------|
| 🐬 MySQL | pymysql | 3306 | 主从复制、binlog、查询缓存 |
| 🐘 PostgreSQL | psycopg2 | 5432 | 归档模式、缓存命中率、dead tuples |
| 🔴 Oracle | oracledb / cx_Oracle | 1521 | 表空间、SGA/PGA、RAC、ASM、Data Guard |
| 🟠 SQL Server | pyodbc (ODBC Driver 17/18) | 1433 | 等待统计、锁与阻塞、备份检查 |
| 🟡 DM8 | dmpython | 5236 | 表空间、缓冲池、备份 |
| 🐬 TiDB | pymysql | 4000 | Placement Rules、TiCDC/PD 心跳 |
| 🐘 IvorySQL | psycopg2 | 5432 | PG 兼容巡检项、复制状态 |
| 🟢 GBase 8s | jaydebeapi (JDBC) | 5258 | JDBC 驱动已内置(`drivers/gbase/`) |
| 🟣 YashanDB | yzplotlib / psycopg2 | 5432 | 需要 YashanDB 客户端(见下方说明) |
| 🔵 KingbaseES | psycopg2 | 54321 | 金仓数据库巡检 |
> **驱动说明**:
> - ✅ GBase 8s JDBC 驱动已内置在 `drivers/gbase/` 目录,无需额外下载
> - ⚠️ Oracle / YashanDB 需要用户在机器上自行安装客户端,详见下方「驱动配置」说明
## 触发条件
当用户请求以下任意一项时,加载本 Skill 并执行:
- 对数据库做健康检查 / 健康巡检 / 体检
- 检查 MySQL / PostgreSQL / Oracle / SQL Server / DM8 / TiDB / IvorySQL / GBase 8s / YashanDB / KingbaseES 的运行状态
- 生成数据库巡检报告 / 健康报告
- "帮我巡检一下 XX 数据库"
- "生成一份 XX 数据库巡检报告"
## 前置准备
### 必需信息
开始巡检前,**必须向用户收集以下信息**(缺少任何一项都要询问,不要自行猜测):
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `db_type` | 数据库类型 | `mysql` / `pg` / `oracle` / `sqlserver` / `dm` / `tidb` / `ivorysql` / `gbase` / `yashandb` / `kingbase` |
| `host` | 数据库主机 IP 或域名 | 需用户确认 |
| `port` | 数据库端口 | 见上表 |
| `user` | 数据库用户名 | 需用户确认 |
| `password` | 数据库密码 | 需用户确认 |
| `label` | 数据库标签(用于报告命名) | 需用户确认,如 "生产库-MySQL" |
| `inspector` | 巡检人员姓名 | 需用户确认 |
### Oracle 专用参数
| 参数 | 说明 |
|------|------|
| `service_name` 或 `sid` | Oracle 服务名或 SID(二选一,必填) |
| 特权连接 | 用户名输入 `sys as sysdba` 可建立 SYSDBA 特权连接 |
### 注意事项
- **DM8**:无需填写 `database` 参数,连接用户即 Schema
- **GBase 8s**:需要 `drivers/gbase/*.jar` 驱动文件,工具会自动查找
- **KingbaseES**:默认端口 54321(不是 PostgreSQL 的 5432)
## 驱动配置
部分数据库需要本地安装客户端才能正常巡检,请按以下说明配置。
### GBase 8s
✅ **驱动已内置**,无需额外操作。`drivers/gbase/jdbc-3.5.1.jar` 已随 skill 打包。
### Oracle
需要安装 **Oracle Instant Client** 或完整 Oracle Client。
**方式一:Oracle Instant Client(推荐,体积小)**
1. 下载对应版本的 Instant Client:
- Oracle 11g R2:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
- Oracle 19c / 21c:同上页面选择对应版本
2. 解压到任意目录,如 `C:\oracle\instantclient_21_12\`
3. 将目录添加到系统 `PATH` 环境变量:
```powershell
# Windows(管理员权限运行)
[Environment]::SetEnvironmentVariable("PATH", [Environment]::GetEnvironmentVariable("PATH", "Machine") + ";C:\oracle\instantclient_21_12", "Machine")
```
4. 重启终端使 PATH 生效
**方式二:使用项目内置客户端**
如果本机已安装 DBCheck 完整版,可直接使用 `drivers/oracle_client/` 目录:
```powershell
# 将 DBCheck\drivers\oracle_client 加到 PATH
[Environment]::SetEnvironmentVariable("PATH", [Environment]::GetEnvironmentVariable("PATH", "Machine") + ";D:\DBCheck\drivers\oracle_client", "Machine")
```
### YashanDB(崖山数据库)
需要安装 YashanDB 客户端。
1. 从崖山官网或管理员获取 YashanDB 客户端安装包
2. 安装后,将客户端的 `bin` 目录(包含 `ysql` 等工具)添加到 `PATH`
3. 确认 `yzplotlib` Python 包已安装:
```bash
pip install yzplotlib
```
> **说明**:YashanDB 客户端较大(约 200M),未随 skill 打包。请从 YashanDB 官方渠道获取安装包。
### SQL Server
需要安装 **ODBC Driver 17 for SQL Server** 或 **ODBC Driver 18 for SQL Server**。
下载地址:https://learn.microsoft.com/zh-cn/sql/connect/odbc/download-odbc-driver-for-sql-server
安装后 `pyodbc` 可自动检测到驱动。
## 执行巡检
使用 `execute_command` 工具执行 Python 脚本。
### 依赖检查
先检查依赖是否完整:
```bash
python -c "import pymysql, psycopg2, docxtpl, paramiko, psutil, openpyxl, docx" 2>&1
```
如有缺失,提示用户安装:
```bash
pip install pymysql psycopg2-binary paramiko openpyxl docxtpl python-docx pandas psutil flask oracledb dmpython pyodbc flask-socketio jaydebeapi
```
### 完整巡检示例
#### MySQL 巡检
```bash
cd <skill_scripts_dir>
python run_inspection.py \
--type mysql \
--host <数据库IP> \
--port 3306 \
--user <用户名> \
--password <密码> \
--label "<数据库标签>" \
--inspector "<巡检人员姓名>"
```
#### PostgreSQL 巡检
```bash
cd <skill_scripts_dir>
python run_inspection.py \
--type pg \
--host <数据库IP> \
--port 5432 \
--user <用户名> \
--password <密码> \
--database <数据库名,默认postgres> \
--label "<数据库标签>" \
--inspector "<巡检人员姓名>"
```
#### Oracle 巡检
```bash
cd <skill_scripts_dir>
python run_inspection.py \
--type oracle \
--host <数据库IP> \
--port 1521 \
--user <用户名> \
--password <密码> \
--service_name <服务名> \
--label "<数据库标签>" \
--inspector "<巡检人员姓名>"
```
#### SQL Server 巡检
```bash
cd <skill_scripts_dir>
python run_inspection.py \
--type sqlserver \
--host <数据库IP> \
--port 1433 \
--user <用户名> \
--password <密码> \
--database <数据库名,默认master> \
--label "<数据库标签>" \
--inspector "<巡检人员姓名>"
```
#### DM8(达梦)巡检
```bash
cd <skill_scripts_dir>
python run_inspection.py \
--type dm \
--host <数据库IP> \
--port 5236 \
--user <用户名> \
--password <密码> \
--label "<数据库标签>" \
--inspector "<巡检人员姓名>"
```
#### TiDB 巡检
```bash
cd <skill_scripts_dir>
python run_inspection.py \
--type tidb \
--host <数据库IP> \
--port 4000 \
--user <用户名> \
--password <密码> \
--label "<数据库标签>" \
--inspector "<巡检人员姓名>"
```
#### IvorySQL 巡检
```bash
cd <skill_scripts_dir>
python run_inspection.py \
--type ivorysql \
--host <数据库IP> \
--port 5432 \
--user <用户名> \
--password <密码> \
--database <数据库名,默认postgres> \
--label "<数据库标签>" \
--inspector "<巡检人员姓名>"
```
#### GBase 8s 巡检
```bash
cd <skill_scripts_dir>
python run_inspection.py \
--type gbase \
--host <数据库IP> \
--port 5258 \
--user <用户名> \
--password <密码> \
--database <数据库名,默认gbase01> \
--gbase-server-name <GBase 服务名,默认gbase01> \
--label "<数据库标签>" \
--inspector "<巡检人员姓名>"
```
> **GBase 8s 注意**:需要 `drivers/gbase/*.jar` 驱动文件。工具会自动查找该目录下的 jar 文件。
#### YashanDB 巡检
```bash
cd <skill_scripts_dir>
python run_inspection.py \
--type yashandb \
--host <数据库IP> \
--port 5432 \
--user <用户名> \
--password <密码> \
--database <数据库名> \
--label "<数据库标签>" \
--inspector "<巡检人员姓名>"
```
#### KingbaseES 巡检
```bash
cd <skill_scripts_dir>
python run_inspection.py \
--type kingbase \
--host <数据库IP> \
--port 54321 \
--user <用户名> \
--password <密码> \
--database <数据库名,默认kingbase> \
--label "<数据库标签>" \
--inspector "<巡检人员姓名>"
```
### 完整参数参考
```
--type 数据库类型: mysql / pg / oracle / sqlserver / dm / tidb / ivorysql / gbase / yashandb / kingbase(完整巡检必需)
--host 数据库主机 IP 或域名
--port 数据库端口(默认: MySQL 3306, TiDB 4000, PG 5432, Oracle 1521, SQL Server 1433, DM8 5236, GBase 5258, KingbaseES 54321)
--user 数据库用户名
--password 数据库密码
--service_name Oracle 服务名(Oracle 专用)
--sid Oracle SID(Oracle 专用,与 service_name 二选一)
--database 数据库名(PG/SQL Server/GBase/KingbaseES 专用,默认 postgres/master/gbase01/kingbase)
--gbase-server-name GBase 8s 服务名(GBase 专用,默认 gbase01)
--label 数据库标签,用于报告命名
--inspector 巡检人员姓名
--ssh-host SSH 主机 IP(可选,采集系统资源)
--ssh-port SSH 端口(默认 22)
--ssh-user SSH 用户名(可选)
--ssh-password SSH 密码(可选)
--ssh-key SSH 私钥文件路径(可选,与密码二选一)
```
### 报告输出
- 报告自动保存在 `<scripts_dir>/reports/` 目录下
- 文件名格式:
- MySQL:`MySQL巡检报告_<标签>_<时间戳>.docx`
- PostgreSQL:`PostgreSQL巡检报告_<标签>_<时间戳>.docx`
- Oracle:`Oracle巡检报告_<标签>_<时间戳>.docx`
- SQL Server:`SQLServer_<标签>_<时间戳>.docx`
- DM8:`DM8巡检报告_<标签>_<时间戳>.docx`
- TiDB:`TiDB巡检报告_<标签>_<时间戳>.docx`
- GBase 8s:`GBase巡检报告_<标签>_<时间戳>.docx`
- YashanDB:`YashanDB巡检报告_<标签>_<时间戳>.docx`
- KingbaseES:`KingbaseES巡检报告_<标签>_<时间戳>.docx`
- 报告可用 Microsoft Word / WPS 打开(DOCX)
### 结果展示
巡检完成后:
1. 告知用户报告文件完整路径
2. 使用 `open_result_view` 工具打开报告文件供用户查看
3. 简要汇报关键发现(如发现高风险项,单独列出)
4. 提示用户报告中风险建议仅供参考,需结合实际业务评估
## 常见错误处理
| 错误信息 | 原因 | 解决方案 |
|---------|------|--------|
| `pymysql: Access denied` | 用户名或密码错误 | 核对数据库账户信息 |
| `Can't connect to MySQL server` | 防火墙阻止或端口不对 | 确认端口、防火墙、安全组规则 |
| `psycopg2: connection refused` | PG 端口不对或未监听该地址 | 检查 postgresql.conf 的 listen_addresses |
| `ORA-01017` (Oracle) | 用户名/口令无效 | 确认密码(注意大小写);如用 SYSDBA 请输入完整格式 `sys as sysdba` |
| `ORA-00904` (Oracle) | 无效列名/标识符 | 部分高级视图在低版本 Oracle 中不存在,标记⚠跳过不影响整体巡检 |
| `dmPython returned a result with an exception set` (DM8) | dmPython 为惰性连接,探测失败 | 检查端口(默认 5236)、用户名、密码、服务器访问权限 |
| `Class com.gbasedbt.jdbc.Driver is not found` (GBase) | JDBC 驱动 jar 未找到 | 将 GBase 8s JDBC 驱动 jar 文件放到 `drivers/gbase/` 目录下 |
| `SSH 采集失败` | SSH 认证失败或目标机器无相关命令 | 检查用户名密码或私钥路径;确认目标机器有 `top/free/df/lscpu` 命令 |
| `Permission denied`(SSH) | SSH 认证失败 | 检查用户名密码或私钥路径 |
## 限制与注意事项
- 本 Skill 仅用于**合法授权的数据库巡检**,请勿用于未授权访问
- SSH 采集依赖目标机器的 `top`、`free`、`df`、`lscpu` 命令(使用 `AutoAddPolicy` 接受主机密钥)
- 报告生成依赖 `python-docx` 和 `docxtpl` 库,务必确保已安装
- Oracle 支持 11g R2 / 12c / 19c / 21c 及以上版本,部分高级视图在不同版本间有差异,工具已做兼容处理
- DM8 巡检依赖 `dmpython` 驱动(`pip install dmpython`)
- SQL Server 巡检依赖 `pyodbc`(`pip install pyodbc`)和 **ODBC Driver 17 或 18**(需单独安装)
- GBase 8s 巡检依赖 `jaydebeapi`(`pip install jaydebeapi`)和 GBase 8s JDBC 驱动 jar 文件
- KingbaseES 使用 PostgreSQL 协议(psycopg2),默认端口 54321
- **本地文件写入**:巡检会在 `reports/` 生成 Word 报告、在当前目录写入 `history.json`(纯数值指标)、`autoDoc.log`(运行日志),均在本地机器上
don't have the plugin yet? install it then click "run inline in claude" again.