sqlldr 作业未通过 Autosys 运行

sqlldr 作业未通过 Autosys 运行

我有一个 shell 脚本,如果手动运行或通过 Cron 运行,则可以正常执行并使用 sqlldr 将分隔文件成功加载到数据库。

然而,通过 Autosys 脚本执行时,sqlldr 说它成功了,然而数据实际上从未加载到数据库中。

有谁在使用 sqlldr/Autosys 组合时遇到过这种情况吗?如果有,知道解决方法/修复方法吗?

答案1

原因可能有很多。我遇到的一个问题是,在执行批处理作业时,其中一个启动脚本被绕过,LANG 环境变量未设置,这影响了数据库连接的语言设置,包括默认日期格式/语言,这意味着记录会因为日期无效而被拒绝。

不太明显的问题可能与路径有关(找不到数据文件、控制文件)或与安全有关(数据库功能可能尝试记录终端)。

SQLLDR 应该生成一个 LOG 文件和一个包含被拒绝记录的 BAD 文件,这可能会给出提示

答案2

这是脚本

!/bin/sh
PATH=$PATH:/usr/local/bin/:/usr/java/jre1.6.0_17/bin/

export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_2
export ORACLE_SID=orcl
export ORAENV_ASK=NO
. oraenv

sqlldr system/123456@orcl control=test.ctl,DATA=test.dat,ERRORS=100000000,MULTITHREADING=true,BAD=test.bad

cat test.bad >> rejected.txt

答案3

.oraenv 行中点缀的“oraenv”在哪里。从 autosys 运行时,pwd 会有所不同吗?

尝试在脚本中的 !/bin/sh 后面放置“set -x”。

那不应该是 !#/bin/sh 而不是 !/bin/sh

Autosys 应该能够生成一些 STDERR/STDOUT 日志。您可以发布这些日志吗?

答案4

这是通过 CRONTAB 或任何其他 sqlldr 调度系统运行的正确语法

导出 LD_LIBRARY_PATH=/oracle/ora9/lib:$LD_LIBRARY_PATH 导出 ORACLE_HOME=/oracle/ora9 导出 PATH=/oracle/ora9/bin:$PATH

sqlldr userid=user/password@db \ control=/Path/to/control/file.ctl \ data=/give/datafile/path/datfile \ log=same for log \ bad=same for bad errors=999

相关内容