Saltar al contenido
DBAExperts
Oracle Diagnóstico

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. 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. 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. 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. 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 $550

Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.