将txt文档导入Oracle数据库的方法有多种,可以通过PL/SQL developer里的text importer工具,但是如果txt文档中的数据量较大,使用text importer会非常慢,感觉像卡住一样;也可以select for update,直接复制黏贴,但同样数据量大会很卡。
今天尝试使用sqlldr工具进行导入,文本内容大概如下:
2017-05-31 11:46 553200 img_1700x2200_00409074.tif
2017-05-31 11:46 220044 img_1700x2200_00409075.tif
2017-05-31 11:46 374104 img_1700x2200_00409076.tif
2017-05-31 11:46 528762 img_1700x2200_00409077.tif
2017-05-31 11:46 372416 img_1700x2200_00409121.tif
2017-05-31 11:46 150092 img_1700x2200_00409122.tif
2017-05-31 11:46 247410 img_1700x2200_00409123.tif
2017-05-31 11:46 420134 img_1700x2200_00409124.tif
2017-05-31 11:46 577906 img_1700x2200_00409125.tif
2017-05-31 11:46 479568 img_1700x2200_00409159.tif
共4列,以空格分隔,但是空格数量不固定。
1、创建表
create table T1
(
RQ VARCHAR2(20),
SJ VARCHAR2(20),
FJSIZE VARCHAR2(20),
FJURL VARCHAR2(200)
);
2、创建ctl文件
load data
infile 'F:\PC\img_1700.txt'
append
into table t1
fields terminated by whitespace
trailing nullcols
(rq,sj,fjsize,fjurl)
infile 'F:\PC\img_1700.txt':即将导入的txt文件及路径
into table t1:第一步创建的表
fields terminated by whitespace:以空格分隔,不计空格数量
fields terminated by ‘ ’:固定以一个空格分隔
trailing nullcols:代表字段没有值时,允许为空
************* 以下是4种装入表的方式
APPEND // 原先的表有数据 就加在后面
INSERT // 装载空表 如果原先的表有数据 sqlloader会停止 默认值
REPLACE // 原先的表有数据 原先的数据会全部删除
TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据
*************
3、导入数据
sqlldr test/test@local11g control=F:\PC\import.ctl log=F:\PC\import.log rows=10000
import.ctl为第二步创建的控制文件
导入100万行数据大概用了1~2分钟左右
sqlldr加速:
1、Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中,可以提高导入数据的性能。当然,在很多情况下,不能使用此参数(如果主键重复的话会使索引的状态变成UNUSABLE!;或者导入时含有序列)。
2、添加参数
readsize=20971520 bindsize=20971520
sqlldr test/test@local11g control=F:\PC\import.ctl log=F:\PC\import.log rows=10000 readsize=20971520 bindsize=20971520