Попытка сделать задание, которое будет выполняться после каждой 1 минуты, но не работа?

Я сделал это задание, которое должно быть выполнено в интервале 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;
5
задан APC 2 May 2010 в 12:56
поделиться

2 ответа

Попробуйте next_date = sysdate + (1/24/60) и interval = (1/24/60) ...

5
ответ дан 14 December 2019 в 01:03
поделиться

Вот простая работа.

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>

Итак, первое, что нужно сделать, это отправить его с правильно указанным временем начала и интервалом. Если вы не помните, сколько минут в сутках (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, созданные неудачным заданием.

4
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: