ksvcreate: Process(m000) creation failed 处理
同事打电话过来说有台数据库(10.2.0.4.0)连不上了,查看alert日志:
Tue Jun 17 14:55:04 2014 Process m000 died, see its trace file Tue Jun 17 14:55:04 2014 ksvcreate: Process(m000) creation failed Tue Jun 17 14:56:05 2014 Process m000 died, see its trace file Tue Jun 17 14:56:05 2014 ksvcreate: Process(m000) creation failed Tue Jun 17 14:57:06 2014 Process m000 died, see its trace file Tue Jun 17 14:57:06 2014 ksvcreate: Process(m000) creation failed |
从网上查了下资料
ksvcreate: Process creation failed错误信息一般在Oracle实例在创建一些辅助后台进程(如mmon的子进程m00x或者并行子进程p00x等)时出现进程启动失败时出现,而造成该错误的可能性有多种,包括Oracle实例资源不足、操作系统资源不足等等。
其中较为常见的是实例instance的process使用达到上限,可以通过查询v$resource_limit视图来了解实例生命周期内是否发生过process总数暴满的情况:
[oracle@xxx ~]$ sqlplus / as sysdba SQL> select * from v$resource_limit; ERROR at line 1: ORA-01012: not logged on |
执行查询报错,还可以从操作系统上查看LOCAL=NO的连接数,看有没有超过最大链接数
ps -ef|grep LOCAL|wc –l 149 SQL> show parameter process ERROR at line 1: ORA-01012: not logged on 修改参数也报相同的错误 |
如不急的话,可以先停掉监听,等链接数降下来后,再查询、修改
因比较着急,先重启下数据库
SQL> conn / as sysdba Connected to an idle instance. SQL> shutdown immediate ORA-24324: service handle not initialized ORA-24323: value not allowed ORA-00020: maximum number of processes (%s) exceeded |
正常关闭不了,只能强关了
SQL> shutdown abort ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 2097152000 bytes Fixed Size 2085224 bytes Variable Size 1207963288 bytes Database Buffers 872415232 bytes Redo Buffers 14688256 bytes Database mounted. Database opened. |
shutdown abort后,启动时会自动进行实例恢复
重启后,可以正常登了
查看
SQL> select * from v$resource_limit; RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE ------------------------------ ------------------- --------------- -------------------- -------------------- processes 55 58 150 150 sessions 57 61 170 170 enqueue_locks 22 34 2380 2380 enqueue_resources 22 24 968 UNLIMITED |
从上面结果输出来看,很可能是processes总数达到上限导致了新的后台辅助进程创建失败
修改下processes参数
SQL> show parameter process NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 0 db_writer_processes integer 1 gcs_server_processes integer 0 job_queue_processes integer 10 log_archive_max_processes integer 2 processes integer 150 链接数只有150 确实有点少了,改下参数 SQL> alter system set processes=500 scope=spfile; System altered. 重启下数据库,然后查看 SQL> show parameter process |
过段时间查看下链接数:
SQL> select count(*) from v$session; COUNT(*) ---------- 267 |
267超过当时设定的150,所以正是由于Oracle达到了进程数限制,进而PMON无法创建m000进程,至此问题解决