Oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。 而且oracle重新启动后,job会继续运行,不用重新启动。
一、相关视图 (1).dba_jobs显示的是所有用户下的job 注:dba_jobs_running 可以查看正在运行的JOB
(2).user_jobs和all_jobs差不多,一般显示当前用户下的job。
2.视图的相关字段简要描述 SQL> desc dba_jobs;
3.JOB的执行频率interval 1.每天夜里24点 TRUNC(SYSDATE+1) 2.每天上午9:20 TRUNC(SYSDATE+1)+(9*60+20)/(24*60) 3.每周二下午1点 NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 13/24 4.每月15日夜里0点 TRUNC(LAST_DAY(SYSDATE ) + 15) 5.每个季度最后一天的晚上11点 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24'' 6.每星期六和日早上6点10分 ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'' 7.每3秒钟执行一次 'sysdate+3/(24*60*60)' 8.每2分钟执行一次 'sysdate+2/(24*60)' 9.每分钟执行 TRUNC(sysdate,'mi') + 1/ (24*60) interval => 'sysdate+1/(24*60)' --每分钟执行 interval => 'sysdate+1' --每天 interval => 'sysdate+1/24' --每小时 interval => 'sysdate+2/24*60' --每2分钟 interval => 'sysdate+30/24*60*60' --每30秒 10.每天定时执行 Interval => TRUNC(sysdate+1) --每天凌晨0点执行 Interval => TRUNC(sysdate+1)+1/24 --每天凌晨1点执行 Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60) --每天早上8点30分执行 11.每周定时执行 Interval => TRUNC(next_day(sysdate,'星期一'))+1/24 --每周一凌晨1点执行 Interval => TRUNC(next_day(sysdate,1))+2/24 --每周一凌晨2点执行 12.每月定时执行 Interval =>TTRUNC(LAST_DAY(SYSDATE)+1) --每月1日凌晨0点执行 Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24 --每月1日凌晨1点执行 13.每季度定时执行 Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') --每季度的第一天凌晨0点执行 Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24 --每季度的第一天凌晨1点执行 Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24 --每季度的最后一天的晚上11点执行 14.每半年定时执行 Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24 --每年7月1日和1月1日凌晨1点 15.每年定时执行 Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24 --每年1月1日凌晨1点执行
二、JOB的创建 语法: declare variable job number; begin sys.dbms_job.submit(job => :job, what => 'prc_name;', --执行的存储过程的名字 next_date => to_date('22-11-201309:09:41', 'dd-mm-yyyy hh24:mi:ss'), interval =>'sysdate+1/86400'); --每天86400秒钟,即一秒钟运行prc_name过程一次 commit; end;
使用dbms_job.submit方法过程,这个过程有五个参数:job、what、next_date、interval与no_parse。 dbms_job.submit( job OUT binary_ineger, What IN varchar2, next_date IN date, interval IN varchar2, no_parse IN booean:=FALSE)
job参数是输出参数,由submit()过程返回的binary_ineger,这个值用来唯一标识一个工作。一般定义一个变量接收,可以去user_jobs视图查询job值。 what参数是将被执行的PL/SQL代码块,存储过程名称等。 next_date参数指识何时将运行这个工作。 interval参数何时这个工作将被重执行。 no_parse参数指示此工作在提交时或执行时是否应进行语法分析——true,默认值false。指示此PL/SQL代码在它第一次执行时应进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析。
其他job相关的存储过程 在dbms_job这个package中还有其他的过程:broken、change、interval、isubmit、next_date、remove、run、submit、user_export、what;
大致介绍下这些过程: 1、broken()过程更新一个已提交的工作的状态,典型地是用来把一个已破工作标记为未破工作。这个过程有三个参数:job、broken与next_date。 procedure broken ( job IN binary_integer, broken IN boolean, next_date IN date := SYSDATE ) job参数是工作号,它在问题中唯一标识工作。 broken参数指示此工作是否将标记为破——true说明此工作将标记为破,而false说明此工作将标记为未破。 next_date参数指示在什么时候此工作将再次运行。此参数缺省值为当前日期和时间。
job如果由于某种原因未能成功执行,oracle将重试16次后,还未能成功执行,将被标记为broken,重新启动状态为broken的job,有如下两种方式; (1)利用dbms_job.run()立即执行该job begin dbms_job.run(:job) --该job为submit过程提交时返回的jobnumber或是去dba_jobs去查找对应job的编号 end;
(2)利用dbms_job.broken()重新将broken标记为false begin dbms_job.broken (:job, false, next_date) end;
2、change()过程用来改变指定job的设置。 这个过程有四个参数:job、what、next_date、interval。 procedure change ( job IN binary_integer, what IN varchar2, next_date IN date, interval IN varchar2 )
这里, job参数是一个整数值,它唯一标识此工作。 what参数是由此job运行的一块PL/SQL代码块。 next_date参数指示何时此job将被执行。 interval参数指示一个job重执行的频度。
上一篇:PLSQL设置中文下一篇:with as 用法
关闭
站长推荐 /7|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 ) GMT+8, 2024-9-20 02:27 , Processed in 0.022890 second(s), 17 queries . Powered by Discuz! X3.5 © 2001-2024 Discuz! Team. |