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.
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 fromas 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í