这几填捣鼓了一下Oracle及mysql平面文件导入导出的一些问题,简单做一个记录。
常见的有以下几种情况:
根据以上几种情况,分别进行处理
1、从Oracle导出数据到excel(csv) 小批量数据使用PL/SQL DEV或者Oracle SQL Developer导出即可, 对于大批量的数据,如大几十万及百万以上,使用sqluldr2linux64进行导出,但是需要注意字符集和串行的问题;
字符集:通过指定charset=ZHS16GBK
串行:串行问题一般是因为表列数据中存在与分隔符相同的情况,默认分隔符是英文的逗号(,),但是列数据中存在逗号,因此就会出现串行,解决办法就是将英文的逗号转换为其他符号,比如使用replace进行替换(select col1 A,replace(col1, ',', ) B, col2 C,replace(col2,',',',') D from t17 a ;)
2、导入excel(csv)数据到Oracle
这里使用的Oracle提供的工具sqlldr,需要建立好表,配置好控制文件,控制文件如下所示:
需要注意的是,对于时间及日期字段,要加上对应的列类型,否则会导入失败
导入语句:
3、从Oracle导出数据(csv、sql文本),导入到mysql(迁移Oracle数据到mysql)
这个份两种情况,如果Oracle所在服务器和mysql所在服务器可以通信,那么使用datax是最方便的;
否则就需要分两步走:首先从Oracle中使用sqluldr2linux64导出,注意不要指定charset=ZHS16GBK head=yes,省去一些麻烦,然后使用mysqlimport或者load data导入进mysql(需要配置secure_file_priv),如果没有对应的权限,也可以使用诸如mysql workbench或DBeaver(推荐使用该工具)导入进mysql(注意:如果是从Oracle导出的csv,确保其编码为utf-8,否则包含中文的数据导进去之后会乱码)。
或者将其直接导出至同网段的mysql中(使用datax),然后从mysql中使用mysqldump将其导出再导入到目标mysql数据库即可。
4、从mysql导出数据为excel(csv)
DBeaver是个比较好用的工具,测试之后还不错,大数据量没有出现卡死的情况;
使用mysqldump导出(需要配置secure_file_priv);
5、导入excel(csv)数据到mysql
这类和3中类似,可以参考3,使用客户端工具DBeaver或者mysqlimport(原理和load data相同)
6、mysql导出数据,导入到Oracle(迁移mysql数据到Oracle)
和3类似,如果之间可以通信,那么配置使用datax无疑最方便,无需落地,省去不少时间、空间。
使用DBeaver或者mysqldump导出,使用sqlldr导入即可;
7、不同mysql版本不同平台之间sql导出导入
这个目前还没测试,主要是高版本到低版本和低版本到高版本之间sql文件的导入,下次测试。