免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3696 | 回复: 8
打印 上一主题 下一主题

请教oracle job queue问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-09 10:11 |只看该作者 |倒序浏览
请教oracle job queue问题

各位大侠好:
这几天小弟一直很郁闷,为什么同样的存储过程,通过oracle job queue设置在不同的时间执行时,一个成功,而另一个不成功。

下面是job queue的设置情况:

select a.job,a.last_date,a.last_sec,a.next_date,a.next_sec,
a.broken,a.interval,a.failures,a.what,a.misc_env
from user_jobs a where a.job in (1, 22);

JOB:          22
LAST_DATE:    2007-8-7 8:12:42
LAST_SEC:     08:12:42
NEXT_DATE:    2007-8-9 7:00:00
NEXT_SEC:     07:00:00
BROKEN:       N
INTERVAL:     trunc(sysdate)+1+7/24
FAILURES:     0
WHAT:         stoptuanxianusers;
MISC_ENV:     0102000200000000

JOB:          1
LAST_DATE:    2007-8-8 21:30:06
LAST_SEC:     21:30:06
NEXT_DATE:    2007-8-9 21:30:00
NEXT_SEC:     21:30:00
BROKEN:       N
INTERVAL:     trunc(sysdate+1)+21/24+numtodsinterval(30,'MINUTE')
FAILURES:     0
WHAT:         stoptuanxianusers;
MISC_ENV:     0102000200000000

job1 和job22都是执行存储过程stoptuanxianusers,只不过job1定在每晚21:30执行,job22定在每天早上7:00,但根据这几天的观察,每晚21:30的job1正常执行,而每天早上7:00的job22没有一次执行过,user_jobs中的failures字段每也没值,这说明没有失败吧?那为什么不成功呢?是我设置的interval不对了?


[ 本帖最后由 quanjinzhang 于 2007-8-9 11:36 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-08-09 11:11 |只看该作者

回复 #1 quanjinzhang 的帖子

请各位不吝赐教啊!

论坛徽章:
0
3 [报告]
发表于 2007-08-09 11:55 |只看该作者
不会吧?没人知道吗?

论坛徽章:
0
4 [报告]
发表于 2007-08-09 14:02 |只看该作者
还是自己先分析分析吧:

job22的LAST_DATE为2007-8-7 8:12:42,LAST_SEC为08:12:42是因为:我看它不执行,所以只能手动执行了一次。执行时间为2007-8-7 8:12:42,所以就有了这样的job信息。

而:NEXT_DATE: 2007-8-9 7:00:00,NEXT_SEC: 07:00:00,是因为我昨天看它不执行,所以对job22执行了如下修改:
begin
dbms_job.next_date(22,trunc(sysdate)+1+7/24);
end;
/
begin
dbms_job.interval(22,'trunc(sysdate)+1+7/24');
end;
/
commit;

从昨天执行修改后的next_date和next_sec值看来,我设置的interval应该是正确的啊。

论坛徽章:
0
5 [报告]
发表于 2007-08-10 00:03 |只看该作者
自己发一个话题,又是自己在一回复,真是有意思了。

论坛徽章:
0
6 [报告]
发表于 2007-08-10 07:37 |只看该作者

回复 #1 quanjinzhang 的帖子

无奈,为了验证当前我对job22的设置没有错误,今天早上06:55之前,我执行了如下命令
variable job_no2 number;
begin
  dbms_job.submit(:job_no2,'stoptuanxianusers;',trunc(sysdate)+6/24+numtodsinterval(55,'MINUTE'),'trunc(sysdate)+1+6/24+numtodsinterval(55,''MINUTE'')');
end;
/
commit;
begin
  dbms_job.submit(:job_no2,'stoptuanxianusers;',trunc(sysdate)+7/24,'trunc(sysdate)+1+7/24');
end;
/
commit;
查询job信息显示如下:
JOB        41
LAST_DATE:null
LAST_SEC: null
NEXT_DATE:2007-8-10 6:55:00
NEXT_SEC: 06:55:00
BROKEN:   N
INTERVAL: trunc(sysdate)+1+6/24+numtodsinterval(55,'MINUTE')
FAILURES: null
WHAT:     stoptuanxianusers;
MISC_ENV: 0102000200000000

JOB        42
LAST_DATE:null
LAST_SEC: null
NEXT_DATE:2007-8-10 7:00
NEXT_SEC: 7:00:00
BROKEN:   N
INTERVAL: trunc(sysdate)+1+7/24
FAILURES: null
WHAT:      stoptuanxianusers;
MISC_ENV:  102000200000000
这些信息显示新job提交正确。

时间过了07:00之后,我再次查询job信息显示如下

JOB        41
LAST_DATE:2007-8-10 6:55:07
LAST_SEC: 06:55:07
NEXT_DATE:2007-8-11 6:55:00
NEXT_SEC: 06:55:00
BROKEN:   N
INTERVAL: trunc(sysdate)+1+6/24+numtodsinterval(55,'MINUTE')
FAILURES: 0
WHAT:     stoptuanxianusers;
MISC_ENV: 0102000200000000

JOB:      42
LAST_DATE:2007-8-10 7:00
LAST_SEC: 7:00:09
NEXT_DATE:2007-8-11 7:00
NEXT_SEC: 7:00:00
BROKEN:   N
INTERVAL: trunc(sysdate)+1+7/24
FAILURES: 0
WHAT:     stoptuanxianusers;
MISC_ENV: 102000200000000

从新设置任务的运行结果看来,新的job已经的在预定时间正确正常运行了!
那么为什么之前的job22不能正常执行呢?现在基本上可以判定为第一次提交job时对job的相关设置有误,导致第一次没有正常执行,之后修改也不起作有了。而这又给我们大家提出了另外一个问题:为什么第一次设置next_date和interval出错后,再通过dbms_job的next_date和interval对该job的参数进行重新设置后,没有起到实际作用呢?

论坛徽章:
0
7 [报告]
发表于 2007-08-10 12:12 |只看该作者
我觉得
NEXT_DATE:应该写trunc(sysdate)+1+7/24
INTERVAL:应该写'SYSDATE+1'
这样的间隔才是1天

论坛徽章:
0
8 [报告]
发表于 2007-08-10 12:46 |只看该作者

回复 #7 ferrywong 的帖子

那你就错了!这个错误之处确实让人难以察觉,因为
(1)job本身运行可能会有一定的延迟;
(2)job运行需要一定的时间,
而next_date的计算是在job运行完成之后计算的,这样的话,下次执行时间就不会是在07:00整了,为了达到每天都在07:00整开始执行,必须使用trunc()函数。

论坛徽章:
0
9 [报告]
发表于 2011-10-20 17:19 |只看该作者
过来学习这个函数了

西安人才网
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP