重要:如果报以上错误,建议换一个dts迁移工具,因为有时候换个工具,就解决了很多报错问题。 如果不想换,可以继续阅读下面的内容。
本文主要记录MySQL数据迁移到DM8上遇到MySQL源端表存在datetime数据类型时,并且包含datetime数据类型的表达上百张的的情况下,如何完成数据迁移的完整步骤。
1. 解决方法
将MySQL源端表的是datetime数据类型的字段修改为varchar(30)。
2. 处理步骤
(以下操作建议备份数据到测试环境的操作;或者操作前,将业务停掉,并做好数据备份,就可以放心操作啦~)
1).在MySQL源端,通过字典表一次性获取出包含datetime字段的表及字段名,并拼接成批处理语句,批量修改字段类型为varchar(30);
2).使用dts工具迁移源端MySQL的数据到达梦;
3).查看迁移日志,确定没有报错信息;
4).数据对比(工具:数据比对工具)
5).达梦端对应修改源端MySQL中本身为datetime类型的表的字段数据类型为timestamp类型;
6).检查datetime字段数据有没有不符的情况。
3.具体实施过程中的工具和手段
1).在MySQL源端,通过字典表一次性获取出包含datetime字段的表及字段名,并拼接成批处理语句,批量修改字段类型为varchar(30);
SELECT -- distinct a.TABLE_NAME -- , b.column_name,b.data_type DISTINCT CONCAT('alter table test.', a.TABLE_NAME , ' MODIFY column ', b.column_name ,' varchar(30) ;')FROM information_schema.`TABLES` a LEFT JOIN information_schema.`COLUMNS` b ON a.table_name=b.table_nameWHERE a.table_schema ='test' AND b.data_type LIKE '%datetime%'ORDER BY a.table_name;
2).使用dts工具迁移源端MySQL的数据到达梦;
3).查看迁移日志,确定没有报错信息;
4).拼接源端数据统计批处理语句
SELECT DISTINCT CONCAT('union all select ','''',a.TABLE_NAME,'''','as table_name , count(*) from lcdp_ningstec20230214.', a.TABLE_NAME )FROM information_schema.`TABLES` a LEFT JOIN information_schema.`COLUMNS` b ON a.table_name=b.table_nameWHERE a.table_schema ='test' AND b.data_type LIKE '%datetime%' ;
5).数据对比工具下载地址
链接:https://pan.baidu.com/s/137g9lhaQs38gP_zkBavWGA?pwd=e8al
提取码:e8al
6).达梦端对应修改源端MySQL中本身为datetime类型的表的字段数据类型为timestamp类型;
MySQL端的Navicat工具执行:
SELECT -- distinct a.TABLE_NAME -- , b.column_name,b.data_type DISTINCT CONCAT('alter table test.', a.TABLE_NAME , ' MODIFY ( ', b.column_name ,' timestamp );')FROM information_schema.`TABLES` a LEFT JOIN information_schema.`COLUMNS` b ON a.table_name=b.table_nameWHERE a.table_schema ='test' AND b.data_type LIKE '%datetime%'ORDER BY a.table_name;
更多内容,请访问达梦社区地址:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台
来源地址:https://blog.csdn.net/Penrosee/article/details/129040936