Tuesday, 10 January 2017

ORA-12516, TNS: listener could not find available handler with matching protocol stack

Usually this situation happens when maximum number of processes exceeded. During that time listener will not establish the connection with database. To fix this Error either you have to kill the process to come down and login into the database and Increase the process count in database. 

When I tried to login into database 

sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue Jan 10 10:06:25 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

ERROR:
ORA-00020: maximum number of processes (XXXX) exceeded


When I tried to Connecting to database through SQL Developer getting below error 

ORA-12516, TNS: listener could not find available handler with matching protocol stack


Trouble Shoot:- 


Check Number of Process currently Exists on that database

 ps -ef | grep ORACLESID | grep -v grep | wc –l

If your database allowed to establish the connections try to login as sysdba and verify the process


select INST_ID,resource_name, current_utilization, max_utilization from gv$resource_limit where resource_name in ('processes','sessions');

   INST_ID RESOURCE_NAME                  CURRENT_UTILIZATION MAX_UTILIZATION
---------- ------------------------------ ------------------- ---------------
         2 processes                                      154             420
         2 sessions                                       168             441
         1 processes                                       67             138
         1 sessions                                        79             152





Solution:-

Sometimes you will not able to login into database due to max number of process of exceeded during that scenario you have to stop the database and start the database. 

If your database is RAC then you can stop and start the instances in rolling fashion. 


srvctl stop instance -d DEV -i DEV1

srvctl start instance -d DEV -i DEV1


Try to login now it will allow you to login into database. 


Now you can Increase the Process if you would like to avoid future occurrences. 


SQL> show parameter processes

NAME                TYPE        VALUE
------------------ ----------- -------
processes           integer     200

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

  COUNT(*)
----------
       199

Increase process:
processes=x
session=(1.5 * PROCESSES) + 22

 SQL> alter system set processes=300 scope=spfile Sid=’*’;


 Processes is not a dynamic parameter, so you need to restart database to take the effect.

No comments:

Post a Comment