5

このジョブを作成しました。1分間隔で実行する必要がありますが、機能していません。使用 execute dbms_job.run(2);すると実行されます。 printe手順です提案してください!

BEGIN
    DBMS_JOB.SUBMIT  (
         job =>:job_no,
             WHAT=>'printe;',--Procedure 
             next_date=>sysdate+1/24*60,
             interval=>'sysdate+1/24*60'
          );
    commit;
END;
4

2 に答える 2

5

これが簡単な仕事です。

SQL> create table log1 (ts timestamp)
  2  /

Table created.

SQL> create or replace procedure printe as
  2  begin
  3      insert into log1 values (systimestamp);
  4      commit;
  5  end;
  6  /

Procedure created.

SQL>

したがって、最初に、開始時間と間隔の両方を正しく指定して送信する必要があります。1日(1440)に何分あるか思い出せない場合は、角かっこを使用することをお勧めします。仕事の提出と日付の指定を比較してみましょう...

SQL> var job_no number
SQL> BEGIN
   2     DBMS_JOB.SUBMIT
   3      (
   4      job =>:job_no,
   5      WHAT=>'printe;',--Procedure
   6      next_date=>sysdate+1/24*60,
   7    interval=>'sysdate+1/24*60'
   8    );
   9    commit;
  10  END;
  11  /

 PL/SQL procedure successfully completed.

 SQL> print job_no

     JOB_NO
 ----------
         71

 SQL>

...優先順位を表明するための角かっこ付き..。

SQL> BEGIN
  2     DBMS_JOB.SUBMIT
  3      (
  4      job =>:job_no,
  5      WHAT=>'printe;',--Procedure
  6      next_date=>sysdate+1/(24*60),
  7    interval=>'sysdate+1/(24*60)'
  8    );
  9    commit;
 10  END;
 11  /

PL/SQL procedure successfully completed.

SQL> print job_no

    JOB_NO
----------
        72

SQL>

明らかに、ジョブ71は実行されておらず、しばらくは実行されません。

SQL>    select job, what, last_date, next_date, interval
  2  from user_jobs
  3  where job in (71,72)
  4  /

   JOB WHAT         LAST_DATE            NEXT_DATE            INTERVAL
------ ------------ -------------------- -------------------- -----------------
    71 printe;                           05-MAY-2010 17:35:34 sysdate+1/24*60
    72 printe;      03-MAY-2010 05:44:42 03-MAY-2010 05:45:34 sysdate+1/(24*60)

SQL>

監視ジョブ72...。

SQL> select * from log1
  2  /

TS
-------------------------------------------------------------------
03-MAY-10 05:43:39.250000
03-MAY-10 05:44:42.296000

SQL>

それでもこれがうまくいかない場合は、どうすればよいですか?最初に、データベースがジョブを実行するように構成されているかどうかを確認します。これにはDBAアクセスが必要です。

SQL> select value
  2  from v$parameter
  3  where name='job_queue_processes'
  4  /

VALUE
-------------------------
1000

SQL>

私の記憶が正しければ、Oracle 9iでは、このパラメータのデフォルト値は0です。ジョブを実行するには、ゼロ以外の値に設定する必要があります。

それが問題ではない場合は、アラートログでエラーメッセージを確認する必要があります。ディレクトリにはbackground_dump_dest、失敗したジョブによって生成された.trcファイルが含まれている場合もあります。

于 2010-05-02T12:54:12.980 に答える
5

next_date = sysdate +(1/24/60)およびinterval =(1/24/60)を試してください...

于 2010-05-02T09:01:38.920 に答える