怎么快速的导入数据

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

阅读 4.5k
2 个回答

自己解决了。用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分钟不到,全导完了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题