oracle job interval(关于时间误差)

dbms_job.submit(:job1,’insert_job_test;’,sysdate,’sysdate+1/1440′);

dbms_job.submit 语法

procedure submit (
job out binary_ineger,
what in varchar2,
next_date in date,
interval in varchar2,
no_parse in booean:=false
)

job                  这个值用来唯一标识一个工作。
what              被执行的pl/sql代码块。 一般是存储过程的名字,注意’;'不要忘了
next_date      何时将运行这个工作。
interval          何时这个工作将被重执行。
no_parse      此工作在提交时或执行时是否应进行语法分析——默认false, false指示本 pl/sql代码应立即进行语法分析。

–注意
1.next_date 通常不是真正的开始时间,真正的开始时间往往比next_date 晚几秒
原因:使用job中,oracle计算下次执行时间的sysdate是在当前job执行完成的时间,所以job会有这个误差。
绝对精确的还是用系统的吧 crontab(unix) 定时任务(windows)

._job_queue_interval
2.如果一个job的执行时间比较长(比如超过了interval),会不会出现多个同样的 job 同时执行呢?
不会

关于job 的时间误差
1.关于时间重叠的问题
比如我有两个JOB,都是在凌晨3点运行,那么如果其中一个在3点运行,那么另一个必须等待第一个JOB完成,然后才能执行。特别是有些象sysdate+1/24,这样每阁一小时运行的JOB就更容易冲突
2.即使没有时间重叠,ORACLE也是按job_queue_internal(通常是1分钟)的间隔进行检查JOB队列,这样3点钟的作业正好在3:00:45才检查到,那么就会在3:00:45才执行该job.我们知道ORACLE JOB如果第一次执行失败,那么按一定的时间间隔再次启动该JOB直到成功,如果直到运行16次还是失败,那么就中断该JOB,所以实际运行的时间会进行推迟。

3.采用”精确定时“函数(从前面可能看到,其实是很难实现精确定时执行JOB的)
我们可以采用如trunc(sysdate)+(1+24)/25或trunc(sysdate)+25/24。表示每天1点执行job,这样就不会受上次JOB延时的影响

5)
job_queue_processes与job的关系

SQL>show parameter job

在将此参数改为0的时候,dbms_job创建的job将不能在启动,
但DBMS_SCHEDULER创建的job不会受此影响,这些job在视图DBA_SCHEDULER_JOBS可查看。

SQL> alter system set job_queue_processes=n;(n>0)  job_queue_processes最大值为1000

其中interval的内容 参照下面的写法
每秒执行

trunc(sysdate+1/1440,’ss’)

1:每分钟执行

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值