Symptoms
今天接到客户电话,客户表示数据库中的job next_date小于sysdate
select * from all_jobs where what next_date < sysdate;
使用上述语句查询得出5条结果,也就是说这5个job都没有执行成功,最早的一个next_date为7月2号
Cause
由于一般job不执行很大一部分原因是数据库CJQ0进程异常,于是就查看了一下这个进程
ps -ef|grep ora_cjq0,没有查到对应的进程
很明显的确是CJQ0出了问题。不过客户每晚都会关闭应用和数据库做冷备份,怎么会启动数据库的时候没有带起来CJQ0进程呢?
查看了一下数据库alert日志,发现今天凌晨的备份数据库没有关闭成功
Active call for process 14837 user 'oracle' program
SHUTDOWN: waiting for active calls to complete.
查了一下进程14837,该进程是7月1号生成的。job在2号没有执行成功。很明显2号凌晨的数据库备份应该也是有问题的
查看2号alert日志,发现同样在关闭数据库时被14837进程阻塞。
Solution
1、关闭应用
2、kill -9 14837
3、手动重启数据库
4、启动应用
以下链接是eygle大师关于数据库job未能正常执行的一次案例,供大家参考
http://www.eygle.com/archives/2004/11/job_can_not_execute_auto.html