达梦数据库迁移工具(dts)的使用说明

在服务器或者终端上安装达梦数据库软件,会产生一个tool的目录,该目录中存在dts工具,使用图形化界面调用即可使用,适用于将各种主流数据库数据迁移至达梦数据库,方便快捷易上手。

迁移流程:

1.确定源端数据库类型及网络环境:

达梦支持各种主流数据库迁移至达梦数据库,如oracle,mysql,sql server,人大金仓等,迁移前需确定源端数据库类型,获取对应的数据库驱动,确认网络是否通畅,网速是否能够达到标准;

2.在达梦数据库中修改兼容参数COMPATIBLE_MODE,此参数含义为:是否兼容其他数据库模式。0:不兼容,1:兼容 SQL92 标准,2:部分兼容 ORACLE,3:部分兼容 MS SQL SERVER,4:部分兼容 MYSQL,5:兼容 DM6,6:部分兼容 TERADATA

如源端数据库为mysql时需设置兼容参数为4,在数据库中执行如下操作,SP_SET_PARA_VALUE(2,‘COMPATIBLE_MODE’,4);执行后重启数据库生效。

3.创建迁移任务

打开dts,创建工程,在工程下点击‘迁移’,右键新建迁移,选择相对应的迁移类型,此处演示mysql迁移到达梦。

选择完迁移类型后点击下一步配置源端数据库信息,如ip,端口,用户名,口令,数据库名等,需要指定mysql数据库驱动,源端驱动版本尤为重要,如下图所示

mysql数据库 DBeaver 迁移人大金仓数据库 mysql数据库迁移到达梦_sql


源端数据库连接报错处理:

①如果指定的mysql驱动与源端版本不一致会出现报错(错误号: 0 错误消息: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long)此时换上版本相对应的驱动即可。

②如果提示报错为:错误号: 1045 错误消息: Access denied for user ‘root’@‘192.168.183.1’ (using password: YES)则为密码错误,需确认用户名密码是否填写正确。

③如果提示报错,报错信息为:错误号: 0 错误消息: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.此时需要排查网络及源端数据库状态是否正常,迁移工具所在服务器是否存在权限连接mysql数据库等方面;完成源端数据库配置后点击下一步,配置目的端数据库信息,目的端为达梦数据库时一般不需要进行指定驱动,使用默认驱动即可。目的端配置完成后点击下一步进行选择迁移对象,达梦迁移工具支持迁移sql的结果集,支持指定源端各个用户(或者库)的数据进行迁移,此次选择从数据源复制对象,目的模式选择需要往达梦库的哪个模式中进行迁移。点击下一步后选择需要将哪些表迁移至达梦数据库,选中需要迁移的表,点击下方转换,可以调整迁移策略选项及列映射选项,如只想迁移表结构不迁移数据,则取消勾选数据即可

mysql数据库 DBeaver 迁移人大金仓数据库 mysql数据库迁移到达梦_mysql_02


如果需要将源端char类型改为varchar2类型,则点击列映射选项可进行修改

mysql数据库 DBeaver 迁移人大金仓数据库 mysql数据库迁移到达梦_mysql_03


也可在列映射选项中对表进行加列忽略某列操作

转换完成后点击下一步即可进行数据迁移。

迁移过程中如出现报错需要根据报错信息进行分析解决,如报错为列长度超出定义,则需要在达梦端将字段精度进行扩大,调整表结构后重新迁移即可。

mysql迁移到达梦注意事项:
1.DM默认不支持zeroDateTime这种设置,将’0000-00-00 00:00:00’改为’1900-01-01 00:00:00’
2.部分mysql环境下,从mysql迁移到达梦,会出现部分表正常,部分表出现乱码,通过采用自定义url的方式,加上字符集编码参数,可以解决。如jdbc:mysql://IP:3306/unipay?useUnicode=true&characterEncoding=utf-8
3.达梦数据库的int类型,不需要、也不能设置精度
如:create table test1(v1 int(10),v2 varchar(20));
需要更改成
create table test1(v1 int,v2 varchar(20);
4.对于字段的default设置,默认的字符或字符串默认值,需要添加单引号’ ‘,如a char(10) default ‘abc’。
5.达梦的convert()函数中的type在前, value在后,而MySQL数据库中convert()函数则恰恰相反,对于cast()函数的用法则一致,测试示例如下:
–MySQL
CONVERT(CASE WHEN TEMP_STA.c_data_value < 0 THEN NULL ELSE TEMP_STA.c_data_value END, SIGNED) AS “ONLINEUSER”
–DM
CONVERT(INTEGER,CASE WHEN TEMP_STA.c_data_value < 0 THEN NULL ELSE TEMP_STA.c_data_value END) AS “ONLINEUSER”
6.时间间隔表达式
对于类似date_format((“S”.“CREATE_TIME” + interval 1 year),’%Y’)、date_format((now() + interval -(1) year),‘%Y’))的时间间隔表达式,对于interval关键词后的正数需添加单引号’',如interval ‘1’ year,对于负数,需改写,如interval ‘-1’。
对于遇到的其他问题,如多表的联合查询语法、含有特殊函数的SQL语句等,需根据实际情况进行解决。