Pular para o conteúdo
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #79546
    souza
    Participante

      Como faço para saber se existe algum usuário ou tabela em lock !? E se tiver como faço para desbloquear ?

      #79548
      JamirJr
      Participante

        Achei este script em outro forum:

        Select sid, serial#, username, osuser, TO_CHAR (logon_time, ‘dd/mm/yyyy hh24:mi:ss’) logon,
        TO_CHAR (TRUNC (last_call_et/3600), ’99’) || ‘:’ ||
        TO_CHAR ((last_call_et/60)-(TRUNC (last_call_et/3600)*60), ‘09.99’)||’ Horas’ tempo_parado,
        status, machine, terminal, program, module
        From v$session
        Where username is not null
        Order by last_call_et desc;

        8)

        #79551
        souza
        Participante

          Fiz o select e funcionou, porém tenho mais dúvidas. O resultado será LOCK na coluna status se o usuário estiver bloqueando alguma coisa ?

          Como faço para matar o cara que estiver bloqueando ?

          E este select traz o lock a nível de usuário…teria algum que traz a nível de tabela ?

          #79554
          Marcio68Almeida
          Participante

            Para identificar o LOCK
            Select s.sid, s.serial#, o.owner, s.lockwait, s.username, s.osuser, s.terminal, s.status, l.id2,
            decode (NVL (l.id2, 0), 0, o.object_name, 'Trans-' || to_char (l.id1)) object_name,
            decode (NVL (l.type, '.'), 'BL', 'Buffer hash table instance', 'CF', 'Control file schema global enqueue', 'CU', 'Cursor bind',
            'CI', 'Cross-instance function invocation instance','DF', 'Data file instance', 'JQ', 'Job queue',
            'DL', 'Direct loader parallel index create', 'TX', 'Transaction enqueue', 'UL', 'User supplied',
            'DM', 'Mount/startup db primary/secondary instance', 'DR', 'Distributed recovery process',
            'DX', 'Distributed transaction entry', 'TM', 'DML enqueue', l.type) type,
            decode (NVL (l.lmode, 0), 0, '--Waiting--', 1, 'Null', 2, 'Row Share', 3, 'Row Excl', 4, 'Share', 5, 'Sha Row Exc', 6, 'Exclusive', 'Other') "Lock Mode",
            decode (NVL (l.request, 0), 0, ' - ', 1, 'Null', 2, 'Row Share', 3, 'Row Excl', 4, 'Share', 5, 'Sha Row Exc', 6, 'Exclusive', 'Other') "Req Mode"
            From v$lock l, v$session s, dba_objects o
            Where s.sid = l.sid (+)
            and l.id1 = o.object_id (+)
            and s.username is not null
            Order by l.id2, s.sid

            Para matar a sessão…
            alter system kill session 's.sid,s.serial#'

            #79562
            souza
            Participante

              Obrigado. Porém tenho a seguinte situação. Toda vez que alguém faz alguma inserção o sistema bloqueia a tabela com o comando

              LOCK TABLE tabela IN EXCLUSIVE MODE NOWAIT;

              e depois desbloqueia. Eu quero conseguir monitorar isso aí, pois às vezes algum usuário fica pendurado numa transação e não dá commit . Aí essa table fica bloqueada e ninguém consegue trabalhar.

              Gostaria de saber se existe como monitorar esses locks de tabelas

              #79567
              Marcio68Almeida
              Participante

                para ficar monitorando seria necessário deixar um processo rodando para avaliar o momento em que a tabela foi restringida, o que não é uma opção viável…
                o correto é corrigir o seu aplicativo para que só “lock” a tabela quando ela for atualizada, alias, não se deve restringir toda a tabela e sim somente a linha que está sendo modificada…

                #79570
                souza
                Participante

                  Sim Sim, é só a linha que estou bloqueando . MAs se por exemplo ela não destravar eu queria saber quem está bloqueando para poder matar.

                Visualizando 7 posts - 1 até 7 (de 7 do total)
                • Você deve fazer login para responder a este tópico.