SQLldr_乔羽简介

SQLldr_乔羽简介1.SQLLDR导入 1.1 简介 SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。 2.2 语法和参数语法:SQLLDRkeyword=value[,keyword=value,…];…

大家好,又见面了,我是你们的朋友全栈君。

1. SQLLDR导入

 

1.1 简介

 SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件(数据)迁移到ORACLE数据库中。SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。

 

2.2 语法和参数

语法: SQLLDR keyword=value [,keyword=value,…];

Sqlldr 参数一览

Keyword

默认值

描述

userid

 

ORACLE 用户名/口令      

control

 

控制文件名

log

 

日志文件名

bad

 

错误文件名

data

 

数据文件名

discard

 

废弃文件名

discardmax

全部

允许废弃的文件的数目

skip

0

要跳过的逻辑记录的数目

load

全部

要加载的逻辑记录的数目

errors

 

允许的错误的数目

rows

常规:64  默认路径:全部

常规路径绑定数组中或直接路径保存数据间的行数

bindsize

256000

常规路径绑定数组的大小

silent

 

运行过程中隐藏消息

direct

FALSE

使用直接路径

parfile

 

参数文件: 包含参数说明的文件的名称

parallel

FALSE

执行并行加载

file

 

执行文件

skip_unusable_indexes

FALSE

不允许/允许使用无用的索引或索引分区

skip_index_maintenance

FALSE

没有维护索引, 将受到影响的索引标记为无用

commit_discontinued

FALSE

提交加载中断时已加载的行

readsize

1048576

读取缓冲区的大小

external_table

NOT_USED

使用外部表进行加载;
 NOT_USED, GENERATE_ONLY, EXECUTE

columnarrayrows

5000

直接路径列数组的行数

streamsize

256000

直接路径流缓冲区的大小 (以字节计)

multithreading

 

在直接路径中使用多线程

resumable

FALSE

启用或禁用当前的可恢复会话

resumable_name

 

有助于标识可恢复语句的文本字符串

resumable_timeout

7200

RESUMABLE 的等待时间 (以秒计)

date_cache

1000

日期转换高速缓存的大小 (以条目计)

 

 

3 范例

利用PLSQL生成测试数据cux_sqlldr_test.txt

BEGIN

  FOR iIN1..100

    LOOP

      IFMOD(i,2)=1THEN

        dbms_output.put_line(‘”‘||i||'”,”column1_’||i||'”,’||'”column2_’||i||'”,’||'”column3_’||i||'”,’||'”show_column_’||i||'”,’||'”hide_column_’||i||'”,”2017-01-01″‘); 

      ELSE

        dbms_output.put_line(‘”‘||i||'”,”column1_’||i||'”, ,’||'”column3_’||i||'”,’||'”show_column_’||i||'”,’||'”hide_column_’||i||'”‘);         

      ENDIF;

    ENDLOOP;

END;

 

 

建表

CREATETABLE cux.cux_sqlldr_test

(line_num NUMBER,

 seq_num NUMBER,

 column1 VARCHAR2(30),

 column2 VARCHAR2(30)NOTNULL,

 column3 VARCHAR2(30)DEFAULT’column2′,

 show_column VARCHAR2(30),

 hide_column VARCHAR2(30),

 creation_date DATE

);

 

CREATEORREPLACE SYNONYM apps.cux_sqlldr_test FOR cux.cux_sqlldr_test;

CREATESEQUENCE cux.cux_sqlldr_test_sSTARTWITH10001;

CREATEORREPLACESYNONYM apps.cux_sqlldr_test_s FOR cux.cux_sqlldr_test_s;

Sqlldr 有两种使用方式

(1)     在控制文件中包涵数据.

创建一个文件命名为cux_sqlldr_test.ctl,在服务器下创建目录Sqlldr,在sqlldr下创建log和bad文件夹,

上传cux_sqlldr_test.ctl至服务器 ,如下图所示: 

 

SQLldr_乔羽简介

 

cux_sqlldr_test.ctl内容如下。

OPTIONS (skip=3,rows=128)

load data     

CHARACTERSET ZHS16GBK  

infile  *      

badfile  “/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.bad”

discardfile  “/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.disc” 

TRUNCATE into table cux_sqlldr_test 

WHEN column1 != “column1_1”

Fields terminated by “,”

Optionally enclosed by ‘”‘

TRAILING NULLCOLS 

(

line_num  RECNUM ,

seq_num  “cux_sqlldr_test_s.nextval” ,

column1 ,

column2 ,

column3 NULLIF (column3=”column3_4″),

show_column “UPPER(:show_column)” ,

hide_column  FILLER , 

creation_date  DATE  ‘YYYY-MM-DD’ “CASE WHEN :creation_date is null THEN TO_CHAR(sysdate,’YYYY-MM-DD’)  ELSE :creation_date END”

)

