最近配合本部门的一位工程师做投诉的数据割接,主要就是将旧系统中的数据导入到新系统中,这里用了一个工具sqlldr。这是一个比较好的快捷的工具,很适合批量导入数据。
本人也参考了网络上的一些文章,现将总结的用法归结如下:
一、导入命令:
1
、进入伪dos,然后再进入导入文件根目录如:D:\work.键入下面命令
sqlldr cti080916_2/1 control=plaint_doc.CTL errors=500 rows=10000
2
、解释上面的命令:sqlldr 用户名/密码 control=导入文件 errors=允许的错误数 rows=每次提交行数
3
、errors设置出错最大数,默认51,如果导入文件时发现有51错误,那导入就终止。所以最好将数字设的大些。
4、rows设置提交行数,最好设置一个适当的值,加快导入速度。
5
、导入完文件后,在同文件根目录下生成plaint_doc.log日志,记录导入信息。如果导入文件中某行数据有错,还会生成plaint_doc.bad文件,记录错误数据用于错误分析。
二、事例说明
1
、plaint_doc.CTL 导入格式
LOAD DATA INFILE 'plaint_doc.txt' "str X'7C0D0A'"
INTO TABLE T_PLAINT_SHEET
APPEND
FIELDS TERMINATED BY '|+|'
TRAILING NULLCOLS
(r sequence(max,1),
sheet_id,
sheet_type,
sheet_class,
cust_type,
visit_type,
ans_type,
ans_type_info,
call_num,
busi_num,
busi_num_type,
cust_name,
apply_cust,
link_cust,
link_phone1,
link_phone2,
accept_info char(1000),
accept_type,
bb FILLER,
opt_date DATE 'YYYY-MM-DD HH24:MI:SS',
reply_date DATE 'YYYY-MM-DD HH24:MI:SS',
opt_user,
opt_group,
second_accept,
last_sheet_id,
hard_accept,
callback_flag,
status CONSTANT 2,
status_old,
CALL_CODE CONSTANT 0,
accept_level CONSTANT 1,
quest_accept CONSTANT 1,
opt_dept CONSTANT 'AA'
)
2
、对上面标蓝色的解释
"str X'7C0D0A'"
―
处理文字中回车换行。
|+|
--
分害符,用于分割每个字段间对应的值。
TRAILING NULLCOLS
―null
处理,有的字段没有对应的值,以null值代替。
r sequence(max,1)
―
这个字段取sequence的值,从已有最大值向入累加附值。
char(1000)
―
对应的导入值超过1000个字符,就截取1000。
bb FILLER
―
表示这个字段对应的值不被导入表,所以用filler过滤。
DATE 'YYYY-MM-DD HH24:MI:SS'
―
表示这个字段对应日期型数据,并进行格式化。
CONSTANT 2
―
表示给字段附常值。
3
、plaint_doc.txt文件:
20080401002148|+|A00001|+|C00001|+|B00001|+|D00001|+|E00001|+|13801207063|+|81495200|+|89496966|+|G00001|+|\ |+|\ |+|
张先生 先生|+|13801207099|+|\ |+|ssssssssssssssssssssss。|+|000101|+|F00010|+|2008-04-01 16:46:37|+|2008-04-01 16:46:37|+|5178|+|GP0057|+|0|+|\ |+|0|+|0|+|900|+|257|+|
三、如图
四、导入数据时,最好去除索引
1、T_PLAINT_SHEET
有8个索引(包括主键索引),向该表导入47万条数据
测试结果:
去除索引前需时30分钟。
去除索引后需导入时间1分2秒钟。