terça-feira, 26 de abril de 2011

Ativando o SQL Trace numa sessão do usuário

Sempre que um DBA necessita ativar o “trace” para analisar a execução da aplicação ou até mesmo um script muitas vezes ele precisa habilitar os parâmetros, que servirão para todo o banco de dados.

Os parâmetros a serem ativados são:

SQL_TRACE           = TRUE
USER_DUMP_DEST      = <caminho_onde_sera_gravado_o_arquivo_trace>
MAX_DUMP_FILE_SIZE  = <“opcional”, determina o tamanho do arquivo de “dump”>
TIMED_STATISTICS    = TRUE

Porém muitas vezes não existe a necessidade de se habilitar o “trace” para todo o banco de dados. Quando na verdade desejaria-se verificar um ou outro usuário. Então como proceder ?

Para utilizar esse mecanismo, deve-se utilizar a package DBMS_SYSTEM. Nesta package existe uma procedure chamada SQL_TRACE_IN_SESSION, que permite habilitar/desabilitar o “trace”.

Nota: Para utilizar a package DBMS_SYSTEM, é necessário conectar-se no banco de dados utilizando o usuário SYS e dar acesso de execução para um usuário DBA.

Abaixo estão descritos os passos de como proceder para a ativação do “trace” em uma sessão:

1.   Alterar o parâmetro “timed_statistics” no banco de dados:

Usar:

sqlplus system/manager
SQL> alter system set timed_statistics=true;


2.   Na sequência verificar qual a sessão que terá o “trace” ativado, para fazê-lo execute o script abaixo:

SQL> select sid, serial#, username
  2  from v$session;

       SID    SERIAL# USERNAME
---------- ---------- ---------------
         1          1
         2          1
         3          1
         4          1
         5          1
         6          1
         7       1078 SYSTEM
         8        121 SCOTT

Para esse exemplo será utilizada a conexão do usuário (Scott) onde a SID=8 e o SERIAL# = 121. 


3.     Com os valores das colunas do SID e SERIAL# em mãos podemos agora habilitar o “trace” 
     para a sessão, usando a seguinte linha de comando.

SQL> exec sys.dbms_system.set_sql_trace_in_session(8,121,true);

Uma vez habilitado o “trace”, a aplicação ou “query” poderá ser executada afim de encontrar os possíveis erros.

4.   Para desabilitar o “trace” da sessão deve-se executar o comando.

SQL> exec sys.dbms_system.set_sql_trace_in_session(8,121,false);


5.   Para verificar o arquivo de “dump” gerado durante o processo de trace, pode-se executar a query abaixo:

SQL> select value
  2  from v$parameter
  3  where name='user_dump_dest';

VALUE
--------------------------------
/u02/app/oracle/admin/V804/udump

6.   O resultado indicará o diretório onde o arquivo de “trace”  foi gerado. Para identificar qual  o nome do arquivo que possui o trace da sessão, execute o seguinte comando:

$ grep  8.121  *

Este comando  lhe retornará o seguinte resultado.

ora_26384.trc:***SESSIONID:(8.121) 2000.02.25.16.38.55.538

This way you see the trace file generated is ora_26384.trc


7.   Para ver os planos de execução do arquivo de trace execute:

$ tkprof ora_26384.trc trace_scott.txt explain=


Onde o arquivo “trace_scott.txt” é o nome de um arquivo onde serão apresentados os planos de execução.






Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com