重新安排Oracle工作

时间:2016-05-31 20:31:39

标签: oracle scheduler

Oracle作业每天运行两次,时间间隔为

FREQ = DAILY; BYHOUR = 6,12; BYMINUTE = 30

现在我需要将工作重新安排在上午8点和下午12:30运行。如果不打扰已经开始运行的12:30时间表,我就无法做到。

2 个答案:

答案 0 :(得分:2)

使用以下命令查询作业是否正在运行:

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 ║
╚═══╩══════╩════════╝

答案 1 :(得分:1)

如果您尝试通过以下方式执行此操作: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');