已索引

达梦数据迁移工具 DTS 支持:主流数据库迁移到达梦 / 达梦到达梦 / ODBC数据源、JDBC数据源的模式、表、视图到达梦 / 文件到达梦 / 达梦到文件 / Oracle到文件 / 达梦到Oracle的迁移。

迁移过程大同小异,这儿以 MySQL 到达梦为例,因为 Oracle 到达梦更简单一些。

执行 /dmdb/dmdbms/tool/dts(Windows 版本也行),打开数据迁移工具。
左侧栏,右键,新建工程,输入工程名如 MySQL-DM 后,确定。
展开新建的工程,在“迁移”上右击,“新建迁移”。
输入迁移名称如 omsmigrate 后,点“确定”,出现迁移向导,点击“下一步”。

请选择迁移方式

根据实际情况选择,这儿选择 “MySQL ==> DM”

数据源

填入数据源的信息(MySQL):
主机名: 192.32.9.61
端口:3306
用户名:root <--- 注意 root 账户要被允许远程连接
口令:xxxx
数据库名:可以不用选,后面的步骤中会列出该用户所有能访问的数据库。

以上信息填写后,点击“数据库名”一行后面的“刷新”按钮,查看源机上的数据库列表。
如果提示连接数据库失败,多为驱动问题。将源数据库服务器上的 mysql-connector-java.jar包下载到迁移工具所在的服务器,然后手工指定驱动即可。

目的

主机名:输入达梦数据库IP地址(如果迁移工具就在目标服务器的话,可保持默认 localhost)
端口:5236
用户名:SYSDBA(保持默认)
口令:XXXX

迁移选项

这儿配置“获取迁移对象方式”和“迁移策略”,保持默认。
在迁移策略里,可以统一将字符长度扩大x倍(不推荐)。

指定模式

指定源库中的模式和目的模式。
可以将多个模式分别指定到不同的模式,也可以指定到同一个模式。

指定对象

勾选需要迁移的源库对象。

审阅迁移任务

一定要勾选“以表格方式显示执行任务”,然后点击完成。

完成迁移向导

如果有表迁移失败,可以点击“查看详细信息”。
常见的错误是列宽导致数据迁移失败,可以根据实际情况进行处理,比如忽略,修正数据,增加列宽度等。

常见错误处理

列长度超出定义

完成后,提示出错。
点击“查看错误数据”,涉及的表为 "OMS"."OMS_OUTER_EVA",错误原因是:列[EVA_CONTENT]长度超出定义。
点击上一步会回到“迁移选项”,这儿可以将所有列都倍数扩大(不建议),点击“下一步”,选择模式后点击“下一步”,在“指定对象”步骤,仅选择出错的对象,点击“转换”。【DROP该表后,】在“迁移策略选项”标签下,勾选“表定义”下的“如果目的表已存在,先删除”;在“列映射选项”标签下,将相关列精度扩大倍数后再次执行。

可能因为软件的 bug,有时把表手工 drop 后再执行迁移任务,报错信息更具有可读性。

为避免该问题,可以参考下面的“字符超长与 CHAR 类型处理”。

违反唯一约束

这个多发生在之前已经迁移过,再次迁移需要先删除再迁移。如果有多个表都需要先删除再迁移,则需要勾选左下角“应用当前选项到其他同类对象”,然后勾选需要删除重建的表。

无效的模式名

如果将userA用户的表迁移到userB下,在外键定义的 DDL 语句里,reference 可能仍然引用 userA。在“转换”功能页里,要注意“约束”下面的“保留引用表原有模式信息”不要选中。

字符超长与 CHAR 类型处理

建议迁移时对字符宽度作扩大倍数处理,目前 X2 迁移都比较顺畅。

对于源库 char 类型的处理:

如果源库是 Oracle,迁移完成后,将 char 列修改回原精度即可去掉多余的空格。
在达梦电脑上执行如下命令,生成 DDL 语句,然后执行即可:
set pages 800;
select 'alter table ' || owner || '.' || table_name || ' modify ' || column_name || ' CHAR('|| data_length/2 || ');'
from "SYS"."ALL_TAB_COLUMNS" where owner='TMS'
and data_type in('CHAR');

如果源库是 MySQL,在迁移时将char 修改为 varchar,原因和方法见下。
MySQL 和 Oracle 对于 char,当数据小于精度时,都是填充空格。
但是,MySQL 在返回时会自动去掉空格,Oracle 则不会。这样,就可能出问题。
以运维管理平台为例,某 char 列的精度是10,但表中实际数据只有1个字符。在应用代码里用该列的值与某个字符进行对比判断,没有问题。
迁移到 DM 后,该列会填充 9 个空格,再去与某个字符比较就出问题了。
所以,当源库是 MySQL 时,可以在迁移时自动将 char 修改为 varchar 来解决该问题。
在 DTS 迁移选项页,取消勾选“使用默认数据类型映射关系”,然后点击“配置类型映射关系”,点击添加:
源数据类型选择 char,目的数据类型选择 varchar,目的精度选择32。
这样一来,DTS 就会将源库所有 char 修改为 varchar,且去掉填充的空格。

-- By 许望(RHCA、OCM、VCP)
最后修改:2026 年 03 月 17 日 05 : 20 PM
如果觉得我的文章对你有用,请随意赞赏