Oracle作业调度程序无法正常工作

时间:2015-03-09 13:28:20

标签: oracle

我在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;

2 个答案:

答案 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