Social Icons

14 de set. de 2018

Habilitando SQL Trace após logon do usuário




Olá pessoal,

    No artigo de hoje vou compartilhar com vocês uma trigger de logon do Oracle Database que criei recentemente para habilitar SQL Trace na sessão de um ou mais usuários do Banco de Dados.   


   A trigger de logon cujo código estou compartilhando foi criada a partir de um código enviado por um aluno da 10ª turma do treinamento Database Performance Tuning, que lecionei mês passado na Oramaster. Fiz nela apenas algumas alterações para facilitar a geração de SQL Trace a vários usuários do BD, e gerando um nome de arquivo um pouco mais intuitivo e fácil de localizar. Essa trigger é extremamente útil para investigarmos problemas de performance ou erros que ocorrem quando um determinado usuário está executando a aplicação. É mais fácil e rápido habilitar/configurar essa trigger antes do usuário se logar, do que procurar a sessão do usuário já conectada, e por fim, executar o pacote DBMS_MONITOR habilitando sql trace na sessão dele.

Imagem 01 - Trigger de logon para habilitar SQL Trace nas sessões de usuários

   Veja abaixo (ou na Imagem 01 acima) o código da trigger citada, que foi criada com o nome tr_turnon_traceperuser. Crie-a no schema de um usuário qualquer que tenha os seguintes privilégios: criar triggers de logon, executar a package DBMS_MONITOR e executar ALTER SESSION. Para implementá-la altere apenas o nome FÁBIO na 3ª linha de código, incluindo o(s) nome(s) do(s) usuário(s) que você deseja que em sua(s) sessão(ões) seja(m) gerado(s) o(s) sql trace(s):

create or replace trigger tr_turnon_traceperuser
  after logon on database
    WHEN ( USER IN ('FABIO'))
declare
 sqlstr_id varchar2(200);
 sid_number integer;
begin
--------------------------------------------------------------------------------
-- TRIGGER: tr_turnon_traceperuser
--------------------------------------------------------------------------------
-- Data: 26/08/2018
-- Nome: Fábio Prado (www.fabioprado.net)
-- Descrição: Trigger para habilitar sql trace estendido nas sessoes de um ou mais usuarios do bd. Os traces sao gerados com nome de arquivo seguindo o padrao: sqltrace_usuario_sid.trc.
--------------------------------------------------------------------------------
--      HISTÓRICO ALTERAÇÕES
--------------------------------------------------------------------------------
    -- recupera sid da sessao atual:
    select sys_context('userenv', 'sid') into sid_number from dual;

    -- configura/executa comando para customizar nome do sql trace contendo nome do usuario + sid:
  sqlstr_id := 'alter session set tracefile_identifier = sqltrace_' || user || '_' || to_char(sid_number);  
  execute immediate sqlstr_id;

  -- habilita sql trace na sessao do usuario:
  dbms_monitor.session_trace_enable(waits=>true, binds=>true);
end;



   Para aprender mais sobre SQL Traces sugiro a leitura do artigo Analisando SQL traces em Bancos de Dados Oracle - Parte 1.
  

0 comments:

Postar um comentário

 

LINKS ÚTEIS

Total de visualizações de página

Seguidores

Meu One Drive (antigo Sky Drive)