2011-05-09 11 views

Respuesta

9

Es imposible desconectarse de una base de datos Oracle sin comprometer o retroceder. Es posible que la aplicación del cliente se bloquee o se haya cancelado por la fuerza y ​​no haya podido cerrar la sesión dejando una sesión en el servidor que tiene algunos bloqueos. Si ese es el caso, el DBA tendría que matar esa sesión.

Si usted es el DBA y no estás seguro de lo que la sesión tiene que ser matado, puede ejecutar la siguiente consulta para obtener información acerca de las distintas sesiones que mantengan bloqueos que están bloqueando otras sesiones

SELECT ses.sid, ses.serial#, ses.username, ses.program, ses.osuser, ses.machine 
    FROM v$session ses, 
     dba_blockers blk 
WHERE blk.holding_session = ses.sid 

una vez que haya identificado qué sesión (s) para matar

ALTER SYSTEM KILL SESSION '<<sid>>, <<serial#>>' 
+0

Gracias @JustinCave por su respuesta. Para aclarar, si la sesión no se termina de manera explícita, ¿nunca terminará automáticamente? –

+1

@RussellSilva - Depende de lo que quiera decir con "automático". Si la aplicación del cliente falla, puede habilitar la detección de conexión muerta (DCD) en el servidor de la base de datos. Esto ocasionará que la base de datos haga ping periódicamente al cliente para determinar si aún está activo y matar la sesión si el cliente se ha bloqueado. Eso sucede relativamente rápido, sin embargo, por lo que no estaba relacionado con la pregunta original. Puede configurar Oracle para matar sesiones si están inactivas demasiado tiempo. En cualquiera de estos casos, la sesión se termina de forma explícita con un 'rollback', simplemente se termina por la base de datos. –

3

Si la sesión no retrotracción explícita, si el servidor de base de datos ya no puede llegar a un cliente de su actividad se deshace de forma automática, y luego lo hará finalizar la sesión.

El servidor a menudo es bastante feliz si el cliente no hace una solicitud durante horas. Vea si tiene SQLNET.EXPIRE_TIME establecido en cualquier cosa en el servidor. Si se trata de un valor distinto de cero, significa cuántos minutos esperará antes de verificar si la conexión de un cliente está muerta. Si es cero, no se comprobará y solo se tendrá en cuenta si descubre que el cliente está muerto al responder a una solicitud del cliente.

Además, la reversión puede llevar un tiempo. Si se ha realizado mucho trabajo, puede llevar horas. Todo lo que espere en esa sesión continuará esperando hasta que se complete esa reversión

Cuestiones relacionadas