ORACLE sqlldr 大数据量 导入



ORACLE sqlldr 大数据量 导入由于项目需要,需要向数据库中导入6000万条数据。现有的资源是txt文本(数据用“,”分开的)。

方案一:转换成insert语句,但是执行效率太低,放弃。

 

方案二:使用plsql工具(tool-text import),这种效率大概是50万条每小时。由于时间紧急所以也不行。

 

方案三:使用sqlldr,这种效率还凑合,大概350万每小时。下面着重介绍下。

 

工具:sqlloader

 

前提:安装oracle服务端

 

环境:6000万数据、i5cpu4g内存,oracle10g    

 

步骤:

 

执行过程中的数据如下:

 

  1. 1.         书写ctl文件(本例risk.ctl):

 

OPTIONS(skip_index_maintenance=TRUE,direct=true,BINDSIZE=20971520,READSIZE=20971520,ERRORS=-1,ROWS=500000)

 

unrecoverable

 

load  data 

 

CHARACTERSET AL32UTF8

 

infile   ‘C:\Users\LHB\Desktop\TaxmodelData\PureRiskPremiumItem.txt’

 

insert into table pureriskpremium

 

Fields terminated by ‘,’

 

trailing nullcols

 

(MODELCODE,

 

 BASICRATECODE,


 

 AREACODE,

 

 BASICRISKPREMIUMS,

 

 BIZVERSION,

 

 EFFECTIVETIME,

 

 OBTAINCREATETIME

 

);

 

解释:

 

ROWS=500000 每500000提交

 

C:\Users\LHB\Desktop\TaxmodelData\PureRiskPremiumItem.txt’ 需要处理的真实

 

Fields terminated by ‘,’ 分隔符,本例分隔符是“,”

 

pureriskpremium 表名

 

  1. 2.         打开cmd

 

sqlldr jyrluser/jyrluser@10.9.249.5:1521/xasccxdb1 control=C:\Users\LHB\Desktop\TaxmodelData\risk.ctl

 

 

 

log=c:\jrimp.log

 

解释:sqlldr 用户名/密码@真实的ip:端口号/实例名 control=控制文件地址 log=日志(失败时才有日志)

 

  1. 3.      回车后,如果没有报错,说明正在执行。每执行一定条数会提示出来。
  2. 报错信息调试:

 

SQL*Loader-2026:加载因SQL加载程序无法继承而被终止
SQL*Loader-925:uldlfca:OCIStmtExecute(ptc_hp)时出错
ORA-03114:未连接到ORACLE

 

当时执行到3000左右时,报错了,然后查询报错日志,从日志中看出,字段定义长度太短,导致报了3000万条错误,后来扩充了字段。再次执行,就好用了。