› Fóruns › Banco de dados Oracle › Rastrear Bloqueio de Tabelas › Rastrear Bloqueio de Tabelas
Bom dia Romulo, já algumas situações peculiares referente a esses assuntos, bom…vamos lá
Eu começaria com o seguinte comando,
select a.command,
a.sid,
a.serial#,
a.username,
b.owner,
a.status,
a.osuser,
b.object,
b.type,
a.sql_address
from V$session a, v$access b
where a.sid = b.sid
— and b.sid in (267)
and b.object in (‘NOME_DA_TABELA’)
Execute essa query (sugiro com DBA), você saberá quais sessões estão utilizando esta tabela, isso não quer dizer que ela estará bloqueada.
(se você está em RAC, rode essa query para cada sessão, eu ainda não adequei todas a minha querys para RAC)
Rode essa query se você não usa RAC
select distinct (a.holding_session) SID_BLOQUEANDO,
a.waiting_session SID_EM_ESPERA,
c.username OWNER,
c.machine MAQUINA,
c.program APLICACAO,
b.seconds_in_wait / 60 TEMPO_BLOQUEIO
from dba_waiters a,
v$session_wait b,
v$session c
where a.waiting_session = b.sid
and b.sid = c.sid
and a.mode_held like ‘Exclusive’
Nessa query vc descobrirá se tem sessões aguardando outras sessões liberarem recursos
Esse query , tem a mesa funcionalidade porem execute-a se seu ambiente é RAC
select to_char(a.inst_id,’9′) “INST ESPERANDO”,
a.sid as “SID ESPERANDO”,
substr(a.username,1,15) usr_blk,
substr(a.blocking_session_status,1,10) status,
to_char(a.blocking_instance,’9′) “INST BLOQUEANDO”,
a.blocking_session AS “SID BLOQUEANDO”,
(select substr(username,1,15) from gv$session
where sid = a.blocking_session
and inst_id = a.blocking_instance) usr
from gv$session a
where a.blocking_session is not null
Não esqueça de postar o resultado
Abraços
João Paulo Spaulonci