本次基于达梦8数据库完成同一服务器、不同端口两个DM实例间同构数据迁移验证:
localhost:5236,新建测试表DTS并写入测试数据localhost:5237,空初始实例,无任何自定义数据表在端口5236源实例执行SQL:
-- 创建带自增主键、非空约束测试表
CREATE TABLE DTS (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
-- 批量插入3条测试数据
INSERT INTO DTS(name) VALUES ('A'),('B'),('C');
-- 本地查询验证数据
SELECT * FROM DTS;
执行后查询窗口可以正常看到3条记录,直观上数据已入库。
COMMIT;达梦数据库默认开启自动事务隔离,手动DML插入语句执行后,数据仅存放于当前会话事务缓冲区,并未持久化写入磁盘文件。
在当前查询会话看到数据,未执行 COMMIT; 提交事务,缓冲区数据对数据库全局、其他会话均不可见。
登录5237端口目标实例执行查询:
SELECT * FROM DTS;
返回错误:-2106:无效的表或视图名[DTS]
说明目标库无该表,迁移前置条件就绪。
打开DTS迁移工具,新建工程,创建迁移任务,迁移方向选择:达梦数据库 → 达梦数据库(DM→DM同构迁移)。
本地双实例需保证两个端口正常监听、防火墙无端口拦截。
勾选系统默认业务模式 SYSDBA,迁移对象勾选:模式、表、索引、约束、序列、自增属性全部内容;源模式与目标模式均映射为SYSDBA。
选中DTS测试表,打开转换配置窗口,核心参数设置:
系统汇总任务详情:
源库:jdbc:dm://localhost:5236
目标库:jdbc:dm://localhost:5237
迁移对象:1个模式、2张数据表
并发执行数:2,出错后继续执行
参数核对无误后,启动迁移任务。
登录5237目标实例执行查询语句:
SELECT * FROM DTS;
现象:
✅ 数据表结构完整存在(字段、主键、自增属性、约束全部迁移成功)
❌ 表内无任何业务数据,0条记录
回到5236源端会话复盘:
插入数据之后未执行COMMIT提交事务。
DTS工具属于独立外部会话,访问源数据库时只能读取已提交的持久化数据;未提交的事务内临时数据,外部会话无法读取,因此迁移工具仅拉取到表结构,读取不到行数据。
COMMIT;
💡 Tip1:达梦DML操作务必提交事务后再执行迁移
达梦默认事务隔离级别为READ COMMITTED,外部迁移工具属于全新数据库会话,只能查询已COMMIT落地磁盘的数据;会话内未提交的临时数据,DTS无法读取,只会迁移空表结构。
💡 Tip2:自增主键表迁移必须勾选序列同步
若未勾选迁移自增序列,目标库自增计数器会从初始值开始,无法接续源端ID顺序。
💡 Tip3:同名表迁移策略按需选择
目标库已有同名表时,可选择:清空已有数据、跳过迁移、报错终止三种模式,避免主键冲突。
文章
阅读量
获赞
