【问题标题】:Does sqlldr auto-commit after the job completes?作业完成后 sqlldr 是否自动提交?
【发布时间】: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


    【解决方案1】:

    是的,它将在文件末尾提交。如果不这样做,那将是相当不适合目的,真的

    从技术上讲,既然您有direct=y,那么您正在执行直接路径加载,因此ROWS command line parameter 会影响SQL*Loader 在大负载期间执行数据保存而不是提交的频率。唯一真正的区别在于索引的可用性。

    ROWS 参数标识在保存数据之前要从数据文件中读取的行数。默认是在加载结束时读取所有行并保存一次数据。

    如果您的文件中有 10008 行,它将在前 10000 行之后执行数据保存,然后在最后 8 行之后再次保存,并且只有在到达文件末尾时才会使索引可用。

    ROWS 高于数据文件中的实际行数不会导致数据被忽略。

    您还可以查看exit status code,它有望告诉您所有行都已成功加载,并且日志文件将显示插入的行数。

    【讨论】:

    • 我的 bash 脚本中有两个连续的命令:sqlldr 后跟 sqlplus 命令来运行存储过程。在存储过程尝试访问该表时,似乎 sqlldr 没有完全完成对表的提交。知道可能出了什么问题吗?
    • @user640378 - 我假设你没有在后台运行sqlldr。您看不到部分提交,并且在您描述的场景中,只有一次提交。程序中是否缺少某些数据但稍后可以看到?我认为您需要更详细地解释您所看到的内容。 sqlldr 是否可能在未处理整个文件的情况下退出,可能是因为达到拒绝限制?
    • 我创建了一个包含所有详细信息的新问题:stackoverflow.com/q/21027330/640378
    猜你喜欢
    • 2019-11-30
    • 2012-03-28
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多