我在oracle中创建一个将在每分钟运行的作业,但问题是作业是成功创建但不能按时运行
execute PACKAGE_BATCH.USP_TERMIANTE_SUSPENSION;
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => '"LTR"."TERMINATE_SUSPENSION_JOB"',
job_type => 'STORED_PROCEDURE',
job_action => 'LTR.PACKAGE_BATCH.USP_TERMINATE_SUSPENSION',
number_of_arguments => 0,
start_date => sysdate,
repeat_interval => 'FREQ=MINUTELY;BYMINUTE=1',
end_date => NULL,
enabled => TRUE,
auto_drop => TRUE,
comments => 'Terminate Suspension When End Date is equal to Current Date');
DBMS_SCHEDULER.set_attribute
( name => '"LTR"."TERMINATE_SUSPENSION_JOB"',
attribute => 'job_action',
value => 'LTR.PACKAGE_BATCH.USP_TERMINATE_SUSPENSION');
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"LTR"."TERMINATE_SUSPENSION_JOB"',
attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_RUNS);
DBMS_SCHEDULER.enable(
name => '"LTR"."TERMINATE_SUSPENSION_JOB"');
END;
答案 0 :(得分:4)
FREQ=MINUTELY;BYMINUTE=1
这将使作业在每个" 1"分钟运行。所以12:01,1:01,2:01等等。
如果您需要让它每分钟运行一次 - FREQ=MINUTELY
就足够了,或者如果您想确保它在12:01:00,12:02:00运行,则可以添加BYSECOND=0
, 12:03:00等。
答案 1 :(得分:1)
为简单起见,请参阅以下示例:
使用日历语法重复间隔。
'freq=minutely;'
使用日期和时间戳重复间隔。
'sysdate + 1/24/60'
'systimestamp + 1/24/60'
'sysdate + interval ''1'' minute'
'systimestamp + interval ''1'' minute'
使用日历语法重复间隔。
'freq=minutely; bysecond=0;'
使用日期和时间戳重复间隔。
'trunc(sysdate, ''MI'') + 1/24/60'
'trunc(systimestamp, ''MI'') + 1/24/60'
'trunc(sysdate, ''MI'') + interval ''1'' minute'
'trunc(systimestamp, ''MI'') + interval ''1'' minute'
此处更多示例http://oracle-base.com/articles/10g/scheduler-10g.php#every_minute