Oracle SQL Loader

时间:2023-03-08 22:09:47
Oracle SQL Loader
 C:/Documents and Settings/WWJD>sqlldr
SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 7月 2 18:54:06 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
用法: SQLLDR keyword=value [,keyword=value,...]
有效的关键字:
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)

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做的相应的加工处理。