sqluldr2使用几例

 

 

 

sqluldr2 是楼方鑫(d.b.c.a)编写的一个快速导出oracle 数据的工具。本文主要介绍如何使用这个工具实现工作中的几个需求。

 

一、导出文件分卷

对于压缩文件winrar, 一个比较深的功能就是压缩后的文件还是比较大时,不方便复制时,可以进行分卷压缩,制定每个压缩分卷文件的大小。同样,对于使用Toad 或者PL/SQL developer 工具导成文件文件时,由于缺乏这个功能,常常造成单个文件过大,生成时间过长。

sqluldr2 工具有一个rows参数,除了类似exp 工具的feedback 参数,每导出行数据,自动输出一行提示信息外,还可以结合batch 参数,如果batch 参数设为yes, 则每行数据生成一个导出文件。

此外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 使用的控制文件,可以在第一部分中controlmodetable 参数指定后,生成控制文件,可以修改这个文件以适合实际使用。

如果我们先把数据导成文本文件,再使用sqlldr 导入到数据库,由于涉及到磁盘的写入读取,可能在大数据量时影响速度。因此可以将sqluldr2 的输出到标准输出设备(屏幕),而sqlldr从标准输出设备上读取入库。

可以将sqluldr2file 参数设置为”-“, sqluldr2将输出到标准输出设备,修改sqlldr 中的控制文件的INFILE 参数为"-" (对于windows unix 参数),使用管道模式,进行数据导出装载。

此外,由于源(sqluldr2导出的苦)和目标数据库(sqlldr 导入库)的字符集不一样(这也是我们之所以采用文本导出方式的原因), 我们可以在NLS_LANG 环境变量和目标数据库字符集一致的情况下, 设置sqluldr2charset 参数与源数据库字符集一致,避免来回修改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

 

请使用浏览器的分享功能分享到微信等