一次千万级数据迁移遇到的问题及解决方法

这次是4千万记录从oracle迁移到mysql数据库,操作系统均为windows,oracle端使用PL/SQL Developer操作:
1、select出所有数据后,使用PL/SQL Developer自带导出工具导出sql文件,文件巨大,然后mysql端命令行下登录后使用source命令直接导入,那叫一个慢,而且plsql导出的sql文件是每条记录一行insert into 所以导致文件巨大,而且效率低下,如果使用ultraedit编辑替换掉insert into语句也要很长时间,所以这个方法放弃,想到了使用mysql的load data方法;

2、oracle端使用PL/SQL Developer工具导出csv文件,文件小了不少,然后在mysql端使用load data infile ‘e:/alldata.txt’ into table table_name fields terminated by ‘,’ enclosed by ‘”‘ lines terminated by ‘\n’ (column1,column2…);,结果运行几分钟后提示只有一行数据导入成功,这就奇了怪了。使用ultraedit打开,那个慢啊,看上去每行数据都换行正常啊,但是使用”^n”并不能完整匹配换行,切换到十六进制查看,发现两行数据之间是0x0d 0x0a,百度一下发现原来在windows系统下换行同时使用了0d(\r)0a(\n),原来如此,更改sql语句如下:load data infile ‘e:/alldata.txt’ into table table_name fields terminated by ‘,’ enclosed by ‘”‘ lines terminated by ‘\n’ (column1,column2…);结果成功导入。
3、在解决第二个问题时,使用测试数据导入时遇到点小插曲,把原始数据复制一部分到一个新建文件,默认utf8保存,那就是ultraedit默认保存时是有bom的格式,文件开头多了三个字节,0xef bb bf,所以在入库后会发现第一行第一个字段的数据是有问题的,只需要在ultraedit里另存为utf8无bom格式即可。