Pular para o conteúdo

Fóruns Banco de dados Oracle Rastrear Bloqueio de Tabelas Rastrear Bloqueio de Tabelas

#88173
jspaulonci
Participante

    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