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

Sqlldr把文本文件导入到ORACLE中

小徐的技术之路 2018-11-12
455

1 查看命令参数


2 查看需要导入的文本内容


2.1 查看文本的行数


2.2 查看文本的大小


2.3 查看文本的内容


3  编写导数据的CTL文件


3.1 查看CTL文件


3.2 查看SHELL脚本


4 查看执行的效率


4.1  查看导入到ORACLE数据的效率


4.2  查看统计的日志


5 效率总结


1 查看命令参数

$ sqlldr --help 


有效的关键字:

    userid -- ORACLE 用户名/口令       

   control -- 控制文件名               

       log -- 日志文件名                   

       bad -- 错误文件名                  

      data -- 数据文件名                 

   discard -- 废弃文件名

discardmax -- 允许废弃的文件的数目         (全部默认)

      skip -- 要跳过的逻辑记录的数目  (默认 0)

      load -- 要加载的逻辑记录的数目  (全部默认)

    errors -- 允许的错误的数目         (默认 50)

      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, GENERATE_ONLY, EXECUTE  (默认 NOT_USED)

columnarrayrows -- 直接路径列数组的行数  (默认 5000)

streamsize -- 直接路径流缓冲区的大小 (以字节计)  (默认 256000)

multithreading -- 在直接路径中使用多线程

 resumable -- 启用或禁用当前的可恢复会话  (默认 FALSE)

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

resumable_timeout -- RESUMABLE 的等待时间 (以秒计)  (默认 7200)

date_cache -- 日期转换高速缓存的大小 (以条目计)  (默认 1000)

no_index_errors -- 出现任何索引错误时中止加载  (默认 FALSE)

 

PLEASE NOTE: 命令行参数可以由位置或关键字指定

。前者的例子是 'sqlldr

scott/tiger foo'; 后一种情况的一个示例是 'sqlldr control=foo

userid=scott/tiger'。位置指定参数的时间必须早于

但不可迟于由关键字指定的参数。例如,

允许'sqlldr scott/tiger control=foo logfile=log', 但是

不允许'sqlldr scott/tiger control=foo log', 即使

参数'log' 的位置正确


2 查看需要导入的文本内容

2.1 查看文本的行数

$ wc -l test-sqlldr.csv 

9415010  test-sqlldr.csv


2.2 查看文本的大小

$ du -sh test-sqlldr.csv 

2.8G test-sqlldr.csv


2.3 查看文本的内容

$ head -n 2 test-sqlldr.csv 

K1|!?|K2|!?|GSMC|!?|JGLX|!?|KGS|!?|RZS|!?|ISJW|!?|SYR|!?|SYRLX|!?|CGZB|!?|TZLX|!?|KGLJS|!?|RZLX|!?|BSM

|!?||!?|北京罗马科技有限公司|!?|有限责任公司(台港澳法人独资)|!?|1|!?|3|!?|是|!?|马闯|!?|高级管理人员|!?||!?||!?||!?|总经理,执行董事,法定代表人/负责人/执行事务合伙人|!?|V1!ihMJSIrj/CeN5d2an64ys/iGqJnBLgEGHM9HVY1Xt91K5Pia73LMxGYHJewNqFBff6slsPFRHkRt<n>x0pV/J58JQ==


3  编写导数据的CTL文件

3.1 查看CTL文件

$ cat load-to-oracle.ctl 

load data

CHARACTERSET UTF8

infile "/dazhihui/databack/b.csv"

append

into table xiaoxu.test_sqlldr

fields terminated by '|!?|'

trailing nullcols

(

K1,

K2,

GSMC,

JGLX,

KGS,

RZS,

ISJW,

SYR,

SYRLX,

CGZB,

TZLX,

KGLJS,

RZLX,

BSM

)


 


infile 后面是文件的路径


xiaoxu.test_sqlldr  需要的导入的表明


fields terminated by  后面跟着分隔符


trailing nullcols  字段的列表,需要全部大写与ORACLE保持一致,如果oracle字段小写需要改成小写


append  是追加的形式,也可以是insert (为缺省方式,在数据装载开始时要求表为空),append(在表中追加新记录) ,


