【发布时间】: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