-- 数据字典 select * from dba_jobs; select * FROM all_jobs; select * FROM user_jobs; select * FROM dba_jobs_running;
job_queue_process 表示oracle能够并发的job的数量,可以通过语句
show parameter job_queue_process;
alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000 ;
创建job
DECLARE JOB NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT(JOB, ‘aps_validate;‘, SYSDATE, ‘sysdate+1/1440‘); END; VARIABLE JOB NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT(JOB => :JOB, WHAT => ‘aps_validate;‘, NEXT_DATE => TO_DATE(‘22-10-2008 10:06:41‘, ‘dd-mm-yyyy hh24:mi:ss‘), INTERVAL => ‘sysdate+1/1440‘); --每天1440分钟,即一分钟运行test过程一次 COMMIT; END; /
运行job
BEGIN DBMS_JOB.RUN(6); END;
删除job
BEGIN DBMS_JOB.REMOVE(6); END;
INTERVAL参数值
1:每分钟执行
Interval => TRUNC(sysdate,‘mi‘) + 1/ (24*60)
2:每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/(24)
3:每周定时执行
例如:每周一凌晨1点执行(next_day第2个参数可以是数字1-7,分别表示周日到周六)
Interval => TRUNC(next_day(sysdate,2))+1/24
4:每月定时执行
例如:每月1日凌晨1点执行(last_day表示每月最后一天)
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
5:每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),‘Q‘) + 1/24
6:每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,‘yyyy‘),12)+1/24
7. 每15分钟定时执行
Interval => trunc(sysdate,‘HH‘)+ceils(((trunc(sysdate,‘MI‘)-trunc(sysdate,‘HH‘))*24*60)/15,0)*15/(60*24)
8. 每12个小时定时执行
Interval => trunc(sysdate,‘dd‘)+0.5+ceil((trunc(sysdate,‘hh‘)-trunc(sysdate,‘dd‘))/12)
9. 每3个小时定时执行
Interval => trunc(sysdate,‘dd‘)+ceil((trunc(sysdate,‘hh24‘)-trunc(sysdate,‘dd‘))*24/3)*3/24
10:每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,‘yyyy‘), ceil(MONTHS_BETWEEN(sysdate,trunc(sysdate,‘yyyy‘))/6)*6)+1/24