Em busca de resultados

Gerando trace automaticamente…Olá galera!! Tudo bem aí? Aproveitaram bastante o dia dos pais? Curtiram seus filhos? Bem eu fiz os dois. Fiquei com o meu pai e com os meus filhos. E vou dizer para vocês não tem coisa melhor do que família. Aproveitem! Tudo na vida pode ser deixado para depois, TUDO, MENOS a sua família. Emprego você arruma outro; dinheiro, você trabalha hoje e ganha amanhã, se perdeu, corre atrás e recupera, e daí??!! É só dinheiro.
Agora o tempo que você deixar de aproveitar com a sua família, esse sim, jamais voltará atrás, e nem o melhor emprego, que te dê o maior salário, JAMAIS irá recompensar o tempo perdido. Pense sempre nisso e jamais foque sua meta onde sua família não poderá te acompanhar.
Não sou nenhum escritor de auto ajuda, embora goste de vários, não estou aqui para dar lição de moral em ninguém, quem sou eu para esta pretenção… rsrsrs  Apenas falo por experiência própria. Nada substitui a família.
Bem, opinião dada, embora digam que se conselho fosse bom ninguém dava, vendia; mas sou da opinião que se eu  estiver falando para uma multidão, auditório cheio e conseguir fazer com que pelo menos uma pessoa seja beneficiada com o que estou falando já me considero satisfeito, pois para uma pessoa eu fui a diferença. Pense nisso!!!

Calma, calma!!! não vou ficar apenas filosofando, vamos ao assunto de hoje.
Sabe quando você precisa detectar problemas no banco de dados, mas gostaria de pegar realmente tudo que o usuário executa desde a sua conexão? Sim, eu falei tudo!
Como já falamos em alguns posts atrás, uma das formas de se detectar problemas de lentidão, com aplicações, até mesmo acessos duvidosos é gerar um trace da sessão.

Um trace é um arquivo estilo texto que diz muito a respeito do que um usuário ou aplicação estão executando. Ele normalmente é o primeiro passo usado para se investigação de problemas.
Como já falei anteriormente, quando chegam para mim com aquela frase famosa: “Tá tudo lento e a culpa é do banco!!”  Eu já “starto” o processo de defesa prévia do banco de dados, com isso cabe a mim provar a inocência dele. A forma mais simples e comprovar por “A+B” que de toda a demora reclamada pelo usuário não é maior parte em banco de dados.
Hummm… Então nessa hora você pode pensar: “O trace é como um álibi pro banco de dados?”
Parabéns!!! Entendeu o post anterior e a idéia! SIM! Ele é o álibi. (às vezes a prova do crime também. rsrsrsrsrs)
Gerar um trace é algo bem simples, porém, algumas situações ocorrem e precisamos “pegar” a sessão desde o momento que ela inicia e não temos tempo de pegar SID, SERIAL# e então executar o trace, precisamos que a sessão já conecte com trace habilitado.

Então trago aqui uma solução bem simples porém muito eficiente, o trace iniciado via trigger de logon.
A trigger que trago abaixo identifica usuário e máquina (no exemplo usuário: ASAP e a máquina qualquer coisa que tenha “SV2” no nome).

Vamos a ela:

CREATE OR REPLACE TRIGGER SYS.trace_login
  AFTER LOGON ON DATABASE
DECLARE
  v_sid       NUMBER;
  v_serial    NUMBER;
  v_username  VARCHAR2(30);
  v_machine   VARCHAR2(64);
BEGIN
 SELECT USER INTO v_username    FROM DUAL;
 IF v_username = ‘ASAP
  THEN
     SELECT SID, serial#, machine
       INTO v_sid, v_serial, v_machine
       FROM v$session
      WHERE audsid = SYS_CONTEXT (‘USERENV’, ‘SESSIONID’);
     — Captura machine (nome máquina)
     —
     IF UPPER(v_machine) LIKE ‘%SV2%
   THEN
         SYS.dbms_support.start_trace_in_session (v_sid, v_serial, TRUE, TRUE);
     END IF;
  END IF;
END;
/

Esta trigger filtra por usuário, máquina e traz valores das binds. Porém como toda trigger, e principalmente as de logon, devem ser criadas e testadas primeiramente em ambiente de homologação ou algo do gênero.
Digo isso, pois, ao ser criada, caso apresente alguma falha na digitação por exemplo, poderá bloquear o logon e causar problemas. Caso isso ocorra a solução é bem simples: rapidamente exclua a trigger.

Outra observação importante: caso a package dbms_support não esteja instalada, para instalá-la basta rodar o script dbmssupp.sql que encontra-se em $ORACLE_HOME/admin/rdbms (conectado como SYS).

Boa dica não é mesmo?? Espero que tenham curtido!
Aproveitando, gostaria de convidar a todos para participarem da transmissão ao vivo que irei fazer dia 25/08 das 21:30 às 21:45, jogo rápido, apenas para comentar sobre as primeiras definições para o projeto DBA. Por favor peço que marquem presença no facebook: facebook.com/raulfdba (é raulfdba – com “f”) Te espero lá!
E se por acaso você ainda não conhece ou não leu a respeito do projeto DBA, te peço que visite o endereço: www.rauldba.com.br/projeto-dba

Sobre raul andrade

DBA e Instrutor Oracle, apaixonado pela minha família e por ensinar.
Esta entrada foi publicada em Talento quando Tá lento e marcada com a tag , , , , , . Adicione o link permanente aos seus favoritos.

Deixe uma resposta