用SQL管理数据库--SQL*Loader
时间:2010-12-20 来源:x-i-x
文件
Ø Log -- 必需,保存loader会话信息,错误信息,如果生成失败将报错。
Ø Control -- 必需,包含文件路径,解析,表名,数据等。
Ø Data -- 可选,数据可以放在control文件里
Ø Bad -- 没有通过loader或者数据库验证的记录,存在的情况创建,文件名:controlfile.bad
Ø Discard -- 被过滤掉的数据,存在的情况下创建
用法
Ø sqlldr 显示所有参数
Ø sqlldr system/password regions.ctl
Ø sqlldr control=regions.ctl userid=system/password
Ø sqlldr system/password control=regions.ctl
control file
Ø part1. 会话信息:日志,大小,路径
Ø part2. 表列信息
Ø part3. [可选] 数据
Ø 注释://some hint
Ø 关键词:开始:LOAD DATA / CONTINUE LOAD DATA, 包含:INTO TABLE参数
Ø rows:每次提交的记录数
Ø bindsize:每次提交记录的缓冲区
Ø readsize:与bindsize成对使用,其中较小者会自动调整到较大者
sqlldr先计算单条记录长度,乘以rows,如小于bindsize,不会试图扩张rows以填充bindsize;如超出,则以bindsize为准。
用例
1.
Ø cmd: sqlldr hr/hr control=regions.ctl
Ø control file regions.ctl :
LOAD DATA
-- Control file begins with LOAD DATA
INFILE *
-- The * tells SQL*Loader the data is inline
INTO TABLE regions TRUNCATE
-- truncate the target table before loading
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
-- how to parse the data
(region_id, region_name)
-- positional mapping of data file fields to table columns
-- lines following BEGINDATA are loaded
-- no comments are allowed after BEGINDATA
BEGINDATA
1,"Europe"
2,"Americas"
3,"Asia"
4,"Middle East and Africa"
Ø 参数
truncate :load之前truncate table
insert: load 开始之前表必须为空
append: 在表中追加数据
delete: load之前删除 可以rollback
2
Ø cmd : sqlldr hr/hr control=regions.ctl
Ø control file :
LOAD DATA
INFILE '/apps/seed_data/regions.dat'
BADFILE '/apps/seed_data/regions.bad'
DISCARDFILE '/apps/seed_data/regions.dsc'
OPTIONS (DIRECT=TRUE)
-- data file spec
INTO TABLE regions APPEND
-- add this data to the existing target table
(region_id POSITION(1) INTEGER EXTERNAL
,region_name POSITION(3:25) NULLIF region_name = BLANKS //空格时填 null
) -- how to parse the data
u 参考文档:Oracle manual Oracle Database Utilities 10g.
DirectPath
u 优点:快速,multiblock I/O,
u 缺点:常写于the highwater mark之上,数据占用的blocks数偏大
u 规则:
1. 索引将在导入完成之后rebuild,如果违反约束,状态置为unusable
2. 等待活动事务结束
3. 导入期间触发器无效
4. 不支持导入到cluster table
5. 外键约束在导入开始的时候失效,在导入完成的时候恢复
cluster table
Cluster是存储一组table的一种方法,这些table共享同一数据块中的某些相同column,并把不同table在这一共享column上值相同的data row存储到同一block上.