sexta-feira, 28 de outubro de 2011

Oracle – Verificando e Matando sessões locadas

O script abaixo demonstra todos os objetos que estão locados


select  o.OBJECT_TYPE

      , o.object_name

      , L.SESSION_ID

      , S.SERIAL#

      , nvl(lockwait,'active') "Wait"

      , decode(l.locked_mode,

                  2, 'row share',

                  3, 'row exclusive',

                  4, 'share',

                  5, 'share row exclusive',

                  6, 'exclusive',  'unknown') "locked_mode"           

      , L.ORACLE_USERNAME

      , S.STATUS

      , S.OSUSER

      , S.MACHINE

      , S.PROGRAM

      , S.MODULE

      , S.LOGON_TIME

from  v$locked_object l

      , user_objects    o

      , v$session       s

where l.object_id = o.OBJECT_ID

  and s.sid       = l.session_id

O script abaixo cria um script para matar a sessão que está locada

SELECT '/* ' || o.object_type || ': ' || o.object_name || ' */ ' || CHR(13) || CHR(10) ||

       '  -- USER_NAME: ' || L.ORACLE_USERNAME || CHR(13) || CHR(10) ||

       '  -- STATUS   : ' || S.STATUS  || CHR(13) || CHR(10) ||

       '  -- OSUSER   : ' || S.OSUSER  || CHR(13) || CHR(10) ||

       '  -- MACHINE  : ' || S.MACHINE || CHR(13) || CHR(10) ||

       '  -- PROGRAM  : ' || S.PROGRAM || CHR(13) || CHR(10) ||

       'alter system disconnect session ''' || L.SESSION_ID || ',' ||  S.SERIAL# || ''' immediate;'

   from  v$locked_object l

         , user_objects    o

         , v$session       s

   where l.object_id = o.OBJECT_ID

     and s.sid       = l.session_id

Resultado

/* TABLE: TESTE */

  -- USER_NAME: USU_CLEIDE

  -- STATUS   : ACTIVE

  -- OSUSER   : BR03159

  -- MACHINE  : SAMERICA\BRSPL41633

  -- PROGRAM  : plsqldev.exe

alter system disconnect session '15,31974' immediate;

Para testar faça um insert em uma tabela sem “comitar” e execute o código.

Nenhum comentário :

Postar um comentário

Related Posts Plugin for WordPress, Blogger...