314 lines
6.9 KiB
Markdown
314 lines
6.9 KiB
Markdown
# 达梦数据库自动执行器使用指南
|
||
|
||
## ✅ 完整可行方案(零额外依赖)
|
||
|
||
基于**disql命令行工具**,使用你本地已有的达梦数据库管理工具。
|
||
|
||
---
|
||
|
||
## 📋 前提条件检查
|
||
|
||
### 1. 达梦数据库管理工具已安装
|
||
```
|
||
✅ 已确认: D:\sortware\dm_manager
|
||
```
|
||
|
||
### 2. disql工具存在
|
||
```
|
||
✅ 工具路径: D:\sortware\dm_manager\bin\disql.exe
|
||
```
|
||
|
||
### 3. Node.js已安装
|
||
```bash
|
||
node -v
|
||
# 应显示版本号,如 v20.19.5
|
||
```
|
||
|
||
### 4. 配置文件已准备
|
||
```
|
||
✅ db-mapping.json - 数据库连接和schema映射
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 立即使用
|
||
|
||
### 方式一:一键批量执行(推荐)
|
||
|
||
**双击执行**:
|
||
```
|
||
execute-all.bat
|
||
```
|
||
|
||
这会自动执行`output`目录下的所有`*_dm.sql`文件。
|
||
|
||
---
|
||
|
||
### 方式二:命令行执行
|
||
|
||
#### 执行所有SQL文件
|
||
```bash
|
||
node dm-executor.js output/*_dm.sql
|
||
```
|
||
|
||
#### 执行单个文件
|
||
```bash
|
||
node dm-executor.js output/themetis_data_dm.sql
|
||
```
|
||
|
||
#### 执行指定文件
|
||
```bash
|
||
node dm-executor.js output/schema1_dm.sql output/schema2_dm.sql
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 执行效果展示
|
||
|
||
```
|
||
======================================================================
|
||
🚀 达梦数据库批量执行器
|
||
======================================================================
|
||
📂 文件数: 14
|
||
🌐 服务器: 219.142.42.183
|
||
🔧 工具: D:\sortware\dm_manager\bin\disql.exe
|
||
======================================================================
|
||
|
||
[1/14]
|
||
======================================================================
|
||
📂 执行: lyg_scp_dm.sql
|
||
📋 Schema: lyg_scp
|
||
🎯 端口: 5256
|
||
======================================================================
|
||
............................................................
|
||
----------------------------------------------------------------------
|
||
✅ lyg_scp_dm.sql 执行成功
|
||
端口: 5256 | 耗时: 3.45秒
|
||
----------------------------------------------------------------------
|
||
|
||
[2/14]
|
||
======================================================================
|
||
📂 执行: themetis_scp_dm.sql
|
||
📋 Schema: themetis_scp
|
||
🎯 端口: 5256
|
||
======================================================================
|
||
............................................................
|
||
----------------------------------------------------------------------
|
||
✅ themetis_scp_dm.sql 执行成功
|
||
端口: 5256 | 耗时: 12.32秒
|
||
----------------------------------------------------------------------
|
||
|
||
... (继续执行其他文件)
|
||
|
||
======================================================================
|
||
📊 执行统计
|
||
======================================================================
|
||
总文件数: 14
|
||
✅ 成功: 14
|
||
❌ 失败: 0
|
||
⏱ 总耗时: 45.67秒
|
||
|
||
按端口统计:
|
||
端口 5256: 14个文件 (✅14 ❌0)
|
||
|
||
📄 详细报告: ./output/execution_report_1731660123456.json
|
||
======================================================================
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 工作原理
|
||
|
||
### 1. 自动检测schema
|
||
```javascript
|
||
// 从SQL内容中提取schema名称
|
||
"themetis_data"."table_name" → schema = "themetis_data"
|
||
```
|
||
|
||
### 2. 自动路由端口
|
||
```javascript
|
||
// 根据db-mapping.json配置选择端口
|
||
schema "themetis_data" → port 5256
|
||
schema "other_schema" → port 5266
|
||
```
|
||
|
||
### 3. 使用disql执行
|
||
```bash
|
||
disql SYSDBA/@1sdgCq456@219.142.42.183:5256 @schema_dm.sql
|
||
```
|
||
|
||
### 4. 收集统计信息
|
||
- 成功/失败数量
|
||
- 执行耗时
|
||
- 错误信息
|
||
- 生成JSON报告
|
||
|
||
---
|
||
|
||
## 📁 完整工作流
|
||
|
||
```
|
||
┌─────────────────────┐
|
||
│ 1. 转换SQL │
|
||
│ node converter.js │
|
||
└──────────┬──────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────┐
|
||
│ input/*.sql │
|
||
│ (PostgreSQL) │
|
||
└──────────┬──────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────┐
|
||
│ output/*_dm.sql │
|
||
│ (达梦格式) │
|
||
└──────────┬──────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────┐
|
||
│ 2. 执行SQL │
|
||
│ node dm-executor.js │
|
||
│ output/*_dm.sql │
|
||
└──────────┬──────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────┐
|
||
│ 达梦数据库 │
|
||
│ 219.142.42.183:5256│
|
||
└─────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🛠 配置文件说明
|
||
|
||
### db-mapping.json
|
||
```json
|
||
{
|
||
"defaultConnection": {
|
||
"host": "219.142.42.183",
|
||
"user": "SYSDBA",
|
||
"password": "@1sdgCq456"
|
||
},
|
||
"defaultPort": 5256,
|
||
"schemaMappings": {
|
||
"lyg_scp": { "port": 5256, "description": "连云港SCP" },
|
||
"themetis_data": { "port": 5256, "description": "主数据" }
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## ❓ 常见问题
|
||
|
||
### Q1: 找不到disql工具
|
||
**A**: 检查路径是否正确
|
||
```bash
|
||
dir D:\sortware\dm_manager\bin\disql.exe
|
||
```
|
||
|
||
如果路径不同,修改`dm-executor.js`第23行。
|
||
|
||
---
|
||
|
||
### Q2: 执行失败
|
||
**A**: 查看详细报告
|
||
```bash
|
||
# 报告文件在
|
||
./output/execution_report_*.json
|
||
```
|
||
|
||
---
|
||
|
||
### Q3: 连接数据库失败
|
||
**A**: 检查配置
|
||
1. db-mapping.json中的密码是否正确
|
||
2. 数据库是否可访问
|
||
3. 端口是否正确
|
||
|
||
测试连接:
|
||
```bash
|
||
D:\sortware\dm_manager\bin\disql.exe SYSDBA/@1sdgCq456@219.142.42.183:5256
|
||
```
|
||
|
||
---
|
||
|
||
### Q4: 某些SQL执行失败
|
||
**A**: 检查SQL语法
|
||
1. 查看报告中的错误信息
|
||
2. 手动在DM Manager中测试SQL
|
||
3. 可能需要重新转换SQL
|
||
|
||
---
|
||
|
||
### Q5: 执行速度慢
|
||
**A**: 正常现象
|
||
- 大文件需要更长时间
|
||
- 可以单独执行小文件测试
|
||
- disql是串行执行,比较稳定但不够快
|
||
|
||
---
|
||
|
||
## 📈 性能建议
|
||
|
||
### 1. 分批执行
|
||
对于大量SQL文件,建议分批执行:
|
||
```bash
|
||
# 先执行小的schema
|
||
node dm-executor.js output/lyg_scp_dm.sql output/model_scp_dm.sql
|
||
|
||
# 再执行大的schema
|
||
node dm-executor.js output/themetis_scp_dm.sql
|
||
```
|
||
|
||
### 2. 按端口分组
|
||
如果有多个数据库端口,可以分别执行:
|
||
```bash
|
||
# 只执行5256端口的
|
||
node dm-executor.js output/schema1_dm.sql output/schema2_dm.sql
|
||
|
||
# 再执行5266端口的
|
||
node dm-executor.js output/schema3_dm.sql
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 优势
|
||
|
||
1. **零额外依赖** - 只需Node.js和disql
|
||
2. **最稳定** - 使用官方工具
|
||
3. **完全自动** - 一键执行所有SQL
|
||
4. **智能路由** - 自动识别schema并选择端口
|
||
5. **详细报告** - JSON格式的执行报告
|
||
6. **可重复执行** - 支持多次执行
|
||
|
||
---
|
||
|
||
## 📞 技术支持
|
||
|
||
遇到问题?检查:
|
||
1. Node.js版本 (node -v)
|
||
2. disql工具 (测试手动连接)
|
||
3. 配置文件 (db-mapping.json)
|
||
4. SQL文件 (output目录)
|
||
5. 网络连接 (ping 219.142.42.183)
|
||
|
||
---
|
||
|
||
## 🎉 开始使用
|
||
|
||
```bash
|
||
# 1. 转换SQL
|
||
node converter.js
|
||
|
||
# 2. 执行SQL
|
||
node dm-executor.js output/*_dm.sql
|
||
|
||
# 或者直接双击
|
||
execute-all.bat
|
||
```
|
||
|
||
**就这么简单!** 🚀
|