martes, 8 de enero de 2013

Reiniciando el pool de conexiones de Oracle 11g a lo bestia

La semana pasada me encontré con un problema en el entorno de desarrollo, el pool de conexiones de Oracle. El problema en concreto es que el pool se llena demasiado rápido y hay que estar reiniciando Oracle constantemente. Por defecto Oracle admite 20 conexiones de pool, aunque este valor se puede incrementar.

¿Pero que pasa si hay varias máquinas de desarrollo (tomcat + eclipse) apuntando al mismo oracle? Pues que aunque subamos el pool al final del día vuelve a estar lleno y es necesario vaciarlo.

La forma bonita sería entrar como SYSDBA y ejecutar:

SYS as SYSDBA:
SQL> EXEC DBMS_CONNECTION_POOL.stop_pool;
SQL> EXEC DBMS_CONNECTION_POOL.start_pool;

Pero claro, ¿qué ocurre si no tenemos el password del usuario? ¿ o si no están los listener necesarios configurados? ¿o simplemente si queremos hacerlo "de otra forma" pero que sea más rápida?.

Mi solución ha sido un poco bestia, como matar moscas a cañonazos, pero efectiva.

Viendo los procesos del sistema

ps aux|grep oracle

me di cuenta de había procesos con la nomenclatura oracle+SID, en mi caso oracleorcl.

ps aux|grep oraceorcl

Por tanto se pueden matar procesos a mano (kill -9) para liberar pool. Pero claro, 20 ó 30 procesos a mano es un poco pesado. Googleando un poco y combinando post nos sacamos de la manga el comando:

ps aux|grep oracleorcl| awk '{print $2}' |xargs kill –KILL

y matamos a todos de golpe :D

Lo malo es que tiramos las conexiones activas (vamos, que podemos joder al personal), así que hay que avisar a los compañeros antes, pero es un mal menor.

Y la pregunta clave, ¿todo esto para qué? Pues simplemente ganamos un poco te tiempo y ya no es necesario reiniciar Oracle, y porque me divirtió investigar este tema, por supuesto ;D

Por cierto que este problema de pools al parecer sólo se da en java, ya que el driver de oracle no libera las conexiones pilladas.

saludos

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...