1.创建JOB
declare
job number;
BEGIN
DBMS_JOB.SUBMIT(
JOB => job,
WHAT => 'pack_dw.pro_base(to_char(sysdate,''yyyy''));',--执行程序
NEXT_DATE => to_date('2020/10/17 00:00:00','YYYY/MM/DD hh24:mi:ss'),--第一次执行时间
INTERVAL => 'sysdate+12/24' --每12小时执行一次
);
COMMIT;
end;
--下一年
--'pack_dw.pro_jbase(to_char(add_months(sysdate,12),''yyyy''));'
2.查看JOB
SQL> select * from user_jobs;
– 正在运行job
SQL> select * from dba_jobs_running;
3.移除JOB
begin
dbms_job.remove(166); /*参数是 job的id*/
commit;
end;
4.初始化相关参数
1)job_queue_process表示oracle能够并发的job的数量,当job_queue_process值为0时表示全部停止oracle的job。
2)查看job_queue_processes参数
select * from v$parameter where name=‘job_queue_processes’;
3)修改job_queue_processes参数
alter system set job_queue_processes = 10 scope=both;
5.常用时间格式
描述 | 脚本 |
---|---|
每12小时执行一次 | sysdate+12/24 |
每一秒执行一次 | sysdate + 1/(24 * 60 * 60) |
每一分钟执行 | TRUNC(sysdate,‘mi’) + 1/ (24*60) |
每天的凌晨1点执行 | TRUNC(sysdate) + 1 +1/ (24) |
每周一凌晨1点执行 | TRUNC(next_day(sysdate,‘星期一’))+1/24 |
每月1日凌晨1点执行 | TRUNC(LAST_DAY(SYSDATE))+1+1/24 |
每季度的第一天凌晨1点执行 | TRUNC(ADD_MONTHS(SYSDATE,3),‘Q’) + 1/24 |
每年7月1日和1月1日凌晨1点 | ADD_MONTHS(trunc(sysdate,‘yyyy’),6)+1/24 |
每年1月1日凌晨1点执行 | ADD_MONTHS(trunc(sysdate,‘yyyy’),12)+1/24 |
参考文章https://www.jb51.net/article/92575.htm
https://blog.csdn.net/hunhun1122/article/details/78569034?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduend~default-1-78569034.nonecase&utm_term=oracle%20%E4%B8%80%E4%B8%AAjob%E5%8F%AF%E4%BB%A5%E5%A4%9A%E6%AC%A1%E6%89%A7%E8%A1%8C%E4%B9%88&spm=1000.2123.3001.4430