sqlldr的commit问题

bisal(Chen Liu)
博客专家认证
2012-11-27 02:05:29
使用如下内容执行一个sqlldr操作向数据库表插数:
sqlldr ${user_id} control=${ctl_file} rows=10000 bindsize=8192 readsize=8192 errors=999999 log=${log_file}/${today_DATE}.log

但执行时,看到以下内容:
Commit point reached - logical record count 2
Commit point reached - logical record count 4
Commit point reached - logical record count 6
Commit point reached - logical record count 8
Commit point reached - logical record count 10
Commit point reached - logical record count 12
...

请问:
1、我这里没有设置direct=true,应该还是传统的导入方式,那rows定义为10000,为什么显示2行Commit一次呢?
2、如果这里是传统的导入方式,rows=10000是否应该表示10000行执行一次commit操作呢?

谢谢!
...全文
2664 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bisal(Chen Liu) 2013-01-18
  • 打赏
  • 举报
回复
引用 2 楼 dut703 的回复:
看下log文件就清楚了。 常规模式时,rows=10000 表示bind array大小。 至于每次提交数量收到bindsize, readsize, rows 这3个影响。 你的bindsize=8192 设置的太小了,2行大小大概在8192字节左右,就每2行提交。 你把bindsize,readsize设置大一些,每次提交就会多一些。 如果bindsize设……
但是我的数据文件中每行都是80个英文字符,两行的话只有160个字符,也就是160个byte,我看日志中也是写的:Space allocated for bind array: 6714 bytes(2 rows) 剩余的byte是Oracle自动添加的?
事后诸葛亮 2012-12-18
  • 打赏
  • 举报
回复
你rows设置得再太,bindsize=8192 readsize=8192 这两个参数设置小了。
善若止水 2012-12-15
  • 打赏
  • 举报
回复
建议你在plsqldev中设置下,在 commit every 10000 records.你这个问题我遇到过,我就是这样解决的
izj 2012-11-29
  • 打赏
  • 举报
回复
同问。。。。。。。。
dut703 2012-11-29
  • 打赏
  • 举报
回复
看下log文件就清楚了。 常规模式时,rows=10000 表示bind array大小。 至于每次提交数量收到bindsize, readsize, rows 这3个影响。 你的bindsize=8192 设置的太小了,2行大小大概在8192字节左右,就每2行提交。 你把bindsize,readsize设置大一些,每次提交就会多一些。 如果bindsize设置的大小已经超过了10000行文件的大小,这时就受到rows影响,每次提交10000行。 direct模式的话,rows表示每次保存点前从文件读取的行数

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