22 de octubre de 2009

¿Porqué no es buena idea "matar" las sesiones cliente de Oracle?

Varias veces me he topado con el problema de que después de varios minutos de haberle indicado al Oracle que se apague, no lo hace.

Generalmente lo que hace un amdinistrador novel (como yo) es simplemente mandarle una señal 9 (SIGKILL) ó 15 (SIGTERM) al proceso cliente. Bueno, si hacemos esto, corremos el riesgo de que el proceso cliente no libere algún segmento de memoria compatida o bien algún semáforo que estén en uso al recibir las señales.

Si esto llega a ocurrir, seguramente tendrán un problema al tratar de reiniciar Oracle. Lo que hay que hacer se detalla en el siguiente ejemplo.

Primero, revisamos la información de la intercomunicación de procesos. Esto, con el comando ipcs.
Esto, nos arroja información sobre las colas de mensajes, segmentos ememoria compartida y semáforos en uso, así como el usuario y el grupo al que pertenecen. En especial nos concentraremos en una entrada de memoria compartida (la identificada por el ID 1), y el semáforo con ID 3.

En ambos casos, se ve que pertenecen al usuario oracle, lo cual es obviamente extraño pues en teroía ya no tenemos ningún proceso ejecutándose con los privilegios de este usuario. Un simple ps -aux | grep oracle | grep -v grep lo corroboraría.

Localizados los candidatos, procedemos a eliminarlos con el comando ipcrm, para el caso de la memoria compartida usamos el modificador -m y para borrar el semáforo usamos el modificador -s.

Hecho lo cual, podemos reiniciar Oracle sin mayor problema
> ipcs

IPC status from as of Fri Jul 31 15:40:20 ART 2009
T ID KEY MODE OWNER GROUP
Message Queues:
q 1 0x4200d966 --rw------- netuser netuser
q 0 0x4200d964 --rw------- netuser netuser
Shared Memory:
m 17 0x100baae --rw-rw-rw- root root
m 16 0x100dd9b --rw------- root root
m 15 0x4100b820 --rw-rw-rw- root root
m 14 0x4100d958 --rw-rw-rw- root root
m 13 0x4100d957 --rw-rw-rw- root root
m 5 0x4100b823 --rw-rw-rw- root root
m 1 0xb80c460 --rw-r----- oracle dba
Semaphores:
s 13 0x100babd --ra-ra-ra- root root
s 12 0x4100b820 --ra-ra-ra- root root
s 11 0x4100d958 --ra-ra-ra- root root
s 10 0x3e7 --ra-ra-ra- netuser netuser
s 9 0x6f --ra-ra-ra- netuser netuser
s 6 0x13d8483 --ra-r--r-- root root
s 3 0x5371951c --ra-r----- oracle dba

> ipcrm -s 3 & ipcrm -m 1

Espero que les sea de tanta utilidad como lo ha sido para mí

4 comentarios:

Malo hasta el hueso dijo...

Hola, espero me pueda ayudar con mi duda, requiero saber cual es el ancho de banda que se necesita una sesion del ERP de oracle utilizando el jinitiatior en la version 11 del EBS.

Alfredo Campos dijo...

Estimado Malo:

Lo siento. No conozco tanto de la herramienta.

Saluos!

Anónimo dijo...

Estimado muy buena solucion, pero tb existen usuarios windows. gracias =)

Alfredo Campos dijo...

Anónimo,estoy plenamente consciente de que hay usuarios en otros sistemas operativos. Sucede que trabajo con Oracle única y exclusivamente bajo solaris.

Supongo que deben existír para windows herramientas quete permitan ver los datos tanto de los procesos que se ejecutan, de una manera más detallada que el task manager; como de los segmentos de memoria compartida, semáforos, etc.

Saludos!