30 septiembre 2018

Proceso en PL/SQL para matar sesiones en Oracle 11g RAC


Alguna que otra vez, en tu que hacer diario, necesitas eliminar una sesión en una instalación Oracle database 11g RAC y más tarde, recibes un mensaje en el  que no se puede cancelar la sesión debido a que la sesión está conectada a una instancia diferente. Te tienes que conectar a esa instancia y matarla

Comenzando con 11g, el fabricante incluyó el nombre de instancia en el comando de alterar el sistema (3º parámetro o @instance_id). Por lo tanto, para matar la sesión de bloqueo en cualquier nodo desde cualquier nodo que ejecutaría:



Si ejecutamos nuestro código tenemos la siguiente salida:

Ya puedes matar sesiones en un servidorRAC por instancia de este.




Otra cosa interesante que hacer con la "tabla" DUAL

Esta entrada en el blog es pequeña a modo de receta, veremos una aplicación que se puede usar con dual, aparte de las consabidas y ya habituales. A veces es bastante útil tener una consulta que siempre regresa a un cierto número de filas, imagina que te piden un informe que devuelva una fila para cada día del mes. El uso de DUAL y CONNECT BY le permite devolver tantas filas como sea necesario.
Por ejemplo, esta consulta devuelve una fila para cada día del mes.

En la siguiente imagen podemos ver como construir esta sentencia y su resultado en SQL DEVELOPER:



21 septiembre 2018

Contención en las secuencias en entornos Oracle RAC

Recientemente me encontré con un caso en el que seleccionar el siguiente valor de una secuencia causó problemas de contención en Oracle RAC. Mira esta captura de pantalla:

Los eventos de espera tendrán el mismo aspecto si se muestran en las pantallas de rendimiento de Enterprise Manager, que sí requieren una licencia para el Paquete de diagnóstico opcional.
Podemos ver altas esperas en el evento de espera de bloque de caché de fila, así como múltiples eventos de espera de caché global (todos comienzan con "gc").
El problema fue que la secuencia se creó con CACHE establecido en cero. Las secuencias en Oracle RAC con una configuración de caché demasiado baja verán eventos de espera como este. La solución es simple, aumente el tamaño de CACHE.