使用如下内容执行一个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操作呢?谢谢!
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操作呢?谢谢!
常规模式时,rows=10000 表示bind array大小。
至于每次提交数量收到bindsize, readsize, rows 这3个影响。
你的bindsize=8192 设置的太小了,2行大小大概在8192字节左右,就每2行提交。
你把bindsize,readsize设置大一些,每次提交就会多一些。
如果bindsize设置的大小已经超过了10000行文件的大小,这时就受到rows影响,每次提交10000行。direct模式的话,rows表示每次保存点前从文件读取的行数
但是我的数据文件中每行都是80个英文字符,两行的话只有160个字符,也就是160个byte,我看日志中也是写的:Space allocated for bind array: 6714 bytes(2 rows)
剩余的byte是Oracle自动添加的?