Oracle JOB问题解决汇总

原创 2007年09月26日 09:41:00

一。job的运行频率设置

1.每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*60

2.Toad中提供的:

每天:trunc(sysdate+1)

每周:trunc(sysdate+7)

每月:trunc(sysdate+30)

每个星期日:next_day(trunc(sysdate),'SUNDAY')

每天6点:trunc(sysdate+1)+6/24

半个小时:sysdate+30/1440

3.每个小时的第15分钟运行,比如:8:15,9:15,10:15...:trunc(sysdate,'hh')+75/1440。原先我设置的是trunc(sysdate,'hh')+15/1440,发现居然不行。

二。JOB为什么不运行?

1.先来了解一下JOB的参数说明:与job相关的参数一个是job_queue_processes,这个是运行JOB时候所起的进程数,当然系统里面JOB大于这个数值后,就会有排队等候的,最小值是0,表示不运行JOB,最大值是36,在OS上对应的进程时SNPn,9i以后OS上管理JOB的进程叫CJQn。可以使用下面这个SQL确定目前有几个SNP/CJQ在运行。

select * from v$bgprocess,这个paddr不为空的snp/cjq进程就是目前空闲的进程,有的表示正在工作的进程。

另外一个是job_queue_interval,范围在1--3600之间,单位是秒,这个是唤醒JOB的process,因为每次snp运行完他就休息了,需要定期唤醒他,这个值不能太小,太小会影响数据库的性能。

2.诊断:先确定上面这两个参数设置是否正确,正确了继续向下

3.使用下面的SQL察看JOB的的broken,last_date和next_date,last_date是指最近一次job运行成功的时间,next_date是根据设置的频率计算的下次执行时间,根据这个信息就可以判断JOB上次是否正常,还可以判断下次的时间对不对

select * from dba_jobs

有时候我们发现他的next_date是4000年1月1日,说明job要不就是在running,要不就是break(broken=Y),如果还在running,可以继续向下,如果是broken,最好和当事人了解一下,确定不能broken,那就把broken值修改成N,SQL如下:

 declare

BEGIN

DBMS_JOB.BROKEN(<JOB_ID>,FALSE);

END;

4.使用下面的SQL查询是否JOB还在Running

select * from dba_jobs_running

当然,如果不应该run那么久的话,就要查原因了,一般的JOB running时会锁定相关的相关的资源,可以查看一下v$access和v$locked_object这两个view,如果发现其他进程锁定了与JOB相关的Object,那么就要把其他进程删除,有必要的话,把JOB的进程也删除,再重新跑。

5.如果上面都正常,但是JOB还不run,怎么办?那我们要考虑把JOB进程重启一次,防止是SNP进程死了造成JOB不跑,指令如下:

alter system set job_queue_processes=0 --关闭job进程,等待5--10秒钟

alter system set job_quene_processes=5 --恢复原来的值
6.Oracle的BUG

Oracle9i里面有一个BUG,当计数器到497天时,刚好达到它的最大值,再向计数就会变成-1,继续加一就变成0了,如果碰到这种情况就得重启数据库,我们这边有一个生产型的数据库版本是9205,就发生过这样一次问题,后来和用户约时间重启后就没问题了。但是其他的7345和8i的数据库没有发现这个问题。

7.那当然了,数据库上原因大抵如此,那还需要配合用户察看一下是否是程序本身的问题,比如处理的资料量大,或者网络速度慢等造成运行时过长,那就需要具体情况具体分析了。可以通过下面的SQL手工执行一下JOB看看:

declare

begin

dbms_job.run(<job>_ID)

end; 

Oracle JOB问题解决汇总

一。job的运行频率设置1.每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*602.Toad中提供的:每天:trunc(sysdate+1)每周...
  • compard
  • compard
  • 2007年09月17日 15:19
  • 3203

v$lock 和v$locked_object

3.1 系统视图介绍 为了监控Oracle系统中锁的状况,我们需要对几个系统视图有所了解: 3.1.1 v$lock视图 v$lock视图列出当前系统持有的或正在申请的所有锁...
  • zuixinnet
  • zuixinnet
  • 2013年04月07日 15:05
  • 1189

利用V$session,dba_objects和V$locked_Object找到谁给你的对象加了锁

V$locked_Object和dba_objects用object_id可以关联起来,找到dba_objects.object_name, V$session的Sid和V$locked_object...
  • shaozengwei
  • shaozengwei
  • 2013年12月23日 18:54
  • 1990

oracle中的job定时任务(原地址:http://blog.csdn.net/ysc1123/article/details/50593667)

oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。  一、查询系统中的job,可以查询视图 –相关视图 select * from dba_jobs; selec...
  • qq_35242910
  • qq_35242910
  • 2018年01月09日 13:49
  • 45

v$lockv和$locked_object的区别

v$lockv和$locked_object的区别  2013-12-24 v1.0 一、引言     工作中有次修改表sj_affair中的数据,需要禁用该表上的触发器。结果无法禁用,报如下错...
  • jackpk
  • jackpk
  • 2014年11月04日 13:36
  • 3076

oracle创建job并执行job及JOB问题解决汇总

1、首先job要在command命令下执行才有效  DECLARE X NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT ( job => X ,what =>...
  • admin1973
  • admin1973
  • 2017年05月02日 11:17
  • 1228

JOB问题解决汇总

一。job的运行频率设置  1.每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*60  2.Toad中提供的: 每天:trunc(sysdate...
  • chinmusam
  • chinmusam
  • 2009年12月23日 17:42
  • 580

oracle 锁表查询及解决、表字段查询

在进行批量对DML操作时程序竟然中断了,不再往下执行、查询一下某张表被锁住了,因此不再往下执行了 如果怀疑表被锁了,或者事务未被正常关闭,在Oracle数据库中我们可以通过以下语句进行查询获取相关信...
  • karali
  • karali
  • 2013年08月28日 13:05
  • 5840

Oracle JOB问题解决汇总

一。job的运行频率设置1.每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*602.Toad中提供的:每天:trunc(sysdate+1)每周...
  • liyingju
  • liyingju
  • 2007年09月26日 09:41
  • 1075

oracle job解决问题汇总

一。job的运行频率设置1.每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*602.Toad中提供的:每天:trunc(sysdate+1)每周...
  • yuff0408
  • yuff0408
  • 2010年01月14日 11:26
  • 304
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle JOB问题解决汇总
举报原因:
原因补充:

(最多只允许输入30个字)