プロが教える店舗&オフィスのセキュリティ対策術

シェルスクリプトでsql/plusを呼び出し、ストアドプロシジャを
実行しようとしているのですが、crontabを使ったスケジュール起動を
行おうとすると、以下のようなエラーになってしまいます。

Message file sp1<lang>.msb not found
Error 6 initializing SQL*Plus

not foundと言われているファイルに心当たりがありません。
sql/plusがバックグラウンドで使っているファイルなのでしょうか?
ちなみに、crontabを使わずに、コマンドラインから
このシェルスクリプトを実行すると、正常に動作します。

UNIXもシェルスクリプトも超初心者です。
ご存知の方おられましたら、ご教授願います。

OSはRedHat6.2J、Oracle8.1.7です。

A 回答 (2件)

白黒ならず、黒白です。


多分ですが、以下のような環境変数を設定することで、
解決できるかと思われます。
(あくまでも参考にして下さい)
miya777さんの言われるように、cronでは環境変数といわれるものが
ひきつぎされないため、シェルの中で再度設定する必要があります。

setenv ORACLE_BASE /xxxx/oracle
setenv ORACLE_HOME $ORACLE_BASE/product/8.1.5
setenv ORACLE_SID xxxxx
setenv NLS_LANG Japanese_Japan.JA16EUC
setenv ORA_NLS33 $ORACLE_HOME/xxxxx/...
setenv LD_LIBRARY_PATH $ORACLE_HOME/lib

set path=( . /usr/bin /sbin /usr/sbin /usr/ccs/bin /opt/bin /opt/local/bin /usr/ucb /xxxx/.../oracle/product/8.1.5/bin $path )

ちなみに、envコマンドにて上記のsetenvコマンドの内容は
参照できるかと思います。

結構、cronで起動する場合は、注意していないと環境変数
については忘れがちになる部分です。

この回答でうまくいけばと思います。

でわ
    • good
    • 0
この回答へのお礼

blackwhiteさん、親切な回答ありがとうございます。
お返事が遅くなってしまってすみません。
あれから、色々調べてやってみてblackwhiteさんの言うような
環境変数の設定までなんとかたどりつきました。
勉強不足でお手数おかけしてすみませんでした。
大変勉強になりました。ありがとうございます!

お礼日時:2001/10/19 10:04

cronで起動した場合、下記の環境変数しか設定されません。



HOME=user's-home-directory
LOGNAME=user's-login-id
PATH=/usr/bin:/usr/sbin:.
SHELL=/usr/bin/sh

なので、パスもORACLE_HOMEも不充分となります。
起動するシェルのなかで、環境変数をちゃんと設定しないと駄目です。

この回答への補足

回答ありがとうございます。少し補足しますと、
起動するシェルは、以下のように記述しております。

#!/bin/bash
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/oracle/product/8.1.7/
bin;
export PATH
/home/oracle/product/8.1.7/bin/sqlplus @/home/oracle/product/8.1.7/bin/test

「ORACLE_HOMEをシェルの中で設定する」という部分が
よくわからないのですが.......

補足日時:2001/08/29 17:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています