[Oracle] Windows環境において外部プログラムをスケジュール実行する際の注意点 | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

Oracle 10g では DBMS_SCHEDULER パッケージを利用すると様々なプログラムをスケジュール実行することができますが、Windows 環境において外部プログラムを実行する場合、何かとトラブルに見舞われます。

OracleJobSchedulerサービスの起動が必要

外部プログラムをスケジュール実行するには、OracleJobSchedulerサービスを起動しておく必要があります。

このサービスを起動せずに、外部プログラムをスケジュール実行すると、以下のエラーが発生します。

ORA-27370: ジョブ・スレーブは、タイプEXECUTABLEのジョブの起動に失敗しました
ORA-27300: OSシステム依存操作:accessing execution agentがステータス:2で失敗しました。
ORA-27301: OS障害が発生しました。メッセージ: ?w?????t?@?C??????????????
ORA-27302: 障害が発生しました。場所: sjsec 6
ORA-27303: 追加情報: ?w?????t?@?C???????????????

※PL/SQLブロックやストアド・プロシージャの場合はOracleJobSchedulerサービスを起動しておく必要はありません。


コマンドはフルパスで指定する

実行するコマンドはフルパスで記述する必要があります。

フルパスで記述しなかった場合、以下のエラーが発生します。

ORA-27369: タイプEXECUTABLEのジョブが、次の終了コードで失敗しました: ?t?@???N?V????????????????B


バッチファイルは CMD.EXE から実行する

バッチファイルを実行する場合、CMD.EXE から実行する必要があります。

バッチファイルを直に指定すると、以下のエラーが発生します。

ORA-27369: タイプEXECUTABLEのジョブが、次の終了コードで失敗しました: ?t?@???N?V????????????????B

また、CMD.EXE には、オプション'/c'、'/q'をつける必要があります。

これをつけなかった場合にもやはり上記のエラーが発生します。


OracleJobSchedulerサービスアカウントの権限

OracleJobSchedulerサービスのログオンアカウントには、外部プログラムの実行に必要な権限を持ったユーザーアカウントを指定する必要があります。

十分な権限を持たないユーザーアカウントを指定していると、以下のエラーが発生することがあります。

ORA-27369: タイプEXECUTABLEのジョブが、次の終了コードで失敗しました: ?t?@???N?V????????????????B

特にローカルシステムアカウントになっている場合にエラーになりやすいようです。