Pular para o conteúdo

Fóruns Banco de dados Oracle URGENTE – LOCK de sessões URGENTE – LOCK de sessões

#96826
antonioDBA
Participante

    Graça e Paz Juracy! Tudo bom?

    *Segue algumas orientações para evitar/eliminar esses lock’s:

    1º – Verifique junto ao desenvolvedor da ferramenta se o usuário do banco utilizado pela aplicação possui limite de tempo de transação configurado e se a instrução está comitando normalmente. Pois ao realizar esses ‘2 procedimentos’ o usuário da aplicação pode está realizando algum DML/Procedure que bloqueia tabelas/registros importantes para outras sessões, e se não for bem configurado o tempo limite de transação na aplicação/commit os dados alterados poderão correr o risco de não comitar em um tempo hábil e o oracle irá mantê-los bloqueados até o momento do commit. Gerando assim lock’s e até picos no banco.

    2º – Para localizar as últimas instruções de um determinado usuário do banco, você pode utilizar a view V$SQLAREA:

    SELECT SQL_TEXT “QUERY”,SQL_ID,PARSING_SCHEMA_NAME “USUARIO”,MODULE “PROGRAMA”,EXECUTIONS “EXECUÇÕES”
    ,FIRST_LOAD_TIME “PRIMEIRA CARGA”, LAST_LOAD_TIME “ULTIMA CARGA” FROM V$SQLAREA
    WHERE PARSING_SCHEMA_NAME = ‘NOME_DO_USUÁRIO’

    3º – Ou para localizar a query corrente de um usuário:
    SELECT T.SQL_TEXT
    FROM V$SQLTEXT T, V$SQLAREA A
    WHERE (A.ADDRESS, A.HASH_VALUE) IN
    (SELECT SQL_ADDRESS, SQL_HASH_VALUE
    FROM V$SESSION
    WHERE USERNAME LIKE ‘NOME_DO_USUARIO’)
    AND A.HASH_VALUE = T.HASH_VALUE
    ORDER BY T.PIECE

    4º – E para localizar o usuário que está gerando os locks:
    SELECT BLOCKING_INSTANCE,BLOCKING_SESSION,SID,SERIAL#,USERNAME,OSUSER,MACHINE
    FROM V$SESSION WHERE BLOCKING_SESSION IS NOT NULL


    Grande abraço,

    Fica com Deus!

    Antonio Campos