oracle中的job使用

主要的使用情景
定时在后台执行相关操作:如每天晚上0点将一张表的数据保存到另一张表中,2:定时备份数据库等。

begin
  sys.dbms_job.submit(job => :job,
                      what => 'insert into test(id) values(1);',
                      next_date => to_date('19-10-2012 14:51:11', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate+1/1440');
  commit;
end;
/

 以上语句从2012-10-19 15:51:11开始定时每分钟执行一次插入操作。

1、语法:

创建job,
使用Submit()过程,工作被正常地计划好。
这个过程有五个参数:job、what、next_date、interval与no_parse。

PROCEDURE Submit ( job       OUT binary_ineger,
                   What      IN  varchar2,
                   next_date IN  date,
                   interval  IN  varchar2,
                   no_parse  IN  booean:=FALSE) 

job 参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数是将被执行的PL/SQL代码块。
next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。

2、查看相关job信息

dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息。
如:
select * from dba_jobs 

3、运行JOB

说明:Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数:
SQL> begin
  2  dbms_job.run(:job);
  3  end;
  4  / 

 4、删除JOB

SQL> begin
  2  dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198
  3  end;
  4  / 

 如果指定是每天中午12点执行interval需要指定为 'trunc(sysdate)+1+12/24',如果仅仅指定interval为一天,这样当你手工用dbms_job.run(job)去运行一次 时,job每天的执行时间是会改变的,如果你想job每天在固定时间执行,可以参考上面的例子.

描述 INTERVAL参数值:
      每天午夜12点 'TRUNC(SYSDATE + 1)'
      每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
      每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
      每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
      每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
      每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE,       "SUNDAY"))) + (6×60+10)/(24×60)'

1:每分钟执行

Interval => TRUNC(sysdate,'mi') + 1/ (24*60)

扫描二维码关注公众号,回复: 1344745 查看本文章

Interval => sysdate+1/1440

2:每天定时执行

例如:每天的凌晨1点执行

Interval => TRUNC(sysdate) + 1 +1/ (24)

3:每周定时执行

例如:每周一凌晨1点执行

Interval => TRUNC(next_day(sysdate,'星期一'))+1/24

4:每月定时执行

例如:每月1日凌晨1点执行

Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24

5:每季度定时执行

例如每季度的第一天凌晨1点执行

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24

6:每半年定时执行

例如:每年7月1日和1月1日凌晨1点

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24

7:每年定时执行

例如:每年1月1日凌晨1点执行

Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

猜你喜欢

转载自zxf-noimp.iteye.com/blog/1701629
今日推荐