【问题标题】:Create oracle scheduler job which runs daily创建每天运行的 oracle 调度程序作业
【发布时间】:2015-10-19 03:22:01
【问题描述】:

我想创建每天在20:00 运行并运行 30 分钟的 oracle 调度程序作业。该作业将从KPI_LOGS 表中删除行,因为该表包含大量数据并且还在继续增长。我在 oracle sql developer 中为此类作业创建了以下脚本,但不确定这是否正确,因为我是调度程序作业概念的新手。

    BEGIN
        DBMS_SCHEDULER.CREATE_JOB (
                job_name => '"RATOR_MONITORING"."CROP_KPI_LOGS"',
                job_type => 'PLSQL_BLOCK',
                job_action => 'DELETE FROM KPI_LOGS WHERE CAST(TIMESTAMP AS DATE) < (SYSDATE  - 28);',
                number_of_arguments => 0,
                start_date => NULL,
                repeat_interval => 'FREQ=DAILY;INTERVAL=30',
                end_date => NULL,
                enabled => FALSE,
                auto_drop => FALSE,
                comments => 'CROP_KPI_LOGS');    

        DBMS_SCHEDULER.SET_ATTRIBUTE( 
                 name => '"RATOR_MONITORING"."CROP_KPI_LOGS"', 
                 attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);



    DBMS_SCHEDULER.enable(
             name => '"RATOR_MONITORING"."CROP_KPI_LOGS"');
END;

【问题讨论】:

  • “跑 30 分钟”是什么意思?通常,该作业将运行只要它需要运行,以便您的 delete 语句运行。如果delete 语句耗时超过 30 分钟,您希望发生什么?您是否希望该工作被终止并且该声明迄今为止所做的工作回滚?您是否希望作业在 30 分钟内尽可能多地删除,然后在窗口结束时停止?还有什么?

标签: oracle scheduled-tasks job-scheduling dbms-scheduler


【解决方案1】:

repeat_internal 不正确,您所拥有的将每 30 天运行一次。每天晚上 8 点跑步去...

FREQ=DAILY; BYHOUR=20

您无法指定它会运行多长时间,只要您的 DELETE 语句花费,它就会持续

【讨论】:

  • 谢谢它对我有用。就在 oracle sql developer 它也要求 BYDAY 所以我也给了 BYDAY=MON,TUE,WED,THU,FRI,SAT,SUN 并且它有效:)
猜你喜欢
  • 1970-01-01
  • 2013-11-09
  • 2013-09-28
  • 2020-04-30
  • 2017-02-16
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多