达梦数据库第五周学习总结——DBLink与数据迁移实战
本周深入学习了达梦数据库的 DBLink 技术(同构与异构连接)、ODBC 配置、DTS 数据迁移、以及 Oracle/MySQL/SQL Server 三种异构数据库向达梦的数据迁移实操。
一、数据库 DBLink 技术
1.1 什么是 DBLink
DBLink(Database Link)即数据库链接,简单说就是在一个数据库中创建通往另一个数据库的"通道"。创建之后,在本地数据库执行 SQL 时,可以直接查询远程数据库中的表,就像查本地表一样。打个比方:手机上存了联系人"张三",以后打电话时只需说"打给张三",不用每次输入 11 位手机号码。DBLink 就是把远程数据库的连接信息(IP、端口、账号、密码)存成一个名字,之后在 SQL 中用 `@链接名` 就能访问。
1.2 同构 DBLink(达梦→达梦)
同构 DBLink 指两端都是达梦数据库,通过 MAL(多节点访问层)协议进行通信。MAL 是达梦内部节点间通信的专有协议,配置在 dmmal.ini 文件中。
前提条件:
1. 两台数据库的 `MAL_INI = 1`
2. 两台机器网络互通(`ping` 通)
3. 不能是同一台机器(达梦拒绝自连,报 -2235)
部署步骤:
① 删除旧链接(如存在)
DROP LINK DM02_LINK;
② 创建同构 DBLink
CREATE LINK DM02_LINK
CONNECT WITH SYSDBA
IDENTIFIED BY Dameng123
USING '192.168.200.165/5236';
③ 测试连通性
SELECT 1 FROM DUAL@DM02_LINK;返回 1 表示成功
④ 查远程库信息
SELECT NAME FROM V$INSTANCE@DM02_LINK;返回远程库实例名
⑤ 跨库联合查询
SELECT a.*, b.*FROM 本地表 aJOIN 远程表@DM02_LINK b ON a.id = b.id;
核心语法:`表名@链接名` —— `@` 表示"去那边执行"
1.3 异构 DBLink(达梦→MySQL/Oracle)
异构 DBLink 用于达梦与不同类型数据库(如 MySQL、Oracle)的连接。不同于同构 DBLink 通过内部 MAL 协议,异构 DBLink 依赖 **ODBC 标准接口**作为中间桥梁。
ODBC 三层架构:
应用层(达梦 SQL) → ODBC驱动管理层(unixODBC) → 数据库驱动层(libmyodbc.so)
部署步骤:
Step 1:安装依赖
yum install -y unixODBC unixODBC-devel mysql-connector-odbc mariadb-server
Step 2:配置 ODBC
`/etc/odbcinst.ini`(驱动注册):
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib64/libmyodbc5.so # 驱动文件路径
Setup = /usr/lib64/libodbcmyS.so
FileUsage = 1
`/etc/odbc.ini`(数据源配置):
[MySQL_DSN] # 数据源名称(DSN)
Description = MySQL test
Driver = MySQL # 指向odbcinst.ini中的[MySQL]
Server = 127.0.0.1
Port = 3306
User = root
Database = test
*Step 3:测试 ODBC 连通
echo "SELECT * FROM mysql_test;" | isql MySQL_DSN root
Step 4:达梦创建异构 DBLink(需企业版授权)
CREATE LINK MYSQL_LINK
CONNECT 'ODBC' WITH root
IDENTIFIED BY ''
USING 'MySQL_DSN';
SELECT * FROM mysql_test@MYSQL_LINK;
1.4 同构 vs 异构对比
| 区别 | 同构(DM→DM) | 异构(DM→MySQL) |
|------|------------|----------------|
| 关键字 | CREATE LINK | CREATE LINK (企业版) |
| 连接方式 | MAL(内部协议) | ODBC(外部驱动) |
| 需要 ODBC | ❌ | ✅ |
| 需要 dmmal.ini | ✅ | ❌ |
| 版本要求 | 企业版 | 企业版+dm.key |
| @语法 | 一样 | 一样 |
二、DTS 数据迁移实战
2.1 DTS 简介
DTS(Data Transfer Service)是达梦自带的图形化数据迁移工具(`E:\DM\tool\dts.exe`),支持 Oracle、MySQL、SQL Server、PostgreSQL、DB2 等十余种数据库向达梦 DM8 的迁移。
2.2 通用操作流程
1. DTS → 新建工程
2. 右键"数据源" → 新建源数据库 → 测试连接
3. 右键"数据源" → 新建目标数据库(DM) → 测试连接
4. 新建转换 → 选择迁移对象(表/视图) → 开始迁移
5. 验证:行数对比、索引检查、抽样数据
2.3 三种场景实测
| 场景 | 源库 | 状态 |
|------|------|------|
| Oracle→DM | Oracle XE 18c (WSL2) | ✅ 完成 |
| MySQL→DM | MySQL 5.5 (WSL2) | ✅ 完成 |
| SQL Server→DM | SQL Server Express | ⏳ 待安装 |
2.4 常见类型映射
| Oracle | MySQL | SQL Server | DM |
|--------|-------|------------|-----|
| NUMBER | INT | INT | DECIMAL/INT |
| VARCHAR2 | VARCHAR | NVARCHAR | VARCHAR |
| DATE | DATETIME | DATETIME | TIMESTAMP |
| CLOB | TEXT | TEXT | CLOB |
2.5 DTS 优势
- 零代码:纯图形化操作,拖拽即可
- 批量迁移:支持一次迁移几百张表
- 类型自动映射:自动识别源库数据类型并转换为 DM 对应类型
- 增量同步:支持全量+增量持续同步
三、Oracle XE 18c 在 WSL2 上的安装
3.1 安装过程
1.复制 RPM 到 WSL2
cp /mnt/e/oracle-database-xe-18c-1.0-1.x86_64.rpm /tmp/
rpm -ivh --nodeps /tmp/oracle-xe.rpm
2.修复 hosts(WSL2 关键步骤)
echo "$(hostname -I | awk '{print $1}') $(hostname)" >> /etc/hosts
3.配置 Oracle
/etc/init.d/oracle-xe-18c configure
端口: 1539 密码: oracle123
3.2踩坑记录
- WSL2 无固定 IP → 需要手动添加 hosts 记录
- Oracle 默认端口 1521 在 WSL2 不可用 → 改为 1539
- DTS 连接 Oracle 时不能用 `localhost` → 需要用 WSL2 的实际 IP(`172.24.95.133`)
四、本周知识体系达梦 DM8 数据互通
│
┌───────────────┼───────────────┐
│ │ │
同构DBLink 异构DBLink DTS迁移
(DM←→DM) (DM←→MySQL等) (批量数据迁移)
│ │ │
基于MAL协议 基于ODBC标准 图形化操作
dmmal.ini odbc.ini/ Oracle/MySQL/
odbcinst.ini SQLServer→DM
│ │ │
✅已验证 ⚠️需企业版 ✅已完成
五、核心收获
1. DBLink 是同构/异构数据库互通的基石,同构用 MAL 协议,异构用 ODBC 标准
2. DTS 是最实用的迁移工具,零代码完成 Oracle/MySQL→DM 的数据迁移
3. ODBC 是跨数据库通信的核心标准,理解了 isql、odbc.ini、odbcinst.ini 的关系就掌握了异构连接的基础
4. WSL2 环境有特殊限制(IP 动态变化、监听器权限等),开发版缺少 dm.key 导致部分企业功能不可用
5. 管道模式 `echo "SQL" | disql -S`*是避免终端卡死的最佳实践