Oracle を使用してスケジュールされた外部ジョブを設定し、バッチ ファイルを呼び出そうとしています。これについて話しているネット上で多くの資料を見つけましたが、何かが欠けています。
PL/SQL を SQL Developer で実行しています (ただし、SQLPlus でも試しました)。出力ウィンドウに表示されるエラーは次のとおりです。
Error starting at line 7 in command:
exec dbms_scheduler.run_job('my_job')
Error report:
ORA-27369: job of type EXECUTABLE failed with exit code: The storage control blocks were destroyed.
ORA-06512: at "SYS.DBMS_ISCHED", line 185
ORA-06512: at "SYS.DBMS_SCHEDULER", line 486
ORA-06512: at line 1
27369. 00000 - "job of type EXECUTABLE failed with exit code: %s"
*Cause: A problem was encountered while running a job of type EXECUTABLE.
The cause of the actual problem is identified by the exit code.
*Action: Correct the cause of the exit code and reschedule the job.
dba_scheduler_job_run_details で発生するエラーは次のとおりです。
"EXTERNAL_LOG_ID="job_167045_46155",
ORA-27369: job of type EXECUTABLE failed with exit code: The storage control blocks were destroyed.
STANDARD_ERROR="Launching external job failed: Invalid username or password""
私のバッチファイルがどこにあるかなど、何らかの許可の問題だと思います。メンテナンス アカウントとしてジョブを実行しようとしています。Windows コマンド ラインの「runas」コマンドを使用してバッチ ファイルを直接実行すると、すべて問題ありません。Oracle を介して実行すると、そうではありません。管理者アカウントなど、別のアカウントを試してみましたが、違いはありませんでした。
資格情報/ジョブを作成するために使用したコードは次のとおりです。
exec dbms_scheduler.create_credential( credential_name => 'oracle_cred', username => 'user', password => 'password', windows_domain => 'domain' );
DBMS_SCHEDULER.create_job ('my_job',
job_action => 'C:\WINDOWS\SYSTEM32\CMD.EXE',
number_of_arguments => 2,
start_date=> sysdate+1,
auto_drop=>FALSE,
job_type => 'executable',
enabled => FALSE
);
DBMS_SCHEDULER.set_job_argument_value ('my_job', 1, '/C');
DBMS_SCHEDULER.set_job_argument_value ('my_job', 2, 'C:\maintenance\audit.bat');
dbms_scheduler.set_attribute('my_job', 'credential_name', 'oracle_cred');
DBMS_SCHEDULER.enable('my_job');
任意の提案をいただければ幸いです。
mj