sqluldr2快速卸载Oracle数据到文本文件
如果表中某条记录的字段含有回车或换行,不作特殊处理将会导出两行记录。
SQL> select * from test; A B ---------- ---------- 中国 1 北京 1
在上面的汉字后面有一个0x0a换行符,直接导出
yqlong@yqlong-Notebook:~$ sqluldr2 user=scott/tiger file=a.txt query=test charset=zhs16gbk field='|'0 rows exported at 2012-05-04 23:02:22, size 0 MB.
2 rows exported at 2012-05-04 23:02:22, size 0 MB.
output file a.txt closed at 2 rows, size 0 MB.
1 中国yqlong@yqlong-Notebook:~$ cat -n a.txt
2 |1
3 北京
4 |1
这样将字段中的换行符直接输出了,导入数据库时肯定是有问题的了。
yqlong@yqlong-Notebook:~$ ./sqluldr2 user=scott/tiger file=a.txt query=test charset=zhs16gbk field='|' escape='\' escf=0x0a esct=n
0 rows exported at 2012-05-04 23:16:06, size 0 MB.
2 rows exported at 2012-05-04 23:16:06, size 0 MB.
output file a.txt closed at 2 rows, size 0 MB.yqlong@yqlong-Notebook:~$ cat -n a.txt1 中国\n|1
2 北京\n|1
这样整条记录就在一行上了。
看文档说明这个工具支持并行的处理,但据说只支持在服务端的并行,到时测试下。
并行处理的参考说明:http://www.dbatools.net/mytools/parallel-inside-sqluldr2.html
user=scott/tiger
query=select * from emp where rowid >= :minrid and rowid < :maxrid
split=emp
degree=4
file=uldrdata.%p.txt
log=log.%p.log
刚才测的时候老是把上面的minrid和maxrid换成实际的rowid,造成每次导出的几个文件都一样。哈哈。直接按上面的写法就可以了哦,不需要替换。
后面再记录将导出的数据加载到GP上。
工具下载请到 http://www.anysql.net/download