1

いくつかの sqlplus コマンドを含むスクリプトを cron で実行したいと考えています。

問題は、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

シェル環境は Oracle にとって非常に重要であり、cron を使用する場合はほとんど存在しません。いつものように、これを解決するにはいくつかの方法があります。

  1. 完全修飾パスを使用 - 少し柔軟性がありません
  2. 独自の実行環境をセットアップするスクリプトを作成する
  3. スクリプトを呼び出す際にcronで実行環境を設定します。

スクリプトを使用して環境を設定する標準的な方法は、通常は /usr/local/bin にある oraenv スクリプトを使用することです。

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 に答える