Sesiones en la Base de Datos - Status=KILLED, Server=PSEUDO y SPID=NULL

Manuel Acosta
25 de Junio del 2010
Muy buen día para todos y muchas gracias de antemano por la ayuda que puedan prestarme.

- 64Bit
- Sistema Operativo Oracle Enterprise Linux R.4 U.5
- Base de Datos 10.2.0.4
- Application Server 10.1.2.3

Lo que a continuación explico no ocurre todo el tiempo, pero ocurre.

Al ejecutar la sentencia "alter system [disconnect | kill] session 999,999 [immediate];" para poder matar una sesión de un usuario cualquiera por un motivo X en la base de datos; en algunos casos esta sesión queda con Status = KILLED y Server = PSEUDO y simplemente se mantienen en la base de datos y no tengo manera de matarlas, esto trae como consecuencia entre otras, que el usuario dueño de esta sesión no pueda ingresar nuevamente a la base de datos por restricción en el profile (sesiones simultaneas), revisando por internet me hablan de matar el proceso por el sistema operativo, pero esto tampoco es posible, ya que el proceso que identificaría esta(s) sesión(es) es SPID=NULL, es decir ya no existe como proceso del sistema operativo. Como dije antes no tengo manera de deshacerme de estas sesiones.

Por otro lado, también trae como consecuencia que el proceso "ORA_PMON_XXXXX" sube al 100% de uso del procesador y la única forma de liberarme de esto es bajar y subir la base de datos.

Como dato les informo, las conexiones de los usuarios a la base de datos, son de modo DEDICATED y vienen desde un servidor de Application Server.

¿Como puedo corregir esto?

Que me pueden decir al respecto:
- Existe alguna parametrización (sistema operativo y/o base de datos) para evitar esto.
- Se puede pensar en un bug??
-??

Juan Carlos
28 de Junio del 2010
En ocasiones el SPID desaparece.

Antes de hacer el kill session tira esta query, apuntas el SPID y ya podrás hacer el kill -9

select p.SPID, s.SID, s.SERIAL#, s.USERNAME, s.LOCKWAIT, s.STATUS,
s.OSUSER, s.MACHINE, s.TERMINAL, s.PROGRAM, s.LOGON_TIME
from v$session s, v$process p
where p.addr(+)=s.paddr
order by SID

Manuel Acosta
28 de Junio del 2010
Gracias por tu respuesta,

Tu lo que me quieres decir es, que debo matar el proceso a nivel del sistema operativo antes de matar la sesión en la base de datos??
Justamente en como comienza tu respuesta, esta mi duda. "En ocasiones el SPID desaparece."
Ahora bien, que debo hacer cuando desaparece el SPID al ejecutar el comando "alter system kill session 999.9999 [immediate];"???

Juan Carlos
29 de Junio del 2010
No, lo has entendido mal.

Antes de hacer el kill session, tiras esa query y apunta en un papel el SPID.

Haces el kill session, esperas un par de minutos a ver si desaparece esa sesion y si sigue ahí, haces el kill -9 al SPID que has apuntado antes.

Manuel Acosta
30 de Junio del 2010
Ok. amigo Juan Carlos.

Por lo que he podido ver, no lo creo factible o posible.
Te explico:
Cuando no me queda otra y tengo que bajar la BD para poder librarme de estas sesiones como lo expuse en la pregunta, también bajo el servidor de IAS y bajo el LISTENER, para evitar conexiones de ningun tipo.
Para el momento que voy a ejecutar el SHUTDOWN en el servidor, aparte de los procesos propios de la BD solo existe el proceso asociado a mi conexión en el S.O.(esto lo he confirmado), sin embargo, las sesiones que previamente estaban Status = KILLED, Server = PSEUDO y SPID=NULL siguen estando en la BD, es decir, el proceso si muere a nivel del S.O.

Sin embargo para la próxima ocasión que tenga que ejecutar el kill session, aplicare lo que me indicas.

Muchas gracias y sigo estando a la atención de la ayuda que puedan brindarme

Juan Carlos
01 de Julio del 2010
Es que es una politica muy mala eso de que para terminar una sesion que se ha quedado " zombi " tengas que bajar la BBDD.

Para eso está el KILL SESSION + KILL-9 . Imaginate en un on-line con 200 usuarios trabajando que por una mala programacion y malas pruebas en test, se te queden " zombis " los procesos.... ¿ vas a estar todo el dia tirando la BBDD ?...........

En la 11g han sacado una nueva feature que combina el KILL SESSION con el KILL-9 , vamos que te mata el proceso a nivel de BBDD y a la vez a nivel de SO, con lo que matas dos pajaros de un tiro.