Problema
En el momento que los procesos de la base de datos llegan al 100%, esta deja de permitir nuevas sesione y/o conexiones a las instancias y se obtiene el siguiente error ORA-00020
ORA-00020: maximum number of processes () exceeded
Solucion ORA-00020
Lo primero que debemos hacer, es validar cual es el valor de nuestra variable
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
gcs_server_processes integer 0
global_txn_processes integer 1
job_queue_processes integer 20
log_archive_max_processes integer 4
processes integer 300
Asi mismo, tambien se puede utilizar el siguiente query para validar los parámetros:
set lines 222
col RESOURCE_NAME for a15
col LIMIT_VALUE for a15
select resource_name,current_utilization, limit_value
from v$resource_limit
where resource_name in ('processes') order by resource_name;
RESOURCE_NAME CURRENT_UTILIZATION LIMIT_VALUE
--------------- ------------------- ---------------
processes 47 300
Debemos considerar que si requerimos realizar el aumento al parametro ‘processes’, tambien deberíamos aumentar los parámetros ‘sessions’ y transactions. Una formula basica para determinar los valores de estos parámetros es la siguiente:
processes=x
sessions=x*1.1+5
transactions=sessions*1.1
Asi, para obtener el valor de los parámetros se realizaría de la siguiente manera:
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
gcs_server_processes integer 0
global_txn_processes integer 1
job_queue_processes integer 20
log_archive_max_processes integer 4
processes integer 300
SQL> show parameter sessions
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size integer 0
java_soft_sessionspace_limit integer 0
license_max_sessions integer 0
license_sessions_warning integer 0
sessions integer 97
shared_server_sessions integer
SQL> show parameter transactions
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
transactions integer 106
transactions_per_rollback_segment integer 5
O con el query
set lines 222
col RESOURCE_NAME for a15
col LIMIT_VALUE for a15
select resource_name,current_utilization, limit_value
from v$resource_limit
where resource_name in ('sessions','processes','transactions') order by resource_name;
RESOURCE_NAME CURRENT_UTILIZATION LIMIT_VALUE
--------------- ------------------- ---------------
processes 47 300
sessions 62 97
transactions 0 UNLIMITED
Como siempre, antes de modificar parámetros de inicialización, realizamos la creacion de un pile de respaldo y posterior a este los cambios requeridos
SQL> create pfile='$ORACLE_HOME/dbs/pfileCSOYUNDBA.ora' from spfile;
SQL> alter system set processes=500 scope=spfile;
SQL> alter system set sessions=555 scope=spfile;
SQL> alter system set transactions=610 scope=spfile;
Finalmente, tras realizar el cambio de los parámetros, necesitamos realizar un reinicio de la instancia.
SQL> shutdown immediate;
SQL> startup;
Te invito a seguir consultando más errores relacionados a Oracle dando clic aquí.