Cómo ver y resolver bloqueos de sesiones en Oracle
Un bloqueo ocurre cuando una sesión espera un recurso que otra retiene. Identificar quién bloquea a quién es el primer paso.
- 1
Identifica sesiones bloqueadas
v$session muestra directamente qué sesión está bloqueada y por cuál, con blocking_session.
SELECT sid, serial#, username, blocking_session, event, seconds_in_wait FROM v$session WHERE blocking_session IS NOT NULL; - 2
Revisa la cadena de bloqueos
Cuando hay varias sesiones encadenadas, esta consulta muestra la jerarquía completa.
SELECT * FROM v$session WHERE sid IN ( SELECT blocking_session FROM v$session WHERE blocking_session IS NOT NULL ); - 3
Averigua qué SQL retiene el bloqueo
Cruza la sesión bloqueadora con su SQL activo para entender la causa.
SELECT s.sid, s.serial#, q.sql_text FROM v$session s JOIN v$sql q ON s.sql_id = q.sql_id WHERE s.sid = &sid_bloqueadora; - 4
Mata la sesión solo si es necesario
Como último recurso, termina la sesión bloqueadora. Esto hace rollback de su transacción; confirma antes con el dueño del proceso.
ALTER SYSTEM KILL SESSION '145,28' IMMEDIATE;
// el error común
Matar la sesión equivocada revierte trabajo válido y no resuelve la causa. Muchos bloqueos vienen de un COMMIT olvidado en la aplicación, no de la base.
// cuándo conviene un experto
Si los bloqueos son recurrentes o afectan la operación, hay que atacar la raíz en el código o el diseño. En dba.mx diagnosticamos y resolvemos contención con techo cerrado.
Agenda un Escaneo — desde USD $550Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.