Saltar al contenido
WaitScope Entrar Solicitar acceso (por correo) Menú

Deadlocks: grafo, sesiones y diagnóstico

Cómo leer el deadlock grabado en el trace: quién esperaba a quién, las sesiones, la fila disputada, el SQL, la pila PL/SQL y el diagnóstico por el lock.

Se aplica a: Traces de deadlock y traces 10046 con ORA-00060

Cuando Oracle deshace una sentencia con ORA-00060, escribe en el trace de la sesión que recibió el error un bloque con quién esperaba a quién. El informe lee ese bloque y muestra el ciclo de espera, las sesiones, la fila disputada, el SQL y el diagnóstico por el tipo de lock.

Qué muestra la sección

La sección Deadlocks aparece cuando el trace tiene el bloque DEADLOCK DETECTED, en dos casos:

  • el trace solo de deadlock, sin las líneas del 10046 (cómo obtener el trace del deadlock): el informe tiene solo el Resumen, el Diagnóstico y los Deadlocks, y el Resumen muestra Deadlocks (ORA-00060), Detectado el, Sesiones involucradas y Diagnóstico;
  • el trace 10046 en el que hubo un deadlock en medio: la sección va después del Diagnóstico, y el resto del informe sigue normal.

El texto de arriba dice de dónde viene el dato: Del bloque DEADLOCK DETECTED que Oracle escribe en el trace de la sesión que recibió el ORA-00060: quién esperaba a quién, en qué fila y con qué sentencia.

Cada deadlock es una tarjeta Deadlock N, con la hora, la línea del trace y el tipo que Oracle escribe entre corchetes, como Transaction Deadlock. El Diagnóstico tiene un hallazgo de gravedad alta para cada uno de los primeros deadlocks del trace, con el enlace Ver deadlock.

El trace sintético del ejemplo no tiene deadlock, y el informe de ejemplo no tiene esta sección.

Cómo leerla

La tarjeta empieza por el diagnóstico, destacado, y por el ciclo de espera, a partir de la sesión que recibió el error: Sesión 12 espera a Sesión 34, que espera a la Sesión 12. Después vienen tres bloques.

Columnas del Grafo de espera
ColumnaQué indica
RecursoEl nombre del recurso disputado, como lo escribe Oracle, por ejemplo TX-00090004-00012345.
TipoEl tipo de lock: TX (transacción, fila), TM (tabla), UL (lock de la aplicación) y otros. En el TM, viene junto el object_id de la tabla, con enlace a la página del objeto en la consola.
Sesión en espera y Modo solicitadoLa sesión que pidió el lock y el modo que pidió, como X (exclusivo) o S (compartido).
Sesión que retiene y Modo retenidoLa sesión que tenía el lock y el modo en que lo tenía.

En Sesiones involucradas, cada sesión tiene un bloque con Usuario, PDB, Máquina, Programa, Módulo, Acción, Fila esperada y el SQL que ejecutaba. La que recibió el error lleva la marca recibió el ORA-00060. La Fila esperada trae el object_id, el archivo, el bloque y el slot de la fila disputada y, cuando el trace lo graba, el rowid.

Pila PL/SQL de la sesión que recibió el error muestra, con el sql_id de la sentencia, los objetos y las líneas del PL/SQL en ejecución, de la llamada más interna, donde estaba la sentencia, a la más externa. En la consola, cada objeto lleva a una página con el fragmento del código alrededor de la línea (página del objeto).

El diagnóstico por tipo de lock

Diagnóstico del deadlock por el tipo de lock
Cuando el grafo tieneTítulo en el informeQué suele ser
Lock TMDeadlock en bloqueo de tabla (TM)Clave foránea sin índice: al cambiar la clave o borrar la fila de la tabla padre, Oracle bloquea la tabla hija entera. Cree un índice en las columnas de la clave foránea de la tabla hija.
Lock ULDeadlock en bloqueo de usuario (UL)Locks pedidos por la aplicación con DBMS_LOCK, en distinto orden entre las sesiones.
Lock TX con espera en modo SDeadlock de transacción con espera en modo SDos sesiones insertando la misma clave única o primaria, falta de ITL en el bloque (INITRANS bajo) o índice bitmap bajo DML concurrente.
Solo locks TX en modo XDeadlock de fila (TX en modo X)Dos transacciones que cambian las mismas filas en órdenes distintos. La corrección está en la aplicación: cambiar las filas siempre en el mismo orden, bloquearlas antes con SELECT ... FOR UPDATE en el mismo orden o acortar la transacción.
Otros tiposDeadlock entre sesionesLocks de los tipos del grafo pedidos en distinto orden entre las sesiones.

Las filas valen en este orden: con un lock TM en el grafo, el diagnóstico es el de tabla, aunque haya TX. Todo diagnóstico termina recordando que Oracle deshizo solo la sentencia de la sesión que recibió el ORA-00060: su transacción sigue abierta hasta el commit o el rollback.

Solo la sesión que recibió el error escribe el bloque en su trace. El trace de las otras sesiones del ciclo no tiene el deadlock; lo que se sabe de ellas está en Sesiones involucradas.

Cuándo preocupa

  • Todo deadlock es un hallazgo de gravedad alta: se deshizo una sentencia, y la aplicación recibió el error.
  • Deadlocks que se repiten en los mismos objetos y sentencias: el orden de acceso de la aplicación es el problema, y la corrección está en el código (deadlock).
  • Deadlock en lock TM: compruebe los índices de las claves foráneas de la tabla hija en la página del objeto.

En el trace 10046, el error también aparece en Errores, en la tarjeta del ORA-00060, con el enlace Ver el deadlock.

Adónde ir después

  • Deadlock, para la causa y la solución.
  • Trace de deadlock, para encontrar y enviar el archivo.
  • Objetos, para las consultas de la tabla y del PL/SQL en la base de datos.

Actualizado el 29/10/2026. Informar un error en esta página