Oracle 定时任务相关
Oracle 定时执行任务
主意:需要有定时任务权限才能创建任务
BEGINDBMS_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:00enabled => 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 |
相关查询
-----查询任务
-- 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"}