ORA-00020 maximum number of processes exceeded

Nivel del post no aplicainicialintermedioavanzado
SGBD oraclemysqlmariadbMySQL/MariaDBpostgresqlno aplica
Tiempo de lectura aproximado 3min

Uno de los errores más comunes que podemos encontrarnos a la hora de administrar una base de datos es el ORA-00020 Maximum number of processes (n) exceeded.

Esto se refiere a que se ha alcanzado el número máximo de procesos que se pueden conectar, al mismo tiempo, a la instancia de nuestra base de datos.

Si intentamos conectarnos como SYSDBA nos saldrá el siguiente mensaje de error:

bbdd1> sqlplus "/as sysdba"

ERROR:
ORA-00020: maximum number of processes (1000) exceeded
Enter user-name:

Como vemos, el mensaje es bastante claro. La solución que podemos llevar a cabo es la de matar procesos a nivel de sistema operativo para rebajar dicho número, dado que no nos permite acceder como sysdba y matarlos desde Oracle (a no ser, claro, que ya tengamos una sesión previa iniciada).

Lo primero será identificar los procesos. Para ello, podemos lanzar el comando ps, buscando como palabra clave oracle:

bbdd1> ps -fea | grep oracle
oracle    2008     1  0 16:59 ?        00:00:35 oraclehis1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
hisspd    3697     1  0 Jul27 ?        00:00:11 /clu_fs/his/oracle/product/11.2/bin/tnslsnr listener_extproc -inherit
oracle    4616     1  0 17:14 ?        00:00:25 oraclehis1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle    5121     1  0 17:17 ?        00:00:54 oraclehis1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
.
.

La salida de este comando, obviamente, es mucho más larga que lo citado arriba. Si queremos ves el total de procesos, bastará con concatenar el comando wc:

bbdd1> ps -fea | grep oracle | wc -l
1032

¡Ajá! 1032 procesos. Si recordamos el error de arriba, nos indicaba que el nº máximo de procesos es 1000. A partir de aquí, tenemos dos opciones: o bien matar un nº considerable para rebajar esos 1032 y comprobar cuales están encolados (ya que posiblemente se repitan) o matarlos todos de una tacada con el comando kill:

bbdd1> for i in `ps aux | grep "oraclehis1" | awk '{print $2}'`; do kill -9 $i; done

Bien, si tras eso volvemos a comprobar los procesos activos de oracle, veremos que solo quedan los propios del sistema y algunos que hayan levantado tras haber abortado los anteriores:

bbdd1> ps -fea | grep oracle | wc -l
47

Eso sí, debemos esperar unos minutos hasta que el sistema operativo haya matado por completo todos los procesos y la bbdd se entere de que ya no están vivos. Pero pasados esos minutos, podremos acceder sin problemas:

bbdd1> sqlplus "/as sysdba"

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> 

Y listo, otro ORA solventado con éxito.

Por cierto, es posible que al intentar conectarnos con algún agente externo (como la monitorización de Nagios o alguna aplicación) el error que aparezca sea un ORA-12537:

ORA-12537: TNS:connection closed (DBD ERROR: OCIServerAttach)

Aún así, recuerda que ese error es externo y te está avisando de que el listener ha cerrado (o mejor dicho, impedido) la conexión. El análisis final debes hacerlo siempre en la base de datos, que es donde aparecerá el ORA-00020.

En un futuro post explicaremos como aumentar el nº máximo de procesos de nuestra base de datos Oracle.

Cuéntame que te ha parecido este proceso en la caja de comentarios que tienes abajo. Y si ya compartes la entrada en redes sociales, me haces un gran favor para que más gente conozca este portal.

Recuerda que puedes suscribirte a la newsletter de Como ser DBA justo en el pie de página. Solo te mandaremos un correo para avisarte de que hemos publicado una nueva entrada.

Compartir entrada en RRSS

SUSCRÍBETE A NUESTRA NEWSLETTER

Si quieres estar al tanto de todas las nuevas publicaciones, suscríbete a esta lista de correo para recibir en tu mail los nuevos posts publicados. ¡Así no te pierdes nada!

pablo_delgado_avatar.jpg

Pablo Delgado Flores

Auténtico apasionado por la informática, especialmente por las bases de datos, administración de sistemas y desarrollo web.

Empecé a trabajar como técnico informático mucho antes de obtener una titulación oficial (sysadmin). Actualmente trabajo como DBA Oracle, aunque manejo otros motores como MySQL/MariaDB, PostgreSQL y Amazon Redshift.

También escribo sobre informática en general en mi web Pablo Delgado Flores, la terminal de Linux/Unix en #Sudosu y  desarrollo web con Woocoomerce/WordPress en DesarrolloWoo.

Subscribirse
Notificar de
guest
0 Comentarios
Comentarios en línea
Ver todos los comentarios