确认job是否运行失败:
在dba_jobs中的字段FAILURES表示job运行失败的次数
或者在alert日志中也可以看到job运行失败的信息(当instance=0时,说明job没有指定在某个节点执行,oracle会让job在较为空闲的实例上执行,所以最好所有节点的alert日志都看下是否有关于ORA-12012、ORA-12545的job运行报错)
定位job的运行失败原因:
1.job_queue_processes
当job_queue_processes为0时,数据库不会启动job进程
参考命令:alter system set job_queue_processes=1000
SQL> show parameter proc
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
cell_offload_processing boolean TRUE
db_writer_processes integer 4
gcs_server_processes integer 3
global_txn_processes integer 1
job_queue_processes integer 1000
log_archive_max_processes integer 4
processes integer 5000
processor_group_name string
2.job是否broken
broken为y表示不会运行job
SQL> select job,broken from dba_jobs where broken='Y';
JOB B
---------- -
244 Y
366 Y
参考命令: exec dbms_job.broken(244,false);
3.查看日志
job运行失败会在alert中输出报错信息。
Errors in file /oracle/app/oracle/diag/rdbms/xxx1/xxx12/trace/xxx12_j000_54788548.trc:
ORA-12012: ִҵ 124
ORA-12545: ʧORA-06512: YxxxxB.P_xxx_M1", line 26
ORA-06512: ine 1
Errors in file /oracle/app/oracle/diag/rdbms/xxx1/xxx12/trace/xxx12_j002_60424558.trc:
ORA-12012: ִҵ 265
ORA-12545: ʧORA-06512: YxxxB.P_xxxxM3", line 73
比如上述例子中,job在运行到what中的第26行,73行出错。这就表示job本身并没有问题,已经成功调用,但是调用的内容有问题。
这就需要把what中的内容单独拿出来运行并一步步调试