Как составить расписание заданий СУБД Oracle в окне
Я хочу создать задание СУБД Oracle, которое будет выполняться каждый рабочий день (не по выходным) с 09:00 до 20:00 каждые 10 минут. Интересно, смогу ли я сделать это в FREQ
Параметр определения задания или я должен создать New Maintenance Window
,
Кажется, что с предложенным решением, задание выполняется только в 9 и 20, и после первого выполнения, когда я запускаю этот запрос
select owner, job_name, next_run_date
from dba_scheduler_jobs
where JOB_NAME = 'GET_INVOICES_JOB';
я получил 09/10/17 20:01:27,000000000 EUROPE/MADRID
'freq=minutely; interval=10; byhour=9,20; byday=MON,TUE,WED,THU,FRI; exclude=Company_Holidays; bysetpos=-1'
2 ответа
Вы можете использовать это:
begin
dbms_scheduler.create_job (
job_name => 'jb_en_lopes',
job_type => 'STORED_PROCEDURE',
job_action => 'pr_en_lopes',
start_date => '09-oct-2017 09:00:00 am',
repeat_interval => 'freq=minutely; interval=10; byhour=9,10,11,12,13,14,15,16,17,18,19,20; byday=MON,TUE,WED,THU,FRI;',
enabled => true);
end;
Когда этот планировщик отвечает, я получаю результаты ниже:
select *
from dba_scheduler_job_log l
where l.job_name = 'JB_EN_LOPES'
order by l.log_date desc;
LOG_ID LOG_DATE OPERATION STATUS
1051594 10-OCT-17 09.59.01.197420 AM +03:00 RUN SUCCEEDED
1051592 10-OCT-17 09.58.02.229724 AM +03:00 RUN SUCCEEDED
1051590 10-OCT-17 09.57.03.177907 AM +03:00 RUN SUCCEEDED
1051588 10-OCT-17 09.56.01.197341 AM +03:00 RUN SUCCEEDED
Куда:
select owner, job_name, next_run_date
from dba_scheduler_jobs
where JOB_NAME = 'JB_EN_LOPES';
OWNER JOB_NAME NEXT_RUN_DATE
myschema JB_EN_LOPES 10-OCT-17 08.00.00.194958 PM +03:00
Я не думаю, что это возможно:
Вот несколько примеров repeat_interval, которые демонстрируют универсальность и гибкость синтаксиса календаря:
Ежедневно с 10:00 до 22:00 с понедельника по пятницу:
FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=22; BYMINUTE=0; BYSECOND=0;
Пробег каждый час:
FREQ=HOURLY;INTERVAL=1;
Запуск каждые 5 минут:
FREQ=MINUTELY;INTERVAL=5;
Запускать каждую пятницу в 9:00 (все три примера эквивалентны):
FREQ=DAILY; BYDAY=FRI; BYHOUR=9; BYMINUTE=0; BYSECOND=0;
FREQ=WEEKLY; BYDAY=FRI; BYHOUR=9; BYMINUTE=0; BYSECOND=0;
FREQ=YEARLY; BYDAY=FRI; BYHOUR=9; BYMINUTE=0; BYSECOND=0;
Запускать каждую вторую пятницу:
FREQ=WEEKLY; INTERVAL=2; BYDAY=FRI;
Запуск в понедельник недели 5, 10 и 15 каждый год:
FREQ=YEARLY; BYWEEKNO=5,10,15; BYDAY=MON
Бегите в последний день каждого месяца.
FREQ=MONTHLY; BYMONTHDAY=-1;
Запускать с последнего по последний день каждого месяца:
FREQ=MONTHLY; BYMONTHDAY=-2;
Запуск 10 марта (оба примера эквивалентны):
FREQ=YEARLY; BYMONTH=MAR; BYMONTHDAY=10;
FREQ=YEARLY; BYDATE=0310;
Выполняйте каждые 10, 11, 12, 13 и 14 января (оба примера эквивалентны):
FREQ=YEARLY; BYDATE=0110,0111,0112,0113,0114
FREQ=YEARLY; BYDATE=0110+SPAN:5D;
Пробег каждые 10 дней:
FREQ=DAILY; INTERVAL=10;
Ежедневно бегать в 4:15, 5:15 и 18:15:
FREQ=DAILY; BYHOUR=16,17,18; BYMINUTE=15; BYSECOND=0;
Выполнить 15-го числа каждого второго месяца:
FREQ=MONTHLY; INTERVAL=2; BYMONTHDAY=15;
Запускать 29 числа каждого месяца:
FREQ=MONTHLY; BYMONTHDAY=29;
Запуск во вторую среду каждого месяца:
FREQ=MONTHLY; BYDAY=2WED;
Запустите в последнюю пятницу года:
FREQ=YEARLY; BYDAY=-1FRI;
Запуск каждые 50 часов:
FREQ=HOURLY; INTERVAL=50;
Запустите в последний день каждого второго месяца:
FREQ=MONTHLY; INTERVAL=2; BYMONTHDAY=-1;
Запускать ежечасно в течение первых трех дней каждого месяца:
FREQ=HOURLY; BYMONTHDAY=1,2,3;
Выполнить в 60-й, 120-й и 180-й дни года:
FREQ=YEARLY; BYYEARDAY=60,120,180;
Запускать в последний рабочий день каждого месяца (при условии, что рабочие дни - с понедельника по пятницу):
FREQ=MONTHLY; BYDAY=MON,TUE,WED,THU,FRI; BYSETPOS=-1
Вот несколько более сложных примеров, которые ссылаются на следующие именованные расписания:
BEGIN
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'COMPANY_HOLIDAYS',
repeat_interval => 'FREQ=YEARLY; BYDATE=0704,0905,1124,1125,1225;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'JUL4',
repeat_interval => 'FREQ=YEARLY; BYMONTH=JUL; BYMONTHDAY=4;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'MEM',
repeat_interval => 'FREQ=YEARLY; BYMONTH=MAY; BYMONTHDAY=30;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'LAB',
repeat_interval => 'FREQ=YEARLY; BYMONTH=SEP; BYMONTHDAY=5;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'LAST_SAT',
repeat_interval => 'FREQ=MONTHLY; BYDAY=SAT; BYSETPOS=-1;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'END_QTR',
repeat_interval => 'FREQ=YEARLY; BYDATE=0331,0630,0930,1231;');
sys.DBMS_SCHEDULER.create_schedule (
schedule_name => 'FISCAL_YEAR',
repeat_interval => 'FREQ=YEARLY;BYDATE=0301,0601,0901,1201;PERIODS=4;');
END;
/
Запускать в последний рабочий день каждого месяца, исключая праздничные дни: FREQ=MONTHLY; BYDAY= ПН, ВТ, СР, ЧТ, ПТ; EXCLUDE=COMPANY_HOLIDAYS; BYSETPOS=-1
Запускать в полдень каждую пятницу и в праздничные дни: FREQ=YEARLY; BYDAY= ПТ;BYHOUR=12; INCLUDE=COMPANY_HOLIDAYS
Запустите эти три праздника: 4 июля, День памяти и День труда: 4 июля,MEM,LAB
Запустите последний день месяца, который является субботой или последним днем квартала:
FREQ=MONTHLY; BYMONTHDAY=-1; INTERSECT=LAST_SAT,END_QTR
Выполните в последнюю среду каждого квартала финансового года:
FREQ=FISCAL_YEAR;BYDAY=-1WED
Запустите в последний рабочий день 2-го и 4-го кварталов финансового года (при условии, что рабочие дни - с понедельника по пятницу):
FREQ=FISCAL_YEAR;BYDAY=MON,TUE,WED,THU,FRI;BYPERIOD=2,4;BYSETPOS=-1