周一在检查job的执行状态的时候,发现服务器上所有的job都没有定时执行,这时候第一反应是检查alterlog,也没有发现什么报错。
这时候手动执行一下job,手动执行也没什么问题,job里面的数据可以正常插入,存储过程也检查没什么问题。
后来一想,上周晚上做了一次emca的操作,当时emca特别慢,直至第二天八点的时候,emca还是一直显示在删除emca资料库,这个时候检查下数据库的状态,开始以为数据库是静默状态,检查发现不是。
后来检查下job参数;
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> show parameter job;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
job_queue_processes integer
0
SQL>
这里发现参数变为0,这里的参数为0的话,那么数据库所有的job都不能同时执行,这个值是设置同时允许运行job的数量。
因为是生产库,这里不能重启数据库,我直接修改job_queue_processes;
alter system set job_queue_processes =10 (这样可以直接在内存中修改,但是重启数据库后失效),因此继续执行
alter system set job_queue_processes =10 scope=spfile;这样重启数据库后也可以生效。
这里说明的就是,在做emca的时候,数据库会变成静默模式,静默模式的话数据库内的job都不会字段执行,job_queue_processes参数也会变成0,因此在emca结束前后,要检查这几个参数。一般在做数据库维护的时候才会静默模式,如修改字符集。维护完后也可以用下面命令禁用静默模式;
alter system disable restricted session;