Oracle JOB失败

时间:2017-02-27 10:22:23

标签: oracle bash plsql scheduled-tasks jobs

我有一个运行可执行文件(bash脚本)的Oracle JOB .. 这个脚本自己运行SQLPLUS,它运行一个PACKAGE

检查

function run_pkg_load_svr() {
    if [ "$1" != "" ] && [ "$2" != "" ];
    then
        sqlplus -l -s $1/$2 <<EOF
            WHENEVER SQLERROR EXIT 99;
            WHENEVER OSERROR EXIT 88;
            BEGIN
                PKG_LOAD_SVR.SP_MAIN();
             END;
            /  
EOF
        pkg_retcode=$?
        echo $DATE_LOG >> upload.log
        echo "PKG EXIT CODE: " $pkg_retcode >> upload.log
    fi
}

所以,如果我运行JOB,它的退出代码(PKG)是1

但是,如果我手动运行包或脚本,它就可以运行

日志事件

STATUS已成功

怎么可能有这样的问题?

此外,当 SP_MAIN 启动时,我还填充了一个log_table .. 即使这不起作用

1 个答案:

答案 0 :(得分:0)

您可能甚至没有连接到数据库。

如果我提供 错误的用户/密码 ,我会在此处获得相同的1状态:

host:/jcho $  sqlplus -l -s  a/b@database <<EOF
>  select 1 from dual;
> EOF
ERROR:
ORA-01017: invalid username/password; logon denied

SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus

host:/jcho $ echo $?
1

......首先是sure you are able to connect

修改

当我尝试连接的数据库不存在时,我也得到同样的错误:

host:/jcho $  sqlplus -l -s  a/b@unknown_database <<EOF
>  select 1 from dual;
> EOF
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

SP2-0751: Unable to connect to Oracle.  Exiting SQL*Plus
host:/jcho $ echo $?
1

因此,当从Oracle Job运行命令并手动执行命令时,请确保您处于相同的上下文中。特别是,显示环境变量的内容ORACLE_SID,(TWO_TASK?),ORACLE_HOMEPATHPATH应包含$ORACLE_HOME/bin);

并且通过在脚本中显示来检查变量是否正确设置:添加

 echo USER-PASSWORD: $1-$2

作为你职能的第一行。