BEGINDATA

“1”,”column1_1″,”column2_1″,”column3_1″,”show_column_1″,”hide_column_1″,”2017-01-01″

“2”,”column1_2″, ,”column3_2″,”show_column_2″,”hide_column_2″

“3”,”column1_3″,”column2_3″,”column3_3″,”show_column_3″,”hide_column_3″,”2017-01-01″

“4”,”column1_4″, ,”column3_4″,”show_column_4″,”hide_column_4″

“5”,”column1_5″,”column2_5″,”column3_5″,”show_column_5″,”hide_column_5″,”2017-01-01″

“6”,”column1_6″, ,”column3_6″,”show_column_6″,”hide_column_6″

“7”,”column1_7″,”column2_7″,”column3_7″,”show_column_7″,”hide_column_7″,”2017-01-01″

“8”,”column1_8″, ,”column3_8″,”show_column_8″,”hide_column_8″

“9”,”column1_9″,”column2_9″,”column3_9″,”show_column_9″,”hide_column_9″,”2017-01-01″

“10”,”column1_10″, ,”column3_10″,”show_column_10″,”hide_column_10″

 

 

 

运行命令

sqlldr userid=apps/appsjiahuicontrol=/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.ctl  log=$CUX_TOP/sqlldr/file/cux_sqlldr_test.log

 SQLldr_乔羽简介

查看结果

SQLldr_乔羽简介

查看表

 SQLldr_乔羽简介

由上图可以看出,运行命令后,在file文件夹下生成了cux_sqlldr_test.log,在bad下生成了cux_sqlldr_test.bad,在表中生成了3条记录,下面分析一下cux_sqlldr_test.ctl的内容和结果

代码

说明

OPTIONS (skip=3,rows=128)

sqlldr 的内容可以写在cotrol文件
load_data的前面,此处跳过前3行,每次提交128行

load data     

加载数据

CHARACTERSET ZHS16GBK  

字符集编码(如果出现乱码要考虑一下)

infile  *      

加载的文件,* 表示本文件

badfile 

错误的数据所放的文件(校验错误)

discardfile

丢弃的数据放的路径(记录的格式错误或过滤行)

TRUNCATE into table cux_sqlldr_test 

先TRUNCATE  cux_sqlldr_test再将记录插入表

WHEN column1 != “column1_1”

过滤行,对于值为column1_1的行过滤

Fields terminated by “,”

多个字段间用“,”隔开

Optionally enclosed by ‘”‘

单个字段用“””,“””开始结束

TRAILING NULLCOLS 

对于值为空的字段允许为空

(line_num  RECNUM ,

序号,自动生成,并不取自数据

seq_num  “cux_sqlldr_test_s.nextval” ,

取每条记录的第一个字段,此处应
为1..10,但是这里赋值序列。

代码

说明

column1 ,

column1

column2 ,

column2,表定义为非空字段,虽然上面
允许为空,但是如果该值为空,不能插入表种

column3 NULLIF (column3=”column3_4″),

column3=”column3_4″时候默认为空

show_column “UPPER(:show_column)” ,

大写列(调用UPPER大写函数)

hide_column  FILLER , 

FILLER 隐藏列

creation_date  DATE  ‘YYYY-MM-DD’

“CASE WHEN :creation_date is null THEN

TO_CHAR(sysdate,’YYYY-MM-DD’) 

ELSE :creation_date END”

日期类型,格式为YYYY-MM-DD,为空的时候取系统日期

)

 

BEGINDATA

数据开始

*******

数据内容,默认每行一条记录

插入表的4种方式

insert,为缺省方式,在数据装载开始时要求表为空
append,在表中追加新记录
replace,(delete table) 删除旧记录,替换成新装载的记录
truncate,(truncate table)删除旧记录,替换成新装载的记录

10条数据由条件skip=3去除三条,因此上面命令运行结果是logic record count 7,查看 file文件夹下的log日记(log是不断叠加的,badfile是重新覆盖的)

 

SQLldr_乔羽简介

 

从日志可以看出7条数据中,4条记录无法没导入的原因。

查看cux_sqlldr_test.bad,其中记录4条错误的数据。

SQLldr_乔羽简介

(2)     在控制文件中不包涵数据.

 

上传cux_sqlldr_test.txt,cux_sqlldr_test.ctl至服务器,cux_sqlldr_test.txt由上面PLSQL脚本生成,cux_sqlldr_test.ctl如下

OPTIONS (skip=3,rows=128)

load data     

CHARACTERSET ZHS16GBK  

infile  “/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.txt”     

