sqluldr2 是楼方鑫(d.b.c.a)编写的一个快速导出oracle 数据的工具。本文主要介绍如何使用这个工具实现工作中的几个需求。
一、导出文件分卷
对于压缩文件winrar, 一个比较深的功能就是压缩后的文件还是比较大时,不方便复制时,可以进行分卷压缩,制定每个压缩分卷文件的大小。同样,对于使用Toad 或者PL/SQL developer 工具导成文件文件时,由于缺乏这个功能,常常造成单个文件过大,生成时间过长。
sqluldr2 工具有一个rows参数,除了类似exp 工具的feedback 参数,每导出
此外size 参数可以指定导出文件的最大的大小。它与rows参数 取更严厉的要求来确定分卷文件的大小。
由于按多个文件输出,因此在指定输出文件名时,需使用动态文件名,例如指定file参数为orders_%B.csv,其中%B表示在多个文件导出时,表示文件序号。
例如,sqluldr2.par 定义为如下:
user=system/manager@dbserver
query=select /*+ parallel(8) */ * from orders
head=no
rows=1000000
file=d:\data\orders_%B.csv
log=d:\data\sqluldr.log
text=CSV
fast=yes
batch=yes
size=500
control=d:\data\order.ctl
mode=truncate
table=orders
执行起来:sqluldr2 parfile=./sqluldr2.par
二、ORACLE跨数据库的导入导出
我们将数据导成文本,其最终目的还是要导入到其它数据库。 导入其它ORACLE数据库,最快的方法就是使用ORACLE 自带的sqlldr 工具。
Sqlldr 使用的控制文件,可以在第一部分中control、mode和table 参数指定后,生成控制文件,可以修改这个文件以适合实际使用。
如果我们先把数据导成文本文件,再使用sqlldr 导入到数据库,由于涉及到磁盘的写入读取,可能在大数据量时影响速度。因此可以将sqluldr2 的输出到标准输出设备(屏幕),而sqlldr从标准输出设备上读取入库。
可以将sqluldr2的file 参数设置为”-“, sqluldr2将输出到标准输出设备,修改sqlldr 中的控制文件的INFILE 参数为"-" (对于windows 和unix 参数),使用管道模式,进行数据导出装载。
此外,由于源(sqluldr2导出的苦)和目标数据库(sqlldr 导入库)的字符集不一样(这也是我们之所以采用文本导出方式的原因), 我们可以在NLS_LANG 环境变量和目标数据库字符集一致的情况下, 设置sqluldr2的charset 参数与源数据库字符集一致,避免来回修改NLS_LANG 环境变量。
举例:
在sqlldr 中的控制文件 指定INFILE 参数:
LOAD DATA
INFILE "-"
源数据库字符集为US7ASCII ,目标数据库字符集ZHS16GBK, 当前NLS_LANG 为AMERICAN_AMERICA.ZHS16GBK
sqluldr2 user=system/manager@dbserver1 query="select /*+ parallel(8) */ * from orders where rownum <10" charset=US7ASCII file=- | sqlldr guoge/guoge@dbserver 2control=D:\order.ctl
注意,的INFILE 参数为"-" 对于XE 下的sqlldr 仿佛无效。
三、MYSQL 数据库的导入
ORACLE 数据也可以导入到MYSQL 数据库,sqluldr2的参数format指定为mysql, 输出的则为MYSQL语句,可以直接执行。例如:
sqluldr2 comm/comm@dbserver table=app_roles format=mysql quote=0x27 escape=0x53 null=null query=" select * from app_roles" file=- | mysql -h 21.103.117.51 -uroot -pqwxtpwd test
四、导出后压缩
sqluldr2 其实可以在导出是就进行压缩,文档上说“当文件名(“FILE”选项)的后缀以小写的“.gz”结尾时,会将记录直接写入到GZIP格式的压缩文件中”,但仿佛对WINDOWS无效。其实我们可以结合组合命令。例如:
sqluldr2 parfile=./sqluldr2.par && winrar a -afrar -ibck -m5 -df -ep -r orders.rar d:\data