首页 > 技术文章 > Oracle SQL Loader

wwjd365 2018-07-19 16:19 原文

 1 C:/Documents and Settings/WWJD>sqlldr 
 2 SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 7月 2 18:54:06 2010
 3 Copyright (c) 1982, 2005, Oracle.  All rights reserved. 
 4 用法: SQLLDR keyword=value [,keyword=value,...] 
 5 有效的关键字: 
 6     userid              -- ORACLE 用户名/口令 
 7    control              -- 控制文件名 
 8        log              -- 日志文件名 
 9        bad              -- 错误文件名 
10       data              -- 数据文件名 
11    discard              -- 废弃文件名 
12 discardmax              -- 允许废弃的文件的数目    (全部默认) 
13       skip              -- 要跳过的逻辑记录的数目  (默认 0) 
14       load              -- 要加载的逻辑记录的数目  (全部默认) 
15     errors              -- 允许的错误的数目        (默认 50) 
16       rows              -- 常规路径绑定数组中或直接路径保存数据间的行数 (默认: 常规路径 64, 所有直接路径) 
17   bindsize              -- 常规路径绑定数组的大小 (以字节计)  (默认 256000) 
18     silent              -- 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区) 
19     direct              -- 使用直接路径                     (默认 FALSE) 
20    parfile              -- 参数文件: 包含参数说明的文件的名称 
21   parallel              -- 执行并行加载                    (默认 FALSE) 
22       file              -- 要从以下对象中分配区的文件 
23 skip_unusable_indexes   -- 不允许/允许使用无用的索引或索引分区  (默认 FALSE) 
24 skip_index_maintenance  -- 没有维护索引, 将受到影响的索引标记为无用  (默认 FALSE) 
25 commit_discontinued     -- 提交加载中断时已加载的行  (默认 FALSE) 
26   readsize              -- 读取缓冲区的大小 (默认 1048576) 
27 external_table          -- 使用外部表进行加载; NOT_USED, GENERATE_ONLY, EXECUTE  (默认 NOT_USED) 
28 columnarrayrows         -- 直接路径列数组的行数  (默认 5000) 
29 streamsize              -- 直接路径流缓冲区的大小 (以字节计)  (默认 256000) 
30 multithreading          -- 在直接路径中使用多线程 
31 resumable               -- 启用或禁用当前的可恢复会话  (默认 FALSE) 
32 resumable_name          -- 有助于标识可恢复语句的文本字符串 
33 resumable_timeout       -- RESUMABLE 的等待时间 (以秒计)  (默认 7200) 
34 date_cache              -- 日期转换高速缓存的大小 (以条目计)  (默认 1000) 

 

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

前者的例子是 'sqlload scott/tiger foo';

后者个示例是 'sqlldr control=foo userid=scott/tiger'.

位置指定参数的时间必须早于但不可迟于由关键字指定的参数。例如

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

不允许 'sqlldr scott/tiger control=foo log', 即使参数 'log' 的位置正确。

12.1.0.2.0 sqlldr

关于sqlloader的使用
1 -- This is a sample control file
2 LOAD DATA
3 INFILE 'sample.dat'
4 BADFILE 'sample.bad'
5 DISCARDFILE 'sample.dsc'
6 APPEND
7 INTO TABLE emp
8 WHEN (57) = '.'
9 TRAILING NULLCOLS
10 (hiredate SYSDATE,
deptno POSITION(1:2) INTEGER EXTERNAL(2)
NULLIF deptno=BLANKS,
job POSITION(7:14) CHAR TERMINATED BY WHITESPACE
NULLIF job=BLANKS "UPPER(:job)",
mgr POSITION(28:31) INTEGER EXTERNAL
TERMINATED BY WHITESPACE, NULLIF mgr=BLANKS,
ename POSITION(34:41) CHAR
TERMINATED BY WHITESPACE "UPPER(:ename)",
empno POSITION(45) INTEGER EXTERNAL
TERMINATED BY WHITESPACE,
sal POSITION(51) CHAR TERMINATED BY WHITESPACE
"TO_NUMBER(:sal,'$99,999.99')",
comm INTEGER EXTERNAL ENCLOSED BY '(' AND '%'
":comm * 100"
)
上面是一个控制文件的例子
LOAD DATA 表示新数据的load从此开始
INFILE 指明了数据文件的位置
BADFILE 指明了那些不满足的记录存放的文件名
DISCARDFILE 指明了discarded记录存放的文件位置( DISCARDS 或 DISCARDMAX 关键字可以指明在一个data file中最多可被discard的记录数量)
APPEND 指明此次load data可以是追加到非空表中,此处还可以是INSERT(向空表load)或REPACE或TRUNCATE(删除旧表中数据,插入新数据)
INTO TABLE tab_name 指明具体装载的表对象
WHEN 字段指明了sqlloader装载数据的条件,此例子中,指明第57个字节上是”.”时才会装载,否则不会。When后面也可跟字段名,例如:WHEN (deptno = '10') AND (job = 'SALES')
TRAILING NULLCOLS 子句告知sqlloader对待没有值的相关字段上,用null值替代。如果data file都是以相同的分隔符分割的,可以使用 FIELDS 关键字指明默认的分隔符:
TERMINATED BY 指明了字段的分隔符,其后面可以是WHITESPACE、X’hexstr’、’string’、EOF。还可以指定ENCLOSURED BY ‘(’ AND ‘)’表明字段是被‘()‘包裹的内容。最后一部分是导入数据的字段特征:
SYSDATE 表明将字段设置为当前时间值。
POSITION 指明了导入数据为数据文件中相应字段的某个位置的字符(串)
INTEGER EXTERNAL 指明了导入字段的数据类型为number,还有的常用类型有INTEGER(表二进制数)、CHAR(n)、VARCHAR(n)、DATE、TIME等。最后的””中引用的部分表示在装载数据时对data file中data做的相应的加工处理。

推荐阅读