分类: Oracle
2008-04-10 13:24:30
摘要:
本文通过一次Oracle Job任务异常案例诊断,分析其原因及解决过程,从内部揭示Oracle Job任务调度及内部计时机制。
问题及环境
接到研发人员报告,数据库定时任务未正常执行,导致某些操作失败。
开始介入处理该事故.
系统环境:
以下为引用的内容:
解决过程
首先介入检查数据库任务
以下为引用的内容:
发现JOB任务是都没有正常执行,最早一个应该在17-NOV-04 01:00:00执行。但是没有执行。
建立测试JOB
以下为引用的内容:
发现同样的,不执行。
但是通过dbms_job.run( |
进行恢复尝试
怀疑是CJQ0进程失效,首先设置JOB_QUEUE_PROCESSES为0,Oracle会杀掉CJQ0及相应job进程
以下为引用的内容:
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;
等2~3分钟,重新设置 以下为引用的内容:
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 5;
此时PMON会重起CJQ0进程 以下为引用的内容:
尝试重起数据库,这个必须在晚上进行:
以下为引用的内容:
CJQ0正常启动,但是Job仍然不执行。
没办法了...
继续研究...居然发现Oralce有这样一个bug 以下为引用的内容:
好么,原来是计时器溢出了,一检查我的主机:
以下为引用的内容:
刚好到事发时是497天多一点.ft.
安排重起主机系统..
这个问题够郁闷的,NND,谁曾想Oracle这都成...
Oracle最后声称:
fix made it into 9.2.0.6 patchset
在Solaris上的9206尚未发布...晕.
好了,就当是个经历吧,如果有问题非常不可思议的话,那么大胆怀疑Oracle吧,是Bug,可能就是Bug。
重起以后问题解决,状态如下:
以下为引用的内容:
|