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