replace (删除旧记录(用 delete from table 语句),替换成新装载的记录),truncate(删除旧记录(用 truncate table 语句),替换成新装载的记录)


3.2 查看SHELL脚本

$ cat import-data.sh 

#!bin/bash



sqlldr username/password@IP:1521/etlpdb  control=load.ctl log=test-log.log bad=bad.log errors=5000 rows=1000 bindsize=10485760


4 查看执行的效率

4.1  查看导入到ORACLE数据的效率

$ sh  import-data.sh 


************

Commit point reached - logical record count 9414355

Commit point reached - logical record count 9415010


Table XIAOXU.TEST_SQLLDR:

9415010 Rows successfully loaded.


Check the log file:

test-log.log

for more information about the load.


real 10m15.357s

user 1m27.074s

sys 0m2.278s


 


在以上可以看出导入进9415010行数据,用时 10m15.357s


4.2  查看统计的日志

$ cat test-log.log


SQL*Loader: Release 12.2.0.1.0 - Production on Fri Nov 9 17:46:51 2018


Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.


Control File: load.ctl

Character Set UTF8 specified for all input.


Data File: /dazhihui/databack/b.csv

Bad File: bad.log

Discard File: none specified


(Allow all discards)


Number to load: ALL

Number to skip: 0

Errors allowed: 5000

Bind array: 1000 rows, maximum of 10485760 bytes

Continuation: none specified

Path used: Conventional


Table XIAOXU.TEST_SQLLDR, loaded from every logical record.

Insert option in effect for this table: APPEND

TRAILING NULLCOLS option in effect


Column Name Position Len Term Encl Datatype

------------------------------ ---------- ----- ---- ---- ---------------------

K1 FIRST * CHARACTER 

Terminator string : '|!?|'

K2 NEXT * CHARACTER 

Terminator string : '|!?|'

GSMC NEXT * CHARACTER 

Terminator string : '|!?|'

JGLX NEXT * CHARACTER 

Terminator string : '|!?|'

KGS NEXT * CHARACTER 

Terminator string : '|!?|'

RZS NEXT * CHARACTER 

Terminator string : '|!?|'

ISJW NEXT * CHARACTER 

Terminator string : '|!?|'

SYR NEXT * CHARACTER 

Terminator string : '|!?|'

SYRLX NEXT * CHARACTER 

Terminator string : '|!?|'

CGZB NEXT * CHARACTER 

Terminator string : '|!?|'

TZLX NEXT * CHARACTER 

Terminator string : '|!?|'

KGLJS NEXT * CHARACTER 

Terminator string : '|!?|'

RZLX NEXT * CHARACTER 

Terminator string : '|!?|'

BSM NEXT * CHARACTER 

Terminator string : '|!?|'



Table XIAOXU.TEST_SQLLDR:

9415010 Rows successfully loaded.

0 Rows not loaded due to data errors.

0 Rows not loaded because all WHEN clauses were failed.

0 Rows not loaded because all fields were null.



Space allocated for bind array: 3612000 bytes(1000 rows)

Read buffer bytes:10485760


Total logical records skipped: 0

Total logical records read: 9415010

Total logical records rejected: 0

Total logical records discarded: 0


Run began on Fri Nov 09 17:46:51 2018

Run ended on Fri Nov 09 17:57:06 2018


Elapsed time was: 00:10:15.28

CPU time was: 00:01:29.33


5 效率总结

在以上的结果中可以看出效率并不是很高,按以上计算9415010/615 = 15308 / S


 


如果把参数rows修改为10000  bindsize修改为804857600 ,用时是:00:08:37.85  ,


平均 9415010/517 = 18210 / S 看来改变参数有所改善效率 ,消息结果如下:


Space allocated for bind array: 36120000 bytes(10000 rows)

Read buffer bytes:804857600


Total logical records skipped: 0

Total logical records read: 9415010

Total logical records rejected: 0

Total logical records discarded: 0


Run began on Fri Nov 09 18:44:04 2018

Run ended on Fri Nov 09 18:52:42 2018


Elapsed time was: 00:08:37.85

CPU time was: 00:01:35.31

文章转载自小徐的技术之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论