【问题标题】:Oracle JOB failsOracle 作业失败
【发布时间】:2017-02-27 10:22:23
【问题描述】:

我有一个运行可执行文件(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 is SUCCEEDED在日志事件中

怎么可能有这样的问题?

此外,当 SP_MAIN 启动时,我还会填充一个 log_table.. 即使这样也行不通

【问题讨论】:

  • 可能是执行脚本的oracle账号环境设置不同,由于某种原因无法运行sqlplus。您需要捕获更多诊断信息。顺便说一句,为什么要托管一个调用 SQL*Plus 的 shell 脚本,该脚本连接回(大概)同一个数据库?这似乎有点过于复杂,更不用说不安全了,因为您将密码作为纯文本传递。
  • 能否添加您使用的 Oracle Job 调用?

标签: oracle bash plsql scheduled-tasks jobs


【解决方案1】:

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

如果我给错误的用户/密码,我会在这里得到相同的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_HOMEPATH的显示内容(PATH应该包含$ORACLE_HOME/bin);

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

 echo USER-PASSWORD: $1-$2

作为函数的第一行。

【讨论】:

  • 你好,去看看
  • 好吧,当我在我的 bash 脚本中调用函数 run_pkg_load_svr $user $pass edit: $user='dboracle' $pass='dboracle'
  • 那么当你从命令行执行sqlplus -l -s dboracle/dboracle 时会发生什么?你得到正常提示了吗?
  • 连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters and Automatic Storage Management options SQL> 我在没有 -l -s 的情况下运行,无论如何它可以工作我不明白为什么如果我通过命令行运行脚本,它可以工作一切......而不是通过 JOB ORACLE 没有
  • 如果在脚本开头添加echo USER-PASSWORD: $1-$2 会得到什么?变量设置是否正确?
猜你喜欢
  • 2017-03-22
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 2018-03-30
相关资源
最近更新 更多