通过sqlldr将txt文件导入oracle数据库

有个项目每天要往数据库里插入大量的数据,峰值大概每秒一万条左右。如果直接用insert语句,即使使用了批量也效果不是很理想。
听说从文件导入的方式效率很高,所以尝试一下。

【创建一个表】
CREATE TABLE T_20200310_TEST 
(
  PHONE VARCHAR2(20 BYTE) NOT NULL 
, NAME VARCHAR2(20 BYTE) NOT NULL 
, AGE VARCHAR2(20 BYTE) NOT NULL 
, CREATETIME DATE NOT NULL 


【写一个CTL文件】命名:20200311_insert.ctl
load data
characterset utf8
INFILE '/user/InputTxt2OracleTest/InputFile.txt' -- txt文件所在路径
Append into table T_20200310_TEST -- 要导入的表名称
fields terminated by "|" -- 字段分隔符
(
phone char(16) "replace(:CONTENT,'XXX','YYY')", -- 把txt对应字段中的XXX替换为YYY
name char(1000), -- 要导入字段的最大长度,如果不写默认是255
age,
createtime date'YYYYMMDDhh24miss' -- 要导入的时间格式
)

【创建一个txt文件】
13900001260|老大|48|20190901103133
13800007326|老二|38|20190802113234
13400005323|老三|40|20190703123335
13000000196|老四|65|20190604133436
13600009320|老五|68|20190505143537

【用oracle用户调用CTL】
sqlldr userid=oracle用户名/oracle密码@oracle的sid control=/user/InputTxt2OracleTest/20200311_insert.ctl

【导入完成】

我计划让程序一直生成文件,然后让oracle用户自动执行20200311_insert.ctl,不停的向数据库里导入记录。

首先写一个.sh脚本里面一句话就行:
sqlldr userid=oracle用户名/oracle密码@oracle的sid control=/user/InputTxt2OracleTest/20200311_insert.ctl

然后让crontab来定时调用这个.sh,我设置的是每分钟执行一次:
*/1 * * * * su - oracle -c "/home/oracle/test.sh"

这样就实现了数据的高速导入。但是要注意,这个还是受限于服务器的配置和磁盘io速度。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值