1.
SQL*LOADER
是
ORACLE
的数据加载工具,通常用来将操作系统文件迁移到
ORACLE
数据库中。
2.
在
NT
下,
SQL*LOADER
的命令为
SQLLDR
,在
UNIX
下一般为
sqlldr/sqlload
(在
/oracle/product/10.2.0/bin
目录下可以看到存在
sqlldr
)
。
3.
用法
: sqlldr
关键字
=
值
[,keyword=value,...]
4.
当加载大量数据时,可以抑制日志的产生:
a)
ALTER TABLE RESULTXT nologging;
5.
控制文件
.ctl
load data
--1
、控制文件标识
infile 'test.txt'
--2
、要输入的数据文件名为
test.txt
append into table test
--3
、向表
test
中追加记录
fields terminated by '|+|' TRAILING NULLCOLS
--4
、字段终止于空行
(TP_CUSTOMER_ID ,
ECIF_NO ,
TP_SYSTEM_SOURCE_CD)
-----
定义列对应顺序
其中
append
为数据装载方式,还有其他选项:
a
、
insert
,为缺省方式,在数据装载开始时要求表为空
b
、
append
,在表中追加新记录
c
、
replace
,删除旧记录(全部的记录),替换成新装载的记录
d
、
truncate
,同上
先删除再新增
6.
范例:
a)
Unix + Oracle
环境。
b)
在某目录下准备好
test.ctl
和
test.dat
文件。
c)
运行命令
: sqlldr userid=orcl /[email protected]:1521/orcl control=test.ctl data=test.dat log=test.log bad=test.bad;
7.
sqlldr
用到的主要参数
1)
userid -- ORACLE username/password
2)
control �C
控制文件
3)
log �C
记录的日志文件
4)
bad �C
坏数据文件,记录错误的未加载数据
5)
data �C
数据文件
,* data
参数只能指定一个数据文件
,
如果控制文件也通过
infile
指定了数据文件
,
并且指定多个
,
则
sqlldr
在执行时
,
先加载
data
参数指定的数据文件
,
控制文件中第一个
infile
指定的数据文件被忽略
,
但后续的
infile
指定的数据文件继续有效
6)
discard �C
丢弃的数据文件
7)
discardmax �C
允许丢弃数据的最大值
(
默认全部
)
8)
skip --
跳过记录数
,
从数据文件中
,
从第一行开始要计算要跳过的行数
(
默认
0)
9)
load -- Number of logical records to load (
默认全部
)
10)
errors �C
允许的错误记录数
,
超过则终止任务
(
默认
50)
11)
rows -- Number of rows in conventional path bind array or between direct path data saves
(每次提交的记录数,默认
:
常规路径
64,
直接路径
全部,所以使用直接路径的话,效率会比普通的好太多太多)
12)
bindsize -- Size of conventional path bind array in bytes
(
每次提交记录的缓冲区的大小,字节为单位,默认
256000)
13)
silent --
禁止输出信息
(header,feedback,errors,discards,partitions)
14)
direct �C
使用直通路径方式导入
(
默认
FALSE)
如果表中有索引的话,是不能指定
direct=TRUE
的
,除非使用
skip_index_maintenance=TRUE
,这个就是在导入的时候忽略索引,所以在数据导入完毕以后,查看索引的状态应该都是无效的,需要重建之
,
如下
SQL
:
select * from dba_indexes where table_name='?' ;
alter idnex index_name rebuild ;
重新建立索引要比新建索引快。
15)
parallel --
并行导入
(
默认
FALSE
,注意:
parallel
并不是让一个
sqlldr
语句起多个进程来加载数据
,
而是不锁住加载表
,
允许别的直接路径加载
.
所以要使
parallel
起作用
,
应该先将要加载的数据文件分成多个
,
用多个
sqlldr
语句同时加载
,
如下例
:
sqlldr userid=scott/tiger control=load1.ctl data=data1.txt direct=y parallel=true & sqlldr userid=scott/tiger control=load2.ctl data=data2.txt direct=y parallel=true & sqlldr userid=scott/tiger control=load3.ctl data=data3.txt direct=y parallel=true &)
16)
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(
默认
FALSE)
17)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable(
默认
FALSE)