badfile  “/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.bad”

discardfile “/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/bad/cux_sqlldr_test.disc” 

TRUNCATE into table cux_sqlldr_test 

WHEN column1 != “column1_4”

Fields terminated by “,”

Optionally enclosed by ‘”‘

TRAILING NULLCOLS 

(

line_num  RECNUM ,

seq_num  “cux_sqlldr_test_s.nextval” ,

column1 ,

column2 “nvl(:column2,’***’)”,

column3 NULLIF (column3=”column3_4″),

show_column “UPPER(:show_column)” ,

hide_column  FILLER , 

creation_date  DATE  ‘YYYY-MM-DD’ “CASE WHEN :creation_date is null THEN TO_CHAR(sysdate,’YYYY-MM-DD’)  ELSE :creation_date END”

)

运行命令

sqlldr userid=apps/appsjiahuicontrol=/u02/ebsuat/app/fs2/EBSapps/appl/cux/12.0.0/sqlldr/file/cux_sqlldr_test.ctl  log=$CUX_TOP/sqlldr/file/cux_sqlldr_test.log

SQLldr_乔羽简介

 

100条数据由于skip = 3 从第4条开始处理变成97条,第四条数据由于WHEN column1 != “column1_4”

被丢弃在bad的cux_sqlldr_test.disc路径下,没有错误数据。查看表共96条数据,如下图所示:

 SQLldr_乔羽简介

 column2 “nvl(:column2,’***’)”, 对于 column2默认为 “***” .

 

 

其他

  此外,sqlload可以实现同时加载多个文件,同时把数据加载到多个表。

 参考网址:

http://www.cnblogs.com/jyzhao/p/4819884.html

http://m635674608.iteye.com/blog/1895316

http://blog.csdn.net/zq9017197/article/details/7352627

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125016.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sqlserver临时表详解_怎么把临时表的数据更新到正式表

    sqlserver临时表详解_怎么把临时表的数据更新到正式表[转自]http://zhengweisincere.blog.163.com/blog/static/498446492009625749522/在SQLServer的性能调优中,有一个不可比面的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择。记得在给一家国内首屈一指的海运公司作SQLServer应用性能评估和调优的时候就看到过

    2022年8月21日
    4
  • 以太坊钱包erc20_xvg币智能合约

    以太坊钱包erc20_xvg币智能合约以太坊被称为区块链2.0,就是因为以太坊在应用层提供了虚拟机,使得开发者可以基于它自定义逻辑,通常被称为智能合约,合约中的公共接口可以作为区块链中的普通交易执行。本文就智能合约发代币流程作一完整介绍(

    2022年8月4日
    4
  • android开发之应用Crash自动抓取Log_自动保存崩溃日志到本地

    教你如何抓取应用崩溃日志,保存到本地,或者增加一些友好提示,如果有需要还可以上传到服务器。

    2022年3月11日
    36
  • 硬件加密芯片介绍 及 加密芯片选择(加密IC) 加密芯片原理

    硬件加密芯片介绍 及 加密芯片选择(加密IC) 加密芯片原理前端时间有研究多款加密芯片,加密算法实现,以及激活成功教程可能,也有一些个人的观点,仅供参考;一,加密芯片的来源及工作流程:市面上的加密芯片,基本都是基于某款单片机,使用I2C或SPI等通讯,使用复杂加密算法加密来实现的,流程大致如下:主控芯片生成随机码–>主控芯片给加密芯片发送明文–>加密芯片通过加密算法对明文进行加密生成密文–>加密芯片返回密文给主控芯片–>主控芯片对密文进行解密生成解密值–>主控芯片对解密值与之前明文进行对比,比较.

    2022年6月25日
    55
  • 如何注册免费域名

    如何注册免费域名首先,你需要一个域名,如果你自己买的有域名,那么这里我再说就没太多意义了,这里要说的是用免费的域名,是的,你没有看错,免费的域名首先登陆https://my.freenom.com网站注册个用户,当然了也可以先不用注册,如果想跟着本教程走,则最好是先不要注册用户(有Google账户的小伙伴可以直接登陆了)然后就是想个你要注册的域名,搜一下(注:只有.tk、.cf、.ml、.ga、….

    2022年6月18日
    25
  • realsense深度图像保存方法

    realsense深度图像保存方法一般使用realsense时会保存视频序列,当保存深度图像时,需要注意保存的图像矩阵的格式,不然可能造成深度值的丢失。在众多图像库中,一般会使用opencv中的imwrite()函数进行深度图像的保存。一般深度图像中深度值的单位是mm,因此一般使用np.uint16作为最终数据格式保存。例子:importnumpyasnpimportcv2deffun1(…

    2022年4月25日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号