sqlldr快速导入 _MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1994 | 回复: 0   主题: sqlldr快速导入         下一篇 
snisn
注册用户
等级:新兵
经验:51
发帖:84
精华:0
注册:2011-10-23
状态:离线
发送短消息息给snisn 加好友    发送短消息息给snisn 发消息
发表于: IP:您无权察看 2015-8-24 14:38:56 | [全部帖] [楼主帖] 楼主

背景:

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

方法:
1. 压缩(zip)上传(scp)文件,把文件从windows传到oracle所在的Linux机器上
下面步骤都在oracle服务器上执行

2. 解压缩:unzip filename.zip

3. 处理回车换行

 dos2unix filename.txt


4. 查看一下文件有多少行

 wc -l filename.txt


5. 把一个大文件分成若干小文件

 split -l 2200808 filename.txt -d -a 4 a_


此时生成了10个2200808行的小文件,文件名分别为

 a_0000
a_0001
a_0002
a_0003
a_0004
a_0005
a_0006
a_0007
a_0008
a_0009


6. 批量改名给文件添加后缀.txt

 ls -al a_00* | awk '{print $9}' | xargs -i mv {} {}.txt


7. 编写相应的sqlldr控制文件

 # 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个控制文件

8. 使用sqlldr并行直接路径加载

 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行只需要几秒钟

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论