Пытаетесь выполнить задание через 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;

2 ответа

Решение

Попробуйте следующую_дату = sysdate + (1/24/60) и интервал = (1/24/60)...

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

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, созданные в результате сбоя задания.

Другие вопросы по тегам