ksvcreate: Process(m000) creation failed 处理

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
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     500

过段时间查看下链接数:

SQL> select count(*) from v$session;

  COUNT(*)

----------

       267

267超过当时设定的150,所以正是由于Oracle达到了进程数限制,进而PMON无法创建m000进程,至此问题解决


上一篇:Java如何对HashMap按值进行排序--非String int 类型时


下一篇:【我发现!⚠】归纳几种对象中字符串“判空”花式报错 ““.equals(dto.getValue) 与 dto.getValue.equals(““) 以及 isNotBlank() 的爱恨情仇