Bug en el listener de Oracle en Windows

GPS Open Source News

¡Hola a todos! Esta semana vamos a ver un problema muy común y sencillo de resolver. Se trata de un bug en los ficheros de traza de Oracle cuando estos tienen más de 4 GB.

Este tipo de error, provoca indisponibilidad en el servicio por lo que debemos solucionarla cuanto antes para que impacte lo mínimo posible. ¡AL LÍO!

Partimos del siguiente escenario:

Volvemos a la oficina, después de una fructífera noche de descanso, teléfono en mano recibimos una llamada del cliente, no podemos conectar a nuestra BBDD desde máquina remota. 😱😱😱

Nos conectamos a la máquina, y vemos que cuando intentamos conectar al listener, vemos que se eterniza la espera.🤔

Por esto, entramos en la utilidad LSNRCTL y ejecutamos un status:

LSNRCTL> status listener
 Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname>)   (PORT=1521)))
   TNS-12547: TNS:lost contact
     TNS-12560: TNS:protocol adapter error
       TNS-00517: Lost contact
         64-bit Windows Error: 54: Unknown error 

Además, en el log podemos ver los siguientes errores:

 TNS-12518: TNS:listener could not hand off client connection
   TNS-12571: TNS:packet writer failure
      TNS-12560: TNS:protocol adapter error
        TNS-00530: Protocol adapter error
          64-bit Windows Error: 58: Unknown error 

En otras palabras, el estado o los servicios de lsnrctl no responden.

Todo esto se produce por un BUG en el que a partir de los 4GB de fichero de trazas del LISTENER, la conexión se ralentiza hasta dejar de funcionar. A Windows le cuesta mucho manejar este tamaño para ficheros de texto plano por lo que deja los servicios no operativos.

¿Cómo solucionamos este bug?

Para solucionarlo vamos a los servicios de Oracle en Windows y paramos manualmente el listener.

Bug en el listener de Oracle

Después vamos a la ruta del log

$ORACLE_BASE\diag\tnslsnr\<hostname>\listener\trace\<listener_name>.log 

Y borramos el fichero directamente (Oracle lo creará cuando intente escribir de nuevo).

Además, tenemos otra opción, hacer que LSNRCTL no use logfile.

 LSNRCTL>set current_listener <listener_name>
 LSNRCTL>set log_status OFF
 LSNRCTL>save_config 

Si quieres estar al día de todas las entradas que publiquemos, tan solo tienes que suscribirte a nuestro blog. Sólo te enviaremos un único email al mes y podrás darte de baja cuando quieras sin ningún problema.

Esperemos que esta entrada os haya sido de utilidad. Nos vemos en próximas entradas.

Ver más problemas y soluciones en: https://www.gpsos.es/2018/03/creacion-fichero-tnsnames/

Documentación oficial: https://support.oracle.com/knowledge/Oracle%20Database%20Products/1319797_1.html