Quando um registro está bloqueado, podemos saber qual deles está bloqueado?
Como posso obter o registro rowid ou outra informação?
Eu posso obter algumas informações neste 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(+)
Eu encontrei um método na web para obter rowid usando a função DBMS_ROWID.ROWID_CREATE()
Mas isso não parece funcionar.
V$LOCK
.Respostas:
Você não pode realmente listar todas as linhas que estão sendo bloqueadas por uma sessão. No entanto, uma vez que uma sessão está sendo bloqueada por outra, você pode descobrir qual sessão / linha está bloqueando-a.
O Oracle não mantém uma lista de bloqueios de linha individuais. Em vez disso, os bloqueios são registrados diretamente nas próprias linhas - pense nisso como uma coluna extra.
Você pode descobrir qual sessão adquiriu um bloqueio em um objeto através da
V$LOCK
visualização, mas isso listará apenas informações gerais, não no nível da linha.Com essa visualização, você também pode descobrir se uma sessão está sendo bloqueada por outra. Nesse caso, se uma sessão for bloqueada por outra, as informações da linha serão exibidas nas
V$SESSION
informações.Você pode recuperar o rowid, vamos criar um exemplo com 2 sessões:
A sessão 2 agora está aguardando a sessão 1. Podemos descobrir a linha de bloqueio com:
Para leitura adicional: uma descrição do processo por Tom Kyte .
fonte
Você pode encontrar todos os bloqueios de tabelas em um banco de dados Oracle executando a seguinte consulta
fonte