【发布时间】:2016-06-04 11:54:28
【问题描述】:
Oracle 作业每天运行两次,时间间隔如下
FREQ = DAILY; BYHOUR = 6,12; BYMINUTE = 30
现在我需要重新安排作业在上午 8 点和下午 12:30 运行。我不能不打扰已经运行的 12:30 时间表。
【问题讨论】:
Oracle 作业每天运行两次,时间间隔如下
FREQ = DAILY; BYHOUR = 6,12; BYMINUTE = 30
现在我需要重新安排作业在上午 8 点和下午 12:30 运行。我不能不打扰已经运行的 12:30 时间表。
【问题讨论】:
查询作业是否正在运行:
select owner , job_name , running_instance, session_id from all_scheduler_running_jobs
order by owner , job_name
并将您的时间间隔更改为:
FREQ=DAILY;BYHOUR=8,12;BYMINUTE=0,30;BYSETPOS=1,4
SETPOS 的工作方式如下:
╔═══╦══════╦════════╗
║ P ║ Hour ║ Minute ║
╠═══╬══════╬════════╣
║ 1 ║ 8 ║ 00 ║
║ 2 ║ 8 ║ 30 ║
║ 3 ║ 12 ║ 00 ║
║ 4 ║ 12 ║ 30 ║
╚═══╩══════╩════════╝
【讨论】:
BYSETPOS=1,4
如果您尝试通过:FREQ=DAILY;BYHOUR=8,12;BYMINUTE=0,30;BYSECOND=0 执行此操作,您的作业将每天运行 4 次(上午 8 点、上午 8 点 30 分、下午 12 点和下午 12 点 30 分),这听起来不像您想要的。
我认为这样做的唯一方法是创建两个时间表:
begin
dbms_scheduler.create_schedule (
schedule_name => 'EIGHT_AM',
repeat_interval => 'FREQ=DAILY;BYHOUR=8;BYMINUTE=0;BYSECOND=0');
dbms_scheduler.create_schedule (
schedule_name => 'TWELVE_THIRTY_PM',
repeat_interval => 'FREQ=DAILY;BYHOUR=12;BYMINUTE=30;BYSECOND=0');
end;
然后将两个计划分配给调度程序作业:
exec dbms_scheduler.set_attribute('SCHEMA.MYJOB','REPEAT_INTERVAL','EIGHT_AM,TWELVE_THIRTY_PM');
【讨论】: