怎么快速的导入数据


linux主机,oracle数据库
怎么快速的导入数据。
数据量在200万条左右,文件是文本格式,每一行为一条记录,每条记录的字段以|号分格。
现在用C写的导入程序,处理这200万条数据大概需要6个小时,这完全不能满足需求。
请问有什么方法能够做到快速导入,最好能在1个小时内完成。

Linux oracle

狂気Dひとみ 10 years, 1 month ago

自己解决了。用sqlldr
先写一个insert.ctl文件


 load data
infile '20141010_1_3gpostuser_759.txt'
append into table BI_3G_POSTPAYUSER_T
fields terminated by '|' #字段分割符
(
row1,
row2 ,
……
)
注:因为我这个数据是追加,所以用append,如果纯插入空表,可以用insert。
除此外还有其他几种方式
REPLACE // 原先的表有数据 原先的数据会全部删除 
TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据。

再写个insert.sh,用来执行。因为我这要导三个文件,用了个循环。


 #!/bin/sh
#最好把环境变量也引入下
filelist=$(ls)
for file in $filelist
do
    sed -i "s/20.*_3gpostuser_7.*\.txt/${file}/g" /home/interface/insert.ctl
    sqlldr user/pass@sid  control=/home/interface/insert.ctl #控制器路径
    mv $file ../bak/$file'.bak'
done

效率完全超出预期,10分钟不到,全导完了。

文艺少年恋菌 answered 10 years, 1 month ago

Your Answer