1

Oracle 10g XEを使用しており、ストアドプロシージャのスケジュールされたジョブを作成しようとしています。私は権利を与えましたhr

grant create job to hr ;
grant create external job to hr ;

次に、としてログインしhrてジョブを作成しました

begin
  dbms_scheduler.create_job(
      job_name => 'THIS_IS_DA_NAME',
      job_type => 'STORED_PROCEDURE',
      job_action => 'PROC_MYSTOREDPROC',
      start_date => sysdate + (5/(24*60)),
      repeat_interval => 'FREQ=MINUTELY; interval=1',
      enabled => TRUE,
      comments => 'Runtime: Every day every minute');
end;

これは成功しました。dba_scheduler_job_run_detailsしかし、仕事はまたはに表示されませんdba_scheduler_job_log

select log_date, job_name, status, req_start_date, actual_start_date, run_duration
from   dba_scheduler_job_run_details

select log_date, job_name, status
from dba_scheduler_job_log

このビュー/テーブルにリストされています

select *
from dba_scheduler_jobs

ここでの問題は何ですか、なぜストアドプロシージャが実行されないのですか?を使用して正常に実行されます

exec PROC_MYSTOREDPROC

また、ジョブの実行はすぐにうまく機能します

EXEC dbms_scheduler.run_job('hr.THIS_IS_DA_NAME');
4

2 に答える 2

1

DBMS_SCHEDULERドキュメントから:

初期化パラメーターはJOB_QUEUE_PROCESSES、ジョブの実行のために作成できるプロセスの最大数を指定します。Oracle Database 11gリリース2(11.2)以降、ジョブにJOB_QUEUE_PROCESSES適用されます。このパラメーターを0に設定すると、ジョブDBMS_SCHEDULERが無効になります。DBMS_SCHEDULER

したがって、JOB_QUEUE_PROCESSES初期化パラメータが1より大きい値に設定されていることを確認してください。

また、ジョブリクエストの検証をトリガーするためにコミットする必要があります。

コミットすると、ジョブはUSER_SCHEDULER_JOBSビューでスケジュールされます。

SQL> select job_name, start_date from user_scheduler_jobs;

JOB_NAME        START_DATE
--------------- -----------------------------------
THIS_IS_DA_NAME 19-DEC-12 08.15.47.000000 AM -06:00

もちろん、5分後にスケジュールするように要求したため、USER_SCHEDULER_JOB_LOGまだ行はありませんが、5分待つと、次の行が表示されます。

SQL> select job_name, log_date, status from user_scheduler_job_log 
      WHERE job_name = 'THIS_IS_DA_NAME';

JOB_NAME        LOG_DATE                            STATUS
--------------- ----------------------------------- -------------
THIS_IS_DA_NAME 19-DEC-12 08.15.47.009921 AM -06:00 SUCCEEDED
THIS_IS_DA_NAME 19-DEC-12 08.16.47.009534 AM -06:00 SUCCEEDED
于 2012-12-19T10:18:13.863 に答える
0
DBMS_SCHEDULER.enable ('THIS_IS_DA_NAME');

次に、コードまたはこれを試してください。

begin
  dbms_scheduler.create_job(
      job_name => 'THIS_IS_DA_NAME',
      job_type => 'PLSQL_BLOCK',
      job_action => 'BEGIN PROC_MYSTOREDPROC; END;',
      start_date => sysdate + (5/(24*60)),
      repeat_interval => 'FREQ=MINUTELY; interval=1',
      enabled => TRUE,
      comments => 'Runtime: Every day every minute');
end;
于 2012-12-19T10:27:17.743 に答える