Oracle 定时任务相关

Oracle 定时执行任务

主意:需要有定时任务权限才能创建任务

sql 复制代码
BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name        => 'JOB_DAILY_EO_REPORT',
    job_type        => 'STORED_PROCEDURE',
    job_action      => 'bi_ods_erp.Xxcus_Inv_Eo_Analyse_Pkg.main1', -- 程序包.存储过程
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'FREQ=DAILY; BYHOUR=6; BYMINUTE=0; BYSECOND=0', -- 每天6:00:00
    enabled         => TRUE,
    comments        => '每日6点自动生成报表'
  );
End;

关键操作指令

-- 修改执行计划(每2小时)

DBMS_SCHEDULER.SET_ATTRIBUTE('JOB_NAME', 'repeat_interval', 'FREQ=HOURLY; INTERVAL=2');

-- 启用/禁用

DBMS_SCHEDULER.ENABLE('JOB_NAME');

DBMS_SCHEDULER.DISABLE('JOB_NAME');

-- 删除任务

DBMS_SCHEDULER.DROP_JOB('JOB_NAME');:ml-citation{ref="8" data="citationList"}

时间公式说明

场景 表达式示例 说明
每 30 秒 SYSDATE + 30/(24*60*60) 日期运算按天为单位4
每小时 SYSDATE + 1/24 1/24 表示 1 小时6
每天凌晨 1 点 TRUNC(SYSDATE+1) +1/24 TRUNC 去掉时间部分3
每周一中午 12 点 NEXT_DAY(TRUNC(SYSDATE),'MONDAY') + 12/24 NEXT_DAY 指定下周某天4
每月 1 日凌晨 TRUNC(LAST_DAY(SYSDATE)) + 1 LAST_DAY 取当月最后一天4
复杂规则(如周六日早 6 点) TRUNC(LEAST(NEXT_DAY(SYSDATE,'SATURDAY'), NEXT_DAY(SYSDATE,'SUNDAY'))) + 6/24 LEAST 取最近日期6

相关查询

sql 复制代码
-----查询任务
-- DBMS_JOB 任务
SELECT job, what, next_date, interval FROM user_jobs;:ml-citation{ref="8" data="citationList"}  

-- DBMS_SCHEDULER 任务
SELECT job_name, enabled, next_run_date FROM user_scheduler_jobs;:ml-citation{ref="8" data="citationList"}


----‌并发控制‌
-- 调整最大并发数(默认 1000)
ALTER SYSTEM SET job_queue_processes = 20;:ml-citation{ref="4" data="citationList"}

----运行监控
-- 查看执行中的任务
SELECT * FROM dba_jobs_running;:ml-citation{ref="4" data="citationList"}