• ベストアンサー

crontabでsql/plusの起動

シェルスクリプトで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です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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で起動する場合は、注意していないと環境変数 については忘れがちになる部分です。 この回答でうまくいけばと思います。 でわ

bunnyLove
質問者

お礼

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

その他の回答 (1)

  • miya_777
  • ベストアンサー率31% (44/140)
回答No.1

cronで起動した場合、下記の環境変数しか設定されません。 HOME=user's-home-directory LOGNAME=user's-login-id PATH=/usr/bin:/usr/sbin:. SHELL=/usr/bin/sh なので、パスもORACLE_HOMEも不充分となります。 起動するシェルのなかで、環境変数をちゃんと設定しないと駄目です。

bunnyLove
質問者

補足

回答ありがとうございます。少し補足しますと、 起動するシェルは、以下のように記述しております。 #!/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をシェルの中で設定する」という部分が よくわからないのですが.......

関連するQ&A

  • RSHコマンドでのsqlplusの起動

    RSHコマンドを使用し、リモートサーバのsqlplusを操作したいと考えています。 検証環境として、ローカルサーバ(RedHat Linux7.2)、リモートサーバ(RedHat Linux6.2)で検証を行い、うまくいったので本番環境としてローカルサーバ(RedHat Linux7.2)、リモートサーバ(Solaris8)で検証を行ったところうまく動いてくれません。 rsh -l oracle リモートサーバ名 sqlplus 上記のコマンドを打つとsqlplus not foundと帰ってきます。検証環境ではちゃんとOracleのプロンプトが帰って来てたのですが。一応自分ではLinuxとSolarisのRSHの違いかなと思いつつ・・・。かといってOracleのほうの設定も間違っているのかと思い質問させて頂いています。 sqlplus not foundとでてくるのでフルパスで書けば大丈夫なのかと思い rsh -l oracle リモートサーバ名 $ORACLE_HOME/bin/sqlplus と打つと以下のエラーが帰ってきます。 message file sql<lang>.msb not found Error6 initializing SQL*Plus どなたか、同じような経験、解決策などご存知の方がいらっしゃいましたらお知恵をお借りできればと思います。 よろしくお願いします。

  • ストアドをSQL*PLUSで実行したい。

    こんにちわ。 いまORACLE10gのPLSQLでストアドプロシジャを作成しています。 CREATE OR REPLACE PROCEDURE procXXXXXXXX ( oCNT1 OUT NUMBER , oCNT2 OUT NUMBER , nRET OUT NUMBER ) IS ~ というものですが,これをSQL*PLUSでテストとして実行したいのですが,変数定義などどうすれば良いでしょうか? 教えてください。よろしくお願いします。

  • SQL*PLUSを終了させる方法

    シェルスクリプトから、SQL*PLUSを呼んでいますが、 sqlplusコマンドを実行したとき、 PL/SQLプロシージャが正常に完了しました。 SQL> と入力待ちになってしまいます。 この入力待ちで止まってほしくないのですが、 どうすればよいでしょうか。 ご教示お願いいたします。

  • SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書

    SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書いています。 イメージ sqlplus scott/tiger << EOF   declare     aaa number;   begin     -- *1     select col1 into aaa from test1;   end;   /   -- *2   define a=1   define b=1   @test.sql EOF ここで*1にて例えば複数行が返ってくるなどのエラーが 発生した場合、*2以降のSQLを実行せずにSQL*Plusから抜けたいのですが どのようにすればよいかわかりますでしょうか。 whenever sqlerror exit 255 などはPL/SQL内の論理エラーはハンドリングしてくれないようです。 よろしくお願いします。 それかdefineや@マーク指定によるsqlファイルの取り込みを PL/SQLの中で実行できる方法を教えていただく方法でも 当方が実施したいことはできるのでそれでもかまいません。

  • 新規追加ユーザでsql*plusを使用できるようにするには

    REDHAT enterprise 3にoracle10gの環境です。 REDHATにユーザを追加しましたがsql*plusを使用できません。 環境変数に設定が足りないようなのですが、具体的にどのファイルに何の設定が必要なのか分かりません。 ご教授ください。

  • BシェルでSQL文を実行

    【OS:AIX】 あるユーザーでCRONを組んでおり、オラクルのプレシジャを読み込ませるシェルプログラムをCシェルで組んでありました。 それをとある理由でBシェルに変更させてチェックしております。 ところがBシェルに変更してから以下のsqlplus文で失敗してしまいます。 ただ、単独でshファイルを実行するときは、SQL文も読み込んでくれて問題なく正常に終了するのですが、crontabで実行させるとSQL文を読み出すところで失敗してしまいます。 何かいけないところはありますでしょうか # SQL*Plusを呼び出しデータ作成 sqlplus ID/PASSWORD@SID < $HOME/script/data.sql ユーザアカウント自体はデフォルトでKシェルで作成されたユーザです。

  • OracleClientでのエラー

    OracleClientでDBに接続しようとしたところ、以下のメッセージが表示され接続できませんでした。 今まではAdministrators権限のユーザーで使用できていたのですが、Users権限のユーザーで接続しようとしたところ、今回の現象になってしまいました。 権限が原因なのでしょうか? Error 6 initializing SQL*Plus Message file sp1<lang>.msb not found SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory (環境) OS:WindowsXPSP2 OracleClient:10.1.0

  • LinuxのCrontabについて質問します。

    LinuxのCrontabについて質問します。 通常cronを編集するには、crontab -eを使用するかと思います。 そうするとエディターが起動し、入力モードになります。 今、シェルスクリプトで、crontabを書き変えたいのですが、直接cronのファイルを触ってしまってもよい物なのでしょうか? 以上、よろしくお願いします。

  • crontab スケジュールを登録

    solaris で crontab -e を叩き、 vi を使って編集をしているのですが、 # export EDITOR=vi # crontab -e */10 * * * * hoge :wq 上記のような操作を実行すると、 "/tmp/crontabKpaG5q" 1 行、18 バイト */10 * * * * hoge crontab: 前の行にエラーがあります; unexpected character found in line. crontab: 入力中にエラーが検出されました。crontab ファイルは生成されません。 っといったエラーメッセージが表示され、 スケジュールを登録する事が出来ません。 試しに crontab -l を実行してみましたがやはり空であり /var/cron/log も確認しましたが、 登録したコマンドが実行された形跡はありませんでした。 お手数ではありますが、皆様のお知恵を貸して下さい。 宜しくお願い致します。

  • crontabで実行されない部分がある・・・?

    MySQLに登録されたユーザ名とアカウント名でLinuxのユーザを作る シェルスクリプトを作りました。 ルートにおいてあって、 ./test.sh とすると、 1.useraddでユーザが作られる 2.MySQLの予約テーブルから登録済テーブルにユーザ情報を書き換える 3.FTPユーザ登録がされる というものです。 これをcrontabで走らそうと思いました。 su -でルートになって、 crontab -e * * * * * /test.sh としたのですが、2.3は実行されました。 しかし1.のユーザ作成がされませんでした。 スクリプトいじった記憶はないですが一応確認ということで、 crontabをとめて手動でやってみたところ、1.2.3全て実行されました。 コードも悪くないし、crontab登録もルートでやったのに上手く行かなくて、 途方に暮れています。 何か思いつく原因があったら御教授ください。 お願いします。