加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

利用sqluldr2和sqlldr实现Oracle下快速导出导入及字段包含换行回

发布时间:2020-12-12 15:31:31 所属栏目:百科 来源:网络整理
导读:官方说法:Sqluldr2(SQL * UnLoader 第二版)是一个灵活与强大的Oracle 文本导出程序。 可能很多人对它不是很熟悉,虽然是很小的一个工具,但是功能比较完善,所有我都想到的需求,它都能提供。 尤其是支持linux下的管道和返回状态,简直太棒了。 sqluldr2

官方说法:Sqluldr2(SQL * UnLoader 第二版)是一个灵活与强大的Oracle 文本导出程序。

可能很多人对它不是很熟悉,虽然是很小的一个工具,但是功能比较完善,所有我都想到的需求,它都能提供。

尤其是支持linux下的管道和返回状态,简直太棒了。

sqluldr2 scott/tiger … file=- | sqlldr control=…

如上所示,在从 Oracle 向 Oracle 迁移数据时,简单高效,切实的解决了用户的痛点。

另外还支持根据条数或者大小分割到处文件。例如每100万条数据存放一个文件或者限制每个文件为1G。

还支持口令加密加密,GZIP压缩,SQL * Loader 的控制文件,针对MySQL特殊优化,简直不能更贴心了。

具体用法大家参考官方文档:http://www.onexsoft.com/software/sqluldr2.pdf

本文旨在解决另外一个问题,在将数据导成文件时,如果字段中包含回车或者换行,就会破坏数据格式,导致数据没法正常导入。

最简单的解决方法就是在查询SQL中将回车换行符替换掉

select replace(replace(column,chr(10),''),chr(15),'') from TABLE_NAME;

但是个人感觉这种方法不是很好,因为你不知道哪些字段可能包含回车和换行,挨个字段去replace也比较麻烦,这里提供另外一种解决方法,指定回车换行符之外的记录分隔符。一般在GBK字符集下,我用0x06来当作换行符。因此,在用sqluldr2到出数据时,需要设置record参数。

sqluldr2 scott/tiger sql=emp.sql record=0x06

同时,在用sqlldr导入时,需要ctl控制文件中配置记录分割符号

load data
INFILE * "STR X'06'"

这样就可以正常导出导入了。

但是这样做也有一个问题,sqlldr导入失败时候产生的bad文件,由于记录分割符不能正常换行,因此无法直观的看出哪一行数据出错了,很头疼(我觉得可以在UltraEdit下转换成16进制,再将0x06替换成换行,有时间验证下)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读