Cuando un registro está bloqueado, ¿podemos saber cuál está bloqueado?
¿Cómo puedo obtener el registro rowid o alguna otra información?
Puedo obtener información de este sql
SELECT c.ROW_WAIT_OBJ#,c.ROW_WAIT_FILE#,c.ROW_WAIT_BLOCK#,c.ROW_WAIT_ROW#
FROM v$locked_object a, dba_objects b, v$session c
WHERE a.object_id = b.object_id
AND a.SESSION_ID = c.sid(+)
Encontré un método en la web para obtener rowid usando la función DBMS_ROWID.ROWID_CREATE()
Pero no parece funcionar.
V$LOCK
.Respuestas:
Realmente no puede enumerar todas las filas que están bloqueadas por una sesión. Sin embargo, una vez que otra sesión está bloqueando una sesión , puede encontrar qué sesión / fila la está bloqueando.
Oracle no mantiene una lista de bloqueos de fila individuales. Por el contrario, los bloqueos se registran directamente dentro de las propias filas; piense en ello como una columna adicional.
Puede encontrar qué sesión ha adquirido un bloqueo en un objeto a través de la
V$LOCK
vista, pero esto solo mostrará información general, no a nivel de fila.Con esta vista también puede encontrar si una sesión está siendo bloqueada por otra. En ese caso, si otra sesión bloquea una sesión, la información de la fila se muestra en la
V$SESSION
información.Puede recuperar el rowid, construyamos un ejemplo con 2 sesiones:
La sesión 2 ahora está esperando la sesión 1. Podemos descubrir la fila de bloqueo con:
Para leer más: una descripción del proceso por Tom Kyte .
fuente
Puede encontrar todos los bloqueos de tablas en una base de datos Oracle ejecutando la siguiente consulta
fuente