domingo, 12 de fevereiro de 2012

Geração de Trace sem Mestre

Na análise de problemas de desempenho em processos Oracle, ainda é comum a necessidade de geração e análise de "trace files", arquivos que registram todas as ações de uma sessão no banco de dados. O problema é que muitas vezes a investigação tem que ser feita diretamente no ambiente de produção, onde geralmente existe todo um processo até que um DBA identifique a sessão, ative a geração de trace e finalmente retorne o arquivo processado. 

Felizmente, existe uma maneira de ligar a geração de TRACE já no script, sem necessidade de terceiros. Vejam o código abaixo. Depois de terminada a execução, existirá um arquivo de trace no servidor de banco de dados com a string “TRACE_DO_MEU_PROCESSO” no nome do arquivo.

Além de ser bem mais simples do que pedir a alguém para encontrar sua sessão, ligar o trace, esperar acabar, desligar o trace e processar a saída, este método ainda permite que você trabalhe em lote: execute todos os processos necessários e posteriormente solicite aos responsáveis os arquivos resultantes: “Favor executar o comando TKPROF em todos os arquivos de trace gerados ontem com 'PROC_FATURAMENTO' no nome do arquivo e enviar para o e-mail X”.

declare
  str varchar2(127);
begin
  --
  -- Ligando o Trace: coloque um texto no "identifier" para que seu arquivo seja encontrado depois:
  --
  str := 'alter session set tracefile_identifier=''TRACE_DO_MEU_PROCESSO''';
  execute immediate str;
  str := 'alter session set events ''10046 trace name context forever, level 8''';
  execute immediate str;
  --
  -- Fazendo o que eu tenho que fazer: aqui você chama o seu processo
  --
  for i in ( select * from user_objects ) loop
      null;
  end loop;
  --
  -- Desligando o Trace
  --
  str:= 'alter session set events ''10046 trace name context off''';
  execute immediate str;
  -- 
end;
/

Posteriormente, seus arquivos serão facilmente identificados no servidor:

[oracle@dbserver01 udump]$ ls -l
total 51672
-rw-r----- 1 oracle oinstall      874 Nov 25 20:11 perf01_ora_27175.trc
-rw-r----- 1 oracle oinstall     1136 Dec  4 19:15 perf01_ora_30466.trc
-rw-r----- 1 oracle oinstall    44883 Dec  4 19:37 perf01_ora_31275_TRACE_DO_MEU_PROCESSO.trc
-rw-r----- 1 oracle oinstall     1100 Dec  1 18:41 perf01_ora_32359.trc
-rw-r----- 1 oracle oinstall      621 Dec  1 18:41 perf01_ora_32365.trc
-rw-r----- 1 oracle oinstall      874 Dec  1 18:41 perf01_ora_32393.trc
-rw-r----- 1 oracle oinstall     4864 Dec  1 19:17 perf01_ora_32449.trc

Um comentário:

  1. Muito interessante. De fato poder gerar tudo com um unico script e sem intervenção manual de identificação de sessions dá um ganho de qualidade e agilidade no trabalho!

    ResponderExcluir