问题现象:
使用DTS迁移MYSQL5.4的数据库,迁移中DTS报错,存在20张表创建失败,报错列已存在,查看报错详情,发现create语句中,同样的字段列有两条一样的列。整个表所有的字段列全部重复了一次。
报错详情例如:
create table test(
c1 int,
c1 int,
c2 number,
c2 numbber
)
于是手动修改表结构,并再次迁移数据,完成后核对源端与目的端表数量,发现目的端少了10张表。
问题分析:
在替换了驱动,手动建表再迁移等多次尝试后,依旧失败。于是仔细分析源端那20张表,发现其中10张表大写,另外10张小写,且表名数据量都一样。这个时候无论你怎么取查这个大写的表,实际查看到的其实都是小写的表。
于是我们检查了mysql的库的大小写敏感,确认为大小写不敏感。
问题来了,mysql这10张大写的表是怎么创建的呢?
问题结论:
最初初始化mysql库的时候,当时库的表可能是大小写表名不敏感,在创建了那10张表后,修改了mysql数据库为大小写敏感。导致出现了同样重复的表名,大小写不一样的现象,且大写表在字典视图中也能被记录,这就是为什么dts迁移中重复迁移两次同样列名的原因。
问题处理:
1)首先需要将小写表名和大写表名分开,否则dts读取还是会读两次。由于无法操作那10张大写表,只能更改源端小写的10张表表名,给其加上尾缀_bak。
2)然后迁移尾缀为_bak的这10张表,不管那10张大表。迁移完成后,再将其表名改回原样,这样就处理完成了。
文章
阅读量
获赞