首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Oracle sqlldr快速导入

Oracle sqlldr快速导入

作者头像
用户1148526
发布于 2019-05-25 19:47:38
发布于 2019-05-25 19:47:38
2.7K0
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1433243

一、需求

windows上的一个文本文件filename.txt有22008080行,有两列数字,要导入oracle的表中,时间要尽量的短。

二、实现方法

  1. 压缩(zip)上传(scp)文件,把文件从windows传到oracle所在的linux机器上

下面步骤都在oracle服务器上执行

  1. 解压缩
代码语言:javascript
复制
unzip filename.zip
  1. 处理回车换行
代码语言:javascript
复制
dos2unix filename.txt
  1. 检查一下文件有多少行
代码语言:javascript
复制
wc -l filename.txt
  1. 把一个大文件分成若干小文件
代码语言:javascript
复制
split -l 2200808 filename.txt -d -a 4 a_

说明:split命令可以将一个大文件分割成很多个小文件。-l参数是每个输出文件的行数;-d参数表示以数字作为输出文件名的后缀;-a参数指示文件名后缀的长度,a_是输出文件名的前缀。命令成功执行后,生成了10个2200808行的小文件,文件名分别为

a_0000

a_0001

a_0002

a_0003

a_0004

a_0005

a_0006

a_0007

a_0008

a_0009

  1. 批量改名给文件添加后缀.txt
代码语言:javascript
复制
ls -al a_00* | awk '{print $9}' | xargs -i mv {} {}.txt
  1. 编写相应的sqlldr控制文件
代码语言:javascript
复制
# more a0.ctl
load data
infile 'a_0000.txt' 
badfile 'a0.bad'
discardfile 'a0.dsc'

into table "user1"."t1"
append
fields terminated by x'9'
trailing nullcols
(userid,
viewseq)

...

# more a9.ctl
load data
infile 'a_0009.txt' 
badfile 'a9.bad'
discardfile 'a9.dsc'

into table "user1"."t1"
append
fields terminated by x'9'
trailing nullcols
(userid,
viewseq)

与文本文件对应生成了10个控制文件

  1. 使用sqlldr并行直接路径加载
代码语言:javascript
复制
sqlldr userid=user1/123456 control=a0.ctl direct=y parallel=true skip_index_maintenance=true &
sqlldr userid=user1/123456 control=a1.ctl direct=y parallel=true skip_index_maintenance=true &
sqlldr userid=user1/123456 control=a2.ctl direct=y parallel=true skip_index_maintenance=true &
sqlldr userid=user1/123456 control=a3.ctl direct=y parallel=true skip_index_maintenance=true &
sqlldr userid=user1/123456 control=a4.ctl direct=y parallel=true skip_index_maintenance=true &
sqlldr userid=user1/123456 control=a5.ctl direct=y parallel=true skip_index_maintenance=true &
sqlldr userid=user1/123456 control=a6.ctl direct=y parallel=true skip_index_maintenance=true &
sqlldr userid=user1/123456 control=a7.ctl direct=y parallel=true skip_index_maintenance=true &
sqlldr userid=user1/123456 control=a8.ctl direct=y parallel=true skip_index_maintenance=true &
sqlldr userid=user1/123456 control=a9.ctl direct=y parallel=true skip_index_maintenance=true &

22008080行只需要几秒钟

参考:

sqlldr并行加载问题

linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)

oracle 并行原理深入解析及案例精粹

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年12月27日,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档