使用如下内容执行一个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操作呢?谢谢!

解决方案 »

  1.   

    看下log文件就清楚了。
    常规模式时,rows=10000 表示bind array大小。
    至于每次提交数量收到bindsize, readsize, rows 这3个影响。
    你的bindsize=8192 设置的太小了,2行大小大概在8192字节左右,就每2行提交。
    你把bindsize,readsize设置大一些,每次提交就会多一些。
    如果bindsize设置的大小已经超过了10000行文件的大小,这时就受到rows影响,每次提交10000行。direct模式的话,rows表示每次保存点前从文件读取的行数
      

  2.   

    建议你在plsqldev中设置下,在 commit every 10000 records.你这个问题我遇到过,我就是这样解决的
      

  3.   

    你rows设置得再太,bindsize=8192 readsize=8192 这两个参数设置小了。
      

  4.   


    但是我的数据文件中每行都是80个英文字符,两行的话只有160个字符,也就是160个byte,我看日志中也是写的:Space allocated for bind array:                   6714 bytes(2 rows)
    剩余的byte是Oracle自动添加的?