Chinaunix首页 | 论坛 | 博客
  • 博客访问: 34384
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-13 13:28
个人简介

沃布滋道.硕典莎

文章分类

全部博文(7)

文章存档

2020年(2)

2019年(5)

我的朋友

分类: Oracle

2019-09-24 11:00:36

oracle 在schedule这个新功能出现以前,定时任务都是靠dbms_jobs这个包来创建job实现的,作为DBA来说也会经常根据dba_jobs视图来查一些job相关信息,那关于dbms_jobs里边的几个时间不知大家是否有关注?
通过以下job的测试:
create or replace procedure pro_job_print
as
begin
dbms_output.put_line('系统时间:' || to_char(sysdate, 'dd-mm-yyyy hh24:mi:ss'));
insert into wk.JOB_TEST values(sysdate);
dbms_lock.sleep(40);
dbms_output.put_line('系统时间:' || to_char(sysdate, 'dd-mm-yyyy hh24:mi:ss'));
insert into wk.JOB_TEST values(sysdate);
end;
/




variable job2010 number;
begin
  dbms_job.submit(:job2010,'PRO_JOB_PRINT;',sysdate,'sysdate+2/1440');
  dbms_output.put_line(:job2010);
  end;
/

最终发现:
1.dba_jobs视图中的LAST_DATE,LAST_SEC显示的最后执行开始的时间,而不是结束的时间
2.last_date,last_sec,next_date,next_sec的更新却是在job执行完成以后才会体现在dba_jobs视图中的,也就是在job的执行过程中,我们从dba_jobs里边看不到job的开始执行时间的

另外,关于停掉正在执行的job的,通过alter system kill session的方法是没有用的,因为kill 掉执行job的session以后,dba_jobs里边的next_date时间是不会更新到下一个时间窗口,也就是next_date是小于当前时间的,那么job还是发起来的。有人想到那我直接broken掉这个job不就好了吗?不好意思,对于正在执行的job,broken是没有作用的。所以正确的做法应该是先改掉job_quene_process

阅读(1861) | 评论(0) | 转发(0) |
0

上一篇:oracle监听queuesize配置

下一篇:ORACLE flh

给主人留下些什么吧!~~