JOB的interval直接用sysdate指定,如: sysdate + 5/1440,oracle自動生成的下一次的執行時間,會有幾秒的延遲.下面是一個測試:
1.創建表test_job_a,用於記錄JOB開始執行時間和結束時間
SQL> create table test_job_a (
2 start_date date,
3 end_date date );
2.創建JOB,JOB的首次執行時間指定在11:20:00,interval為5 mins
SQL> variable x number;
SQL> begin
2 dbms_job.submit ( job => :x,
3 what =>'declare
4 start_date date :=sysdate;
5 begin
6 for i in 1 .. 10 loop
7 dbms_lock.sleep(12);
8 end loop;
9 insert into test_job_a values (start_date, sysdate);
10 commit;
11 end;',
12 next_date => to_date('2010-01-16 11:20:00', 'yyyy-mm-dd hh24:mi:ss'),
13 interval => 'sysdate + 5/1440');
14 commit;
15* end;
3.時間查看記錄結果:
SQL> select * from test_job_a order by start_date;
START_DATE END_DATE
------------------------- -------------------------
2010-01-16 11:20:02 2010-01-16 11:22:02
2010-01-16 11:25:07 2010-01-16 11:27:07
2010-01-16 11:30:12 2010-01-16 11:32:12
2010-01-16 11:35:17 2010-01-16 11:37:17
2010-01-16 11:40:22 2010-01-16 11:42:22
2010-01-16 11:45:27 2010-01-16 11:47:27
2010-01-16 11:50:32 2010-01-16 11:52:32
2010-01-16 11:55:37 2010-01-16 11:57:37
4.原因:
(1) JOB的調用有時間延遲.
(2) 根據實際的執行時間來自動計算下一次的執行時間.
如:start_date : 2010-01-16 11:55:37,JOB執行結束後,可以通過查詢user_jobs視圖的next_date列到JOB的下次執行時間: 2010-01-16 12:00:37
SQL> select next_date from user_jobs;
NEXT_DATE
-------------------
2010-01-16 12:00:37
解決方法:
用trunc(sysdate, 'mi') + 5/1440指定時間間隔
把test_job_a表的內容清空,修改上面JOB的interval,再次記錄JOB的執行時間.
記錄結果如下:
SQL> select * from test_job_a order by start_date;
START_DATE END_DATE
------------------------- -------------------------
2010-01-16 14:00:04 2010-01-16 14:02:04
2010-01-16 14:05:04 2010-01-16 14:07:04
2010-01-16 14:10:04 2010-01-16 14:12:04
2010-01-16 14:15:04 2010-01-16 14:17:04
SQL> select next_date from user_jobs;
NEXT_DATE
-------------------
2010-01-16 14:10:00
SQL> /
NEXT_DATE
-------------------
2010-01-16 14:15:00
JOB interval寫法總結:
1day = 24hour= 1440mins
若JOB的執行時間間隔為分鐘:
trunc(sysdate,'mi') + n/1444 (0<n<60)
如每隔5mins執行一次: trunc(sysdate,'mi') + 5/1440
若JOB的執行時間間隔為小時:
trunc(sysdate, 'hh') + n/24[ + m/1440] (0<n<24, 0<m<60)
如每隔2小時,且執行時間為15mins執行一次: trunc(sysdate, 'hh') + 2/24 + 15/1440
若JOB的執行時間間隔為天:
trunc(sysdate) + n [+ m/24 [+ x/1440]]
如每天的8點15執行: trunc(sysdate) + 1 + 8/24 + 15/1440
其他情況就需要用到日期函數了:
1) 如每月5號的8點執行JOB: trunc(last_day(sysdate)) + 5 + 8/24
2) 如週一到週五的8點執行:
trunc(least(next_day(sysdate,2),
next_day(sysdate,3),
next_day(sysdate,4),
next_day(sysdate,5),
next_day(sysdate,6)
)) + 8/24
在oracle中1:代表周 一,2-7依次代表週二…週六
相关视频
相关阅读 工匠物语武器job等级 工匠物语武器属性表.net仿照51job网站地区选择效果编程语言排行榜2020年9月 TIOBE编程语言排行榜2020年最新版dnfJolin热舞趴活动怎么玩 dnfJolin热舞趴活动玩法攻略dnfJolin应援棒怎么得 dnfJolin应援棒每日上限几个DNF最爱Jolin称号怎么得 最爱Jolin称号一览dnfJolin应援棒怎么获得 dnfJolin应援棒有什么用dnfJolin团长在哪 dnfJolin团长位置一览
热门文章 滴滴和优步合并了吗 优思源黑体:改变锤子手机发布会看点预TK域名免费注册及解析
最新文章
鸿蒙3.0新功能特性介绍微信PC端内测版3.7.0发
win11更新失败怎么办 windows更新win11失败win11怎么退回win10系统 win11退回win10系统win11系统配置要求 win11系统安装配置详解Window 11系统有哪些变化 Window 11系统七大
人气排行 2020年放假安排时间表全年图 2020年法定节假2021年放假安排时间表全年图 2021年法定节假微信公众号怎么申请 微信公众号申请要钱吗zune怎么用?zune使用攻略!2014台式机装机配置推荐snmp协议在windows下的安装与配置2016猴年邮票多少钱一套 2016猴年邮票价格表微信朋友圈三天可见怎么破解 朋友圈仅展示三
查看所有0条评论>>