1

我想在 cron 中运行一个包含一些 sqlplus 命令的脚本。

问题是,当在 cron 中执行时,由于某种原因,sqlplus 命令不会被执行。如果我自己执行它,脚本运行良好。

我检查了一些论坛,甚至是 stackoverflow.com 上的主题,并找到了一些关于正确设置环境变量的提示。但即使在仔细检查后,脚本也不起作用。

这是我的脚本:

echo $ORACLE_HOME|grep "oracle" > /dev/null
if [ $? = 1 ] ; then
   echo "Setting environment variable"
   # Setting oracle environmet
   . /usr/oracle/product/10.2.0/.profile
   NLS_LANG='AMERICAN_GERMANY.WE8ISO8859P1'
fi

/usr/oracle/product/10.2.0/bin/sqlplus username/password @basics.sql > export.file

basics.sql 包含:

set pagesize 0
set feedback off
set heading off
set linesize 400
set NULL nll

SELECT SOME_FIELDS FROM TABLE ORDER BY FIELD;
EXIT;

有任何想法吗?

4

1 回答 1

5

shell 环境对 Oracle 非常重要,使用 cron 时几乎没有。与往常一样,有几种方法可以解决这个问题。

  1. 使用完全合格的路径 - 有点不灵活
  2. 制作脚本来设置它自己的执行环境
  3. 调用脚本时,在 cron 中设置执行环境。

使用脚本设置环境的一种非常标准的方法是使用 oraenv 脚本,该脚本通常位于 /usr/local/bin

ORACLE_SID={your_sid}
ORAENV_ASK=NO
type oraenv >/dev/null 2>&1 || PATH=/usr/local/bin:$PATH
. oraenv
SQLPATH=$HOME/sql
export SQLPATH
do your stuff

从 cron 行:

10 10 * * * $HOME/.profile;$HOME/bin/your_script >$HOME/log/your_script.log 2>&1

这假定 .profile 不是交互式的并导出所需的环境。

于 2013-07-29T12:27:28.357 回答