powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запуск джоба строго по расписанию
7 сообщений из 7, страница 1 из 1
Запуск джоба строго по расписанию
    #39998465
Azket
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Есть некоторый джоб, который может работать дольше чем указано в repeat_interval, и в этом случае джоб ждет когда предыдущий завершиться и только тогда запускает следующую итерацию. Есть ли возможность запускать джобы строго по расписанию, независимо от того отработал предыдущий джоб или нет?

Тестовый пример:
Код: plsql
1.
2.
3.
4.
begin  
  dbms_scheduler.create_job(job_name => 'VV_TEST',job_type => 'PLSQL_BLOCK', job_action => 'dbms_lock.sleep(40);', repeat_interval => 'FREQ=SECONDLY; INTERVAL=30', auto_drop => false, enabled => true  );
--  dbms_scheduler.drop_job(job_name => 'VV_TEST');
end;


и лог
Код: plsql
1.
select j.* from dba_scheduler_job_run_details j where j.job_name = 'VV_TEST' order by j.LOG_DATE desc;


тут видно, что REQ_START_DATE заполняется строго по интервалу, а ACTUAL_START_DATE - только после окончания предыдущего джоба:
Код: plsql
1.
2.
3.
4.
5.
6.
   	LOG_ID	LOG_DATE	JOB_NAME	STATUS	ERROR#	REQ_START_DATE	ACTUAL_START_DATE	RUN_DURATION
1	3983521	14-СЕН-20 05.38.18.239690 PM +03:00	VV_TEST	SUCCEEDED	0	14-СЕН-20 05.37.25.000000 PM +03:00	14-СЕН-20 05.37.38.195858 PM +03:00	+000 00:00:40
2	3983497	14-СЕН-20 05.37.38.192606 PM +03:00	VV_TEST	SUCCEEDED	0	14-СЕН-20 05.36.25.000000 PM +03:00	14-СЕН-20 05.36.58.184587 PM +03:00	+000 00:00:40
3	3983487	14-СЕН-20 05.36.58.182059 PM +03:00	VV_TEST	SUCCEEDED	0	14-СЕН-20 05.35.55.000000 PM +03:00	14-СЕН-20 05.36.18.173764 PM +03:00	+000 00:00:40
4	3983447	14-СЕН-20 05.36.18.171626 PM +03:00	VV_TEST	SUCCEEDED	0	14-СЕН-20 05.35.25.000000 PM +03:00	14-СЕН-20 05.35.38.161570 PM +03:00	+000 00:00:40
5	3983422	14-СЕН-20 05.35.38.158818 PM +03:00	VV_TEST	SUCCEEDED	0	14-СЕН-20 05.34.25.000000 PM +03:00	14-СЕН-20 05.34.58.149339 PM +03:00	+000 00:00:40
...
Рейтинг: 0 / 0
Запуск джоба строго по расписанию
    #39998471
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Azket, джоб создающий уникальный джоб с автодропом?
...
Рейтинг: 0 / 0
Запуск джоба строго по расписанию
    #39998472
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Azket,

Как вариант, создавать разовые джобы с автоматическим удалением внутри исходной.
...
Рейтинг: 0 / 0
Запуск джоба строго по расписанию
    #39998476
Azket
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
Azket,

Как вариант, создавать разовые джобы с автоматическим удалением внутри исходной.


Нет, джоб должен быть постоянный, и дергает процедурку.
...
Рейтинг: 0 / 0
Запуск джоба строго по расписанию
    #39998480
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Azket,

Основной джоб вызывается по расписанию, ради чего и затевалось. Внутри вызывается dbms_scheduler.create_job с параметром autodrop => true. После создания джоб сразу запускается.
...
Рейтинг: 0 / 0
Запуск джоба строго по расписанию
    #39998535
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Azket,

документация Оракла говорит, что пока джоб не закончился, новая не запустится.
https://docs.oracle.com/cd/B19306_01/server.102/b14231/scheduse.htm

"A new instance of the job, however, will not be started until the current one completes."

Это, я думая, сделано как защита взрыва параллельных процессов, когда один нескончаемый джоб инстанциируется тысячи раз, поглощая ресурсы. Если бы такое было возможно, то каким числом бы вы ограничили максимальное число одновременных исполнений этого джоба?

Если число небольшое, то я бы сделал группу из нескольких идентичных джобов, (jobA, jobB, jobC) и поставил бы их на расписание.
В любой момент будет не более трех джобов, одновременно исполняемых. Оракл их считает разными, поэтому JobA и JobB могут исполняться одновременно.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
begin 
dbms_scheduler.create_job(job_name => 'VV_TEST_A',job_type => 'PLSQL_BLOCK', job_action => 'dbms_lock.sleep(40);', 
                          repeat_interval => 'FREQ=MINUTELY; INTERVAL=1; BYSECOND=0', auto_drop => false, enabled => true  );
dbms_scheduler.create_job(job_name => 'VV_TEST_B',job_type => 'PLSQL_BLOCK', job_action => 'dbms_lock.sleep(40);', 
                          repeat_interval => 'FREQ=MINUTELY; INTERVAL=1; BYSECOND=20', auto_drop => false, enabled => true  );
dbms_scheduler.create_job(job_name => 'VV_TEST_C',job_type => 'PLSQL_BLOCK', job_action => 'dbms_lock.sleep(40);', 
                          repeat_interval => 'FREQ=MINUTELY; INTERVAL=1; BYSECOND=40', auto_drop => false, enabled => true  );
end;



Чтобы разнести старты по времени, пришлось сделать MINUTELY.

Код: plaintext
1.
2.
3.
4.
   	LOG_ID	JOB_NAME	STATUS		ERROR#	REQ_START_DATE	ACTUAL_START_DATE	RUN_DURATION
1	8193	VV_TEST_B	SUCCEEDED	0	08.10.20.000000	08.10.20.010000          00:00:40
2	8192	VV_TEST_A	SUCCEEDED	0	08.10.00.000000	08.10.00.010000          00:00:40
3	8191	VV_TEST_C	SUCCEEDED	0	08.09.40.000000	08.09.40.010000          00:00:40
...
Рейтинг: 0 / 0
Запуск джоба строго по расписанию
    #39998593
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Azket
Есть ли возможность запускать джобы строго по расписанию
Oracle - это не real-time система. После осознания этого подобные вопросы больше не возникнут.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запуск джоба строго по расписанию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]