我有一个运行可执行文件(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 .. 即使这不起作用
答案 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_HOME
和PATH
(PATH
应包含$ORACLE_HOME/bin
);
并且通过在脚本中显示来检查变量是否正确设置:添加
echo USER-PASSWORD: $1-$2
作为你职能的第一行。