crontab上的sqlplus连接错误但直接起作用

时间:2015-10-19 10:29:03

标签: oracle shell crontab sqlplus

我使用以下脚本创建带有oracle查询输出的文本文件。我手动尝试时脚本工作正常。但是当我把它放到crontab时,它永远无法获得连接。通过自动化访问sqlplus有什么限制吗?

rm /export/home/oracle/out.csv 
INC=0


while : ; do    

INC=$(($INC+1))
if [[ "$INC" -eq 10 ]]; then
    echo "Exit after multiple failed attempt to connect to the DB."
    break
fi

sqlplus -s username/password@hostname.com:1552/servicename << EOF
set pagesize 10000

set feedback off
set heading off
set echo off

spool /export/home/oracle/out.csv 
SET LINESIZE 10000
SET PAGESIZE 50
SELECT TRIM(COUNT(*)) FROM users;
SPOOL OFF
EXIT;
EOF

[[ -f "/export/home/oracle/out.csv" ]] && break
echo "Failed to connect to DB and retrying."
sleep 5

done

1 个答案:

答案 0 :(得分:1)

Cron实用程序使用“/ bin / sh”作为默认shell,因此您需要相应地设置Oracle环境。

你可以:

1.-有一个包含必要变量的配置文件。 (*)

2.-在脚本中对必要的Oracle环境变量进行硬编码。

在你的情况下:

对于解决方案“1”,您可以使用以下内容创建 $ HOME / profile.12cR2 文件:

export ORACLE_BASE=/oraclebin/app/oracle/product/databaseR2/base
export ORACLE_HOME=/oraclebin/app/oracle/product/databaseR2/12cR2

export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

export ORACLE_SID=db02

export EDITOR=vi

按照以下步骤更新您的脚本:

. $HOME/profile.12cR2

rm /export/home/oracle/out.csv 
INC=0


while : ; do    

INC=$(($INC+1))
if [[ "$INC" -eq 10 ]]; then
    echo "Exit after multiple failed attempt to connect to the DB."
    break
fi
...

(*)根据Oracle数据库基础结构更新此配置文件。