Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 сложное расписание в dbms_scheduler  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
Oracle 11.2.0.3 EE

чего хочется максимум:
- есть джобы, которые выполняются раз в 1-20 минут (разные джобы - разный интервал)
- хочется, чтобы джобы не работали на протяжении "специальных часов"
- "специальные часы" - это 4:00:00-4:59:59 во все дни плюс 1:00:00-3:59:59 во вторник

чего планировал сделать:
- именованные расписания weekly_pause и pause, в которую включить weekly_pause
- в самих джобах в качестве расписания использовать 'FREQ=MINUTELY;INTERVAL=x;EXCLUDE=pause'

не получилось ещё на этапе включения одного расписания в другое:

SQL>   exec dbms_scheduler.create_schedule( schedule_name=>'weekly_pause', repeat_interval=>'FREQ=MINUTELY;INTERVAL=1;BYDAY=WED;BYHOUR=1,2,3' );

PL/SQL procedure successfully completed


SQL>   exec dbms_scheduler.create_schedule( schedule_name=>'pause', repeat_interval=>'FREQ=MINUTELY;INTERVAL=1;BYHOUR=4;INCLUDE=weekly_pause' );
begin dbms_scheduler.create_schedule( schedule_name=>'pause', repeat_interval=>'FREQ=MINUTELY;INTERVAL=1;BYHOUR=4;INCLUDE=weekly_pause' ); end;

ORA-27422: usage of BYHOUR not supported in embedded calendar application "TEST"."WEEKLY_PAUSE"
ORA-06512: at "SYS.DBMS_ISCHED", line 997
ORA-06512: at "SYS.DBMS_SCHEDULER", line 1486
ORA-06512: at line 1


так тоже не работает:


SQL> exec dbms_scheduler.create_schedule( schedule_name=>'daily_pause', repeat_interval=>'FREQ=MINUTELY;INTERVAL=1;BYHOUR=4' );

PL/SQL procedure successfully completed


SQL> exec dbms_scheduler.create_job( job_name=>'test', job_type=>'PLSQL_BLOCK', job_action=>'null;', repeat_interval=>'FREQ=MINUTELY;INTERVAL=10;EXCLUDE=daily_pause' );
begin dbms_scheduler.create_job( job_name=>'test', job_type=>'PLSQL_BLOCK', job_action=>'null;', repeat_interval=>'FREQ=MINUTELY;INTERVAL=10;EXCLUDE=daily_pause' ); end;

ORA-27422: usage of BYHOUR not supported in embedded calendar application "TEST"."DAILY_PAUSE"
ORA-06512: at "SYS.DBMS_ISCHED", line 124
ORA-06512: at "SYS.DBMS_SCHEDULER", line 271
ORA-06512: at line 1



вопрос: что я делаю не так?
17 ноя 20, 17:30    [22233996]     Ответить | Цитировать Сообщить модератору
 Re: сложное расписание в dbms_scheduler  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1314
проходил мимо...,

DBMS_SCHEDULER.CREATE_WINDOW смотрел?
17 ноя 20, 17:38    [22234008]     Ответить | Цитировать Сообщить модератору
 Re: сложное расписание в dbms_scheduler  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
WINDOW не предлагать?
17 ноя 20, 17:40    [22234010]     Ответить | Цитировать Сообщить модератору
 Re: сложное расписание в dbms_scheduler  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
oragraf, andrey_anonymous,

спасибо - пошёл смотреть..
17 ноя 20, 17:59    [22234034]     Ответить | Цитировать Сообщить модератору
 Re: сложное расписание в dbms_scheduler  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
вопросы:

1. зачем мне window? я не собираюсь открывать никакой ресурс-план. только ради window groups?
2. правильно ли я понимаю, что window group допускает только добавления окон, но не исключения из них?
3. правильно я понимаю, что windows - это полное расписание? в том смысле, что если мне нужны джобы (их реально много), работающие раз в 2,5,10,15 минут и начинающиеся в разные минуты часа, мне потребуется на каждую из них своя window group, состоящая из своих windows?

и последнее.
exclude в repeat_interval таки не работают от слова "совсем" или я его просто как-то не так использую?
17 ноя 20, 18:39    [22234069]     Ответить | Цитировать Сообщить модератору
 Re: сложное расписание в dbms_scheduler  [new]
проходил мимо...
Member

Откуда: от верблюда
Сообщений: 1178
проходил мимо...,

спрашивали - отвечаем:

How To Exclude A Certain Window In A Schedule For A Day Using DBMS_SCHEDULER Package (Doc ID 461432.1)
Note: The exclude, include intersection options works only on a full day basis, part of a day cannot be excluded,included or intersected.


про мою задачу:

работает:
SQL> exec dbms_scheduler.create_schedule( schedule_name=>'tue_runs', repeat_interval=>'FREQ=MINUTELY;INTERVAL=10;BYDAY=TUE;BYHOUR=0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23' );

PL/SQL procedure successfully completed


SQL> exec dbms_scheduler.create_schedule( schedule_name=>'std_runs', repeat_interval=>'FREQ=MINUTELY;INTERVAL=10;BYDAY=MON,WED,THU,FRI,SAT,SUN;BYHOUR=0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23' );

PL/SQL procedure successfully completed


SQL> exec dbms_scheduler.create_schedule( schedule_name=>'all_runs', repeat_interval=>'tue_runs,std_runs' );

PL/SQL procedure successfully completed


SQL> exec dbms_scheduler.create_job( job_name=>'test', job_type=>'PLSQL_BLOCK', job_action=>'null;', repeat_interval=>'all_runs' );

PL/SQL procedure successfully completed


т.е. таки без окон, но по три расписания на каждый интервал и смещения запуска джоба. можно по два, но на мой взгляд менее сопровождаемо, особенно, если появятся ещё периоды неработы.

грустно. вероятно буду думать в сторону Using a PL/SQL Expression
18 ноя 20, 01:58    [22234299]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить