通过dts迁移MYSQL数据到达梦数据库
达梦提供了免费的数据迁移工具DTS,可以将oracle,mysql,sql server,pg等数据库迁移到达梦,全图形化操作,非常的直观和方便,而且速度也很快。
安装完达梦数据库软件后,已自带这个数据迁移工具。
linux上打开方式如下:
前提操作系统有安装图形界面
一、数据迁移步骤
1.新建工程
2.新建迁移
3.选择MYSQL迁移到DM
4.输入mysql数据库源端信息
注意:如果连接mysql数据库报错,则可以通过指定驱动,使用mysql源库对应版本的驱动,而且要指定要迁移的数据库名。
5.输入DM目的端信息
6.选择迁移对象
7.审阅迁移任务
8.执行迁移任务
二、非对象表处理
对于非表对象,如存储过程、触发器、自定义类型、函数等对象。需要从源端MYSQL库导出为sql文件,并且经过人工修改为满足达梦语法的sql文件,再导入达梦数据库。
例如:mysqldump -u 数据库用户名 -p -n -t -d -R 数据库名 > xx.sql
三、核对数据库移植结果
1、统计源端MYSQL数据库要迁移库的对象数目
2、统计目的端达梦数据库的对象和表数据量:
四、迁移完要做的事
数据核对完成无问题后,应进行一次全库的统计信息更新工作。更新统计信息的目的在于大批量迁移数据后,可能会导致数据库优化器根据错误的统计信息得到错误的查询计划,严重影响查询性能。
收集统计信息的命令如下:
DBMS_STATS.GATHER_SCHEMA_STATS(用户名,100,TRUE,FOR ALL COLUMNS SIZE AUTO);
五、迁移常见报错和处理
1.无效的数据类型
例如:mysql里面某个表字段数据类型是int(10),迁移到达梦会报无效的数据类型。因为达梦里面int数据类型不需要设置精度。所以只需要将int(10)改为int。
2.无效的时间类型数据
例如:在mysql中时间类型TIMESTAMP默认 default 设置为‘0000-00-00 00:00:00’,而在DM中TIMESTAMP类型数据不能为‘0000-00-00 00:00:00’,在DM中是不合法的,必须在‘0001-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’之间。所以处理方法,可以先在达梦修改该字段为varchar2,迁移完数据后。在达梦处理掉这些不合法的数据,再将字段类型改为TIMESTAMP。
3. 记录超长
初始化库的时候,选择的页大小影响后面表每行数据的长度,表每行的长度之和(普通数据类型)不能超过一页大小,如果超过1页大小即报记录超长的错误。解决办法:初始化库,选择合适的页大小;也可以将varchar类型比较长的(如varchar2(8000)这种),修改成text类型;或者对表启用超长记录alter table 表名 enable using long row;
4.字符串截断
出现这个问题,一般是字符集、表字段长度不够。所以要根据源库选择合适的字符集,遵循源库是什么字符集,目标端也选择该字符集。目的端表字段长度不足,则需要手动将该字段长度增大,或者选择迁移方式的时候,选择字符长度隐射关系为2(即将目的端字符串类型字段自动扩大2倍长度)。
5.违反唯一性约束
这种情况是因为表中设置了唯一性约束或者主键约束,但是数据中有重复记录造成的。
这种情况有可能是原始库的约束被禁用了,或者数据重复迁移造成的。
6.违反引用约束
这种问题主要是由外键约束造成的,父表的数据没有迁移,先迁移了子表的数据。所以在迁移数据的时候,可以分三步走,先迁移表结构,再迁移数据,最后迁移索引、约束等。
7.视图迁移过程中顺序问题:无效的用户对象
这个问题一般是因为在迁移视图之前,没有将视图依赖的表迁移过去。所以要遵循先迁移表,再迁移视图的顺序。