ORA-00060: Deadlock detected while waiting for resource (deadlock detectado al esperar un recurso)
Oracle¿Qué significa?
Dos o más sesiones están en deadlock, cada una esperando un recurso que mantiene la otra. Oracle detecta el ciclo, elige una víctima y revierte la sentencia de esa sesión.
¿Por qué ocurre?
Bloqueos de fila adquiridos en distinto orden, las mismas filas actualizadas de forma cruzada por transacciones diferentes, bloqueos de tabla en actualizaciones de la tabla padre causados por claves foráneas sin índice, o DML concurrente sobre un índice bitmap.
Cómo solucionarlo
Examine el archivo de traza (grafo) del deadlock referenciado en el alert log para encontrar las sentencias SQL y filas en conflicto. En la aplicación, acceda siempre a tablas/filas en el mismo orden. Indexe las columnas de claves foráneas (las FK sin índice son una causa clásica de deadlock). Mantenga las transacciones cortas y revise la frecuencia de commit. Capture la transacción en deadlock en la aplicación y reinténtela.
Más entradas de este motor
- ORA-00001Unique constraint violated (violación de restricción única)
- ORA-00054Resource busy and acquire with NOWAIT specified or timeout expired (recurso ocupado; NOWAIT especificado o tiempo de espera agotado)
- ORA-01017Invalid username/password; logon denied (usuario/contraseña no válidos; inicio de sesión denegado)
- ORA-01555Snapshot too old: rollback segment number too small (snapshot demasiado antiguo)
- ORA-01652Unable to extend temp segment by N in tablespace (no se puede extender el segmento temporal en el tablespace)
- ORA-04031Unable to allocate N bytes of shared memory (no se pueden asignar N bytes de memoria compartida)