暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

安装、配置SQLUDLR2及千万级数据导出、导入操作手册

原创 Oracle6 2023-01-06
8755

SQLUDLR2 :A High Performance Text Unload Utility For Oracle Database

下载SQLULDR2(Windows /Linux-x64),解压缩,文件夹内容如下:

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

安装步骤

一、 Linux环境配置

1创建sqluldr2目录

在 /home/profit下创建sqluldr2目录

mkdir -m 775 sqluldr2

2文件拷贝到sqluldr2目录下:

把sqluldr2linux64.bin文件拷贝到sqluldr2目录下

给文件添加权限为775

chmod 775 sqluldr2linux64.bin

3创建sqlData目录

进入目录/home/profit/uploadFile下创建sqlData目录,用于存放sql脚本

mkdir -m 775 sqlData

https://img2018.cnblogs.com/blog/1468106/201907/1468106-20190705105110304-1020521542.png

导出成功后,会生成2个文件,log日志文件,执行sql脚本文件;

二、 Oracle client安装

1安装Oracle客户端软件目录:

cd /home/profit/soft/

oracle-instantclient-11.2.0.4.0-1.1.x86_64.rpm

oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm

oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

2使用rpm -ivh [包名] 进行安装:

如:rpm -ivh oracle-instantclient-11.2.0.4.0-1.1.x86_64.rpm

安装的文件默认放在两个位置:

头文件:/usr/lib/oracle/11.2/client64/
下,如果在使用时报错找不到头文件,记得看路径是否是这个。

包文件:/usr/lib64/oracle/11.2.0.4.0/client/ 下,包含{bin、lib}两个文件夹;

3创建oracle-instantclient.conf文件,并添加内容:

vim  /etc/ld.so.conf.d/oracle-instantclient.conf

添加内容

/usr/lib64/oracle/11.2.0.4.0/client/lib/

4生效环境变量

source  .ldconfig

5创建软连接

cd  /usr/lib64/oracle/11.2.0.4.0/client/lib

执行

cd /usr/lib64/oracle/11.2.0.4.0/client/lib/

ln -s libclntsh.so.11.1  libclntsh.so

6 sqluldr2导出命令

./sqluldr2linux64.bin -help

https://img2018.cnblogs.com/blog/1468106/201907/1468106-20190705105209428-1243784870.png

(1).使用sql参数

./sqluldr2linux64.bin user=‘账号/密码’@IP:表空间 sql=1.sql head=yes
file=/home/profit/sqluldr2/tmp002.csv

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

./sqluldr2linux64.bin user=‘账号/密码’@IP:表空间 sql=1.sql head=yes
file=/home/profit/sqluldr2/tmp002.csv log=+/home/profit/sqluldr2/tmp003.log

(3).大数据量操作,对于大表可以输出到多个文件中,指定行数分割或者按照文件大小分割,例如:

./sqluldr2linux64.bin user=‘账号/密码’@IP:表空间 sql=1.sql head=yes
file=/home/profit/sqluldr2/tmp002_%B.csv log=+/home/profit/sqluldr2/tmp003.log
batch=yes rows=500000

https://img2018.cnblogs.com/blog/1468106/201907/1468106-20190705105239474-743454619.png

(4).带有table参数的导出

sqluldr264 user=zxx/zxx query=“select * from mv_xlsymx1 where ysyddm=‘00001H’”
table=mv_xlsymx1 head=yes file=h:\mx.csv

它会在当前目录下生成一个.ctl文件(mv_xlsymx1_sqlldr.ctl,默认生成在sqluldr文件下,我的就生成在h:\sqluldr\
mv_xlsymx1_sqlldr.ctl)

(5).指定.ctl文件生成的位置

sqluldr264 user=zxx/zxx query=“select * from mv_xlsymx1 where ysyddm=‘00001H’”
table=mv_xlsymx1 control=h:\mx.ctl head=yes file=h:\mx.csv

7 sqluldr2生产环境导出

./sqluldr2linux64.bin user=‘账号/密码’@IP:表空间 query=“select * from 表名
where sign_org = ‘207160’ and trans_month=‘201904’” head=yes
file=/home/profit/sqluldr2/tmp001.csv log=+/home/profit/sqluldr2/tmp001.log

8 sqluldr2测试环境导出

./sqluldr2linux64.bin user=‘账号/密码’@IP:表空间 query=“select * from 表名”
head=yes file=/home/profit/sqluldr2/tmp003.csv
log=+/home/profit/sqluldr2/tmp003.log

9 sqluldr2测试导出INSERT语句

./sqluldr2linux64.bin user=‘账号/密码’@IP:表空间 sql=D:\1.sql table=表名
format=SQL file=D:\tmp002_%B.sql log=+D:\tmp002.log batch=yes rows=1000
field=0x2c escape=0x5c null=null quote=0x27 record=0x2a safe=yes charset=UTF8

10 sqlldr 导入

导入之前,先熟悉一下.ctl文件参数

characterset :字符集, 一般使用字符集 AL32UTF8,如果出现中文字符集乱码时,改成
ZHS16GBK。

fields terminated by ‘string’:文本列分隔符。当为tab键时,改成’\t’,或者
X’09’;空格分隔符 whitespace,换行分隔符 ‘\n’ 或者 X’0A’;回车分隔符 ‘\r’ 或者
X’0D’;默认为’\t’。

optionally enclosed by ‘char’:字段包括符。当为 ’ ’
时,不把字段包括在任何引号符号中;当为 “’”
时,字段包括在单引号中;当为’"'时,字段在包括双引号中;默认不使用引用符。

fields escaped by ‘char’:转义字符,默认为’\’。

trailing nullcols:表字段没有对应的值时,允许为空。

append into table "T_USERS " – 操作类型

– 1) insert into --为缺省方式,在数据装载开始时要求表为空

– 2) append into --在表中追加新记录

– 3) replace into --删除旧记录(相当于delete from table
语句),替换成新装载的记录

– 4) truncate into --删除旧记录(相当于 truncate table
语句),替换成新装载的记录skip=1
:表示插入数据时,跳过第一行(标题),从第二行开始导入;

3、sqluldr 导入处理

3.1、基本的导入语句

sqlldr userid=hxj/hxj control=h:\sqluldr\mv_xlsymx1_sqlldr.ctl data=h:\mx.csv
rows=1000

3.2、带有日志log参数

sqlldr userid=hxj/hxj control=h:\sqluldr\mv_xlsymx1_sqlldr.ctl data=h:\mx.csv
log=h:\log\mx.log rows=1000

注意:这里的log的路径不能写“+”;

4、虚拟列处理

sqluldr2导出数据的时候,如果该表中含有虚拟列,你导出的时候没有过滤掉虚拟列,比如:select
* from 带有虚拟列的表,那么你要对这些虚拟列进行处理,否则导入的时候会报错。

我发现了三种处理方法:

4.1、在虚拟列后面加上filler,将这一列过滤掉。

4.2、将.ctl文件中的虚拟列删除掉就可以了

4.3、在导出的时候,不导出虚拟列

5、使用并行处理

5.1 未使用并行处理

sqlldr userid=hxj/hxj control=h:\ctl\qsddlqymx1_cyqs.ctl
data=h:\qsddlqymx1_cyqs.dmp log=h:\log\qsddlqymx1_cyqs.log

5.2、使用并行处理数据

需要在导入语句中加入 direct=true parallel=true,如下所示:

sqlldr userid=hxj/hxj control=h:\ctl\qsddlqymx1_cyqs.ctl
data=h:\qsddlqymx1_cyqs.dmp log=h:\log\qsddlqymx1_cyqs.log direct=true
parallel=true

(1):首先.ctl文件必须是append into table 表名;

(2):需要导入的表不能有索引。

附录:

导出SQL数据示例:编辑SQL文件

vi sql.file

SELECT A.*  FROM TEST.T_TEST_TA A

LEFT JOIN TEST.T_TEST_TF F

ON F.KN = A.ID

AND F.S_DT BETWEEN ‘20180501’ AND ‘20180531’

WHERE A.T_DT BETWEEN ‘20180501’ AND ‘20180531’

AND D.RY = ‘01’;

—执行命令
–生产N个40M 的文件
sqluldr2 user=test/123456 sql=sql.file field=0x2c record=0x0d0x0a size=40M
text=CSV safe=Yes file=./data/csv201805_%b.csv fast=yes log=csv.log
charset=ZHS16GBK

—生成一个文件
sqluldr2 user=test/123456 sql=sql.file field=0x2c record=0x0d0x0a text=CSV
safe=Yes file=./data/csv201805.csv fast=yes log=csv.log charset=ZHS16GBK

主要参数说明

user=用户名/密码@ip地址:1521/服务

query=”sql查询语句”

head=yes|no 是否导出表头

file=文件存放路径(该文件可以写很多后缀: .txt .csv .dmp
等等,我发现,导出.dmp文件速度快)

table=查询的表名 有这句话,sqluldr2会自动生成一个.ctl文件,导入的时候会用到;

Field:分隔符,指定字段分隔符,默认为逗号; 比如:field=#
在选择分隔符时,一定不能选择会在字段值中出现的字符组合,如常见的单词等,很多次导入时报错,回过头来找原因时,都发现是因为分隔符出现在字段值中了。

charset:字符集,执行导出时的字符集,一般有UTF8、GBK等;

record 分隔符 指定记录分隔符,默认为回车换行,Windows下的换行

quote 引号符 指定非数字字段前后的引号符

例如现在要改变默认的字段分隔符,用“#”来分隔记录,导出的命令如下所示:

sqluldr2 test/test sql=tmp.sql field=#

在指定分隔符时,可以用字符的ASCII代码(0xXX,大写的XX为16进制的ASCII码值)来指定一个字符,常用的字符的ASCII代码如下:

回车=0x0d,换行=0x0a,TAB键=0x09,|=0x7c,&=0x26,双引号=0x22,单引号=0x27

在选择分隔符时,一定不能选择会在字段值中出现的字符

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论