使用sqluldr2快速高效大批量导出Oracle数据

sqluldr2是一个基于OCI的文本导出工具,小巧方便,使用方法类似于Oracle自带的exp,支持自定义SQL本地客户端的导出,速度快,效率高。

完成下载,将sqluldr264放入oracle_home下,或是oracleclient下也行,未必需要是oracleservice,然后可以用cmd运行命令,或是写成批处理文件。

软件下载地址:

百度云链接:https://pan.baidu.com/s/1V8eqyyYsbJqQSD-Sn-RQGg 
提取码:6mdn 

下载完后并解压会生成4个文件

sqluldr2.exe                用于32位windows平台; 
sqluldr2_linux32_10204.bin  适用于linux32位操作系统;
sqluldr2_linux64_10204.bin  适用于linux64位操作系统;
sqluldr264.exe              用于64位windows平台。

连接数据的方法:

本地连接方式:

./sqluldr2linux64.bin user=gltest/gltest query="select * from T_H_BK_CUSTOMER_20180114_0;" file=/home/oracle/sqluldr2/T_H_BK_CUSTOMER_20180114_0.csv

客户端连接:TNS方式

./sqluldr2linux64.bin user=gltest/gltest@orcl query="select * from T_H_BK_CUSTOMER_20180114_0;" file=/home/oracle/sqluldr2/T_H_BK_CUSTOMER_20180114_0.csv

客户端连接:直接连接方式

./sqluldr2linux64.bin user=gltest/gltest@192.168.128.98:1521/orcl query="select * from T_H_BK_CUSTOMER_20180114_0;" file=/home/oracle/sqluldr2/T_H_BK_CUSTOMER_20180114_0.csv

对于大表可以输出到多个文件中,指定行数分割或者按照文件大小分割,例如:

sqluldr2 testuser/testuser@orcl query="select * from test_table2" file=test_table2_%B.txt batch=yes rows=500000
    

执行数据导出命令

1、常规导出 

sqluldr2 hr/hr123@127.0.0.1:1521/XE query="select * from bb_user_t" head=yes file=D:\sqluldr2\File\tmp001.csv
说明:head=yes   表示输出表头

2、使用sql参数

sqluldr2 hr/hr123@127.0.0.1:1521/XE sql=query.sql head=yes file=D:\sqluldr2\File\tmp002.csv
或
sqluldr2 hr/hr123@127.0.0.1:1521/XE sql=D:\sqluldr2\query.sql head=yes file=D:\sqluldr2\File\tmp002.csv
-- query.sql的内容为:select * from bb_user_t

3、使用log参数
当集成sqluldr2在脚本中时,就希望屏蔽上不输出这些信息,但又希望这些信息能保留,这时可以用“LOG”选项 来指定日志文件名。

sqluldr2 hr/hr123@127.0.0.1:1521/XE sql=D:\sqluldr2\query.sql head=yes file=D:\sqluldr2\File\tmp003.csv log=+D:\sqluldr2\File\tmp003.log

比较常用参数的是:

query:用这个参数可以自定义导出语句
file:导出的文件名字和目录
log:日志
parfile:可以把参数放到parfile文件里,这个参数对于复杂sql很有用。
field:设置导出文件里的分隔符        

遇到错误的解决方法:

1. 导出文件里有中文显示乱码,需要设置参数charset=UTF8
2. ORA-24345: A Truncation or null fetch error occurred,设置参数safe=yes
OracleSQL

我来吐槽

*

*