【发布时间】:2014-01-07 03:54:28
【问题描述】:
sqlldr user/pwd@host skip=1 control=$CUR_CTL.final data=$fpath log=data.log rows=10000 direct=true errors=999
我正在上传一个只有 8 行的 csv 文件。 上述命令是仅在 10000 行之后运行提交,还是在作业结束时也提交?
【问题讨论】:
标签: sql oracle sql-loader
sqlldr user/pwd@host skip=1 control=$CUR_CTL.final data=$fpath log=data.log rows=10000 direct=true errors=999
我正在上传一个只有 8 行的 csv 文件。 上述命令是仅在 10000 行之后运行提交,还是在作业结束时也提交?
【问题讨论】:
标签: sql oracle sql-loader
是的,它将在文件末尾提交。如果不这样做,那将是相当不适合目的,真的
从技术上讲,既然您有direct=y,那么您正在执行直接路径加载,因此ROWS command line parameter 会影响SQL*Loader 在大负载期间执行数据保存而不是提交的频率。唯一真正的区别在于索引的可用性。
ROWS参数标识在保存数据之前要从数据文件中读取的行数。默认是在加载结束时读取所有行并保存一次数据。
如果您的文件中有 10008 行,它将在前 10000 行之后执行数据保存,然后在最后 8 行之后再次保存,并且只有在到达文件末尾时才会使索引可用。
ROWS 高于数据文件中的实际行数不会导致数据被忽略。
您还可以查看exit status code,它有望告诉您所有行都已成功加载,并且日志文件将显示插入的行数。
【讨论】:
sqlldr。您看不到部分提交,并且在您描述的场景中,只有一次提交。程序中是否缺少某些数据但稍后可以看到?我认为您需要更详细地解释您所看到的内容。 sqlldr 是否可能在未处理整个文件的情况下退出,可能是因为达到拒绝限制?