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 /orcle@10.1.1.11:1521/orcl control=test.ctl data=test.dat log=test.log bad=test.bad;
7. sqlldr 用到的主要参数
1) userid -- ORACLE username/password
2) control – 控制文件
3) log – 记录的日志文件
4) bad – 坏数据文件,记录错误的未加载数据
5) data – 数据文件 ,* data 参数只能指定一个数据文件 , 如果控制文件也通过 infile 指定了数据文件 , 并且指定多个 , sqlldr 在执行时 , 先加载 data 参数指定的数据文件 , 控制文件中第一个 infile 指定的数据文件被忽略 , 但后续的 infile 指定的数据文件继续有效
6) discard – 丢弃的数据文件
7) discardmax – 允许丢弃数据的最大值 ( 默认全部 )
8) skip -- 跳过记录数 , 从数据文件中 , 从第一行开始要计算要跳过的行数 ( 默认 0)
9) load -- Number of logical records to load ( 默认全部 )
10) errors – 允许的错误记录数 , 超过则终止任务 ( 默认 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 – 使用直通路径方式导入 ( 默认 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)