En primer lugar, select
La declaración nunca bloquea nada en Oracle, solo usa la última versión consistente disponible de los datos. No es un caso para select ... for update
que bloquea datos como update
desde Oracle 9i, pero no hay for update
cláusula en la consulta de la pregunta.
Resource Name process session holds waits process session holds waits
TM-000151a2-00000000 210 72 SX SSX 208 24 SX SSX
La sesión n.º 72 tiene un bloqueo de nivel de tabla (TM) con el tipo "Row Exclusive" (SX) y desea adquirir el bloqueo "Share Row Exclusive" (SSX) en la misma tabla. Esta sesión está bloqueada por la sesión n.º 24, que ya tiene un bloqueo a nivel de tabla del mismo tipo (SX) y espera mientras el bloqueo SSX esté disponible.
Resource Name process session holds waits process session holds waits
TM-000151a2-00000000 208 24 SX SSX 210 72 SX SSX
Esta (segunda fila) demuestra exactamente la misma situación, pero en la dirección opuesta:la sesión n.º 24 espera que el bloqueo SSX esté disponible, pero la sesión n.º 72 la bloquea, ya que tiene el bloqueo SX en la misma tabla.
Entonces, las sesiones n.º 24 y n.º 72 se bloquean entre sí:se produce un interbloqueo.
Ambos tipos de bloqueo (SX y SSX) son bloqueos de nivel de tabla.
Para comprender la situación, recomiendo leer este artículo de Franck Pachot.
A continuación se muestra una cita de este artículo, que es directamente relevante para su situación (tenga en cuenta que las abreviaturas SSX y SRX son equivalentes):
La integridad referencial también adquiere bloqueos TM. Por ejemplo, el problema común con las claves foráneas sin indexar conduce a bloqueos S en la tabla secundaria cuando emite una eliminación o actualización de la clave en la tabla principal. Esto se debe a que sin un índice, Oracle no tiene un solo recurso de nivel inferior que bloquear para evitar una inserción concurrente que pueda violar la integridad referencial.
Cuando las columnas de clave externa son las columnas principales en un índice regular, entonces la primera entrada de índice con el valor principal puede usarse como un único recurso y bloquearse con un TXlock de nivel de fila.
¿Y qué pasa si la integridad referencial tiene una cascada de eliminación? Además del modo S, existe la intención de actualizar filas en la tabla secundaria, como con el modo Fila X (RX). Aquí es donde se produce la fila compartida exclusiva (SRX):S+RX=SRX.
Entonces, la variante más probable es que la Sesión #72 y la Sesión #24 eliminen algunas filas en EMPLOYEE
tabla al mismo tiempo, y hay on delete cascade
restricción para EMPSAL_EMP_ID
junto con la ausencia de índice en EMPLOYEE_SALARY
tabla en la que EMPSAL_EMP_ID
columna listada primero.