Como descobrir o que uma determinada sessão no Oracle está executando?

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (4)  (0)

Veja neste artigo como gerar um arquivo de saída com todos os comandos SQL executados durante uma determinada sessão em um determinado computador.

 

Introdução

por Rodrigo Salviatto

Muitas vezes necessitamos identificar o que uma determinada sessão no banco de dados está executando em um determinado momento. Existem diversas maneiras de verificar, como por exemplo, efetuar um SELECT na view V$SQL entre outros. Neste artigo, mostraremos de maneira simples, como gerar um arquivo de saída com todos os comandos SQL executados durante uma determinada sessão em um determinado computador.

 

O pacote DBMS

A Oracle desenvolveu uma procedure denominada SQL_TRACE_IN_SESSION pertencente ao pacote DBMS_SYSTEM do esquema SYS.

Com esta procedure é possível gerar um arquivo de trace com todos os comandos DML executados em uma sessão. Os arquivos são gerados no diretório informado pelo parâmetro USER_DUMP_DEST identificado no arquivo de parâmetros do Oracle.

A procedure requer 3 parâmetros de entrada. São eles:

Parâmetro 1 – valor SID encontrado na view V$SESSION

Parâmetro 2 – valor SERIAL# encontrado na view V$SESSION

Parâmetro 3 – TRUE ( ativa a geração do arquivo de saída) ou

                  FALSE ( desativa a geração do arquivo de saída)

 

Como funciona ?

Vejamos um exemplo, de como funciona a geração do arquivo de saída em uma determinada sessão, utilizando o pacote do esquema SYS.DBMS_SYSTEM.SQL_TRACE_IN_SESSION.

 

1-Identificando a sessão a ser monitorada

Acesse o Oracle com o usuário que possui direitos de visualizar a view V$SESSION e execute a seguinte consulta:

SQL>SELECT SID, SERIAL#, USERNAME

2         FROM V$SESSION

3         WHERE USERNAME=’SCOTT’;

 

       SID    SERIAL# USERNAME

---------- ---------- ------------------------------

        80      10064 SCOTT

 

Listagem 1. Identificando a sessão a ser monitorada.

2-Ativando a monitoração na sessão

Identificado a sessão conforme a listagem 1, agora podemos ativar a geração do arquivo de saída com os comandos DML executados pela sessão, conforme listagem 2. O usuário que fará a ativação, deve possuir direitos para executar o pacote SYS.DBMS_SYSTEM.SQL_TRACE_IN_SESSION.

 

SQL> exec SYS.DBMS_SYSTEM.SQL_TRACE_IN_SESSION(80,10064,TRUE);

 

PL/SQL procedure successfully completed

 

Listagem 2. Ativando a monitoração na sessão do SCOTT.

 

A partir deste momento, todos os comandos gerados pelo usuário SCOTT na sessão ativada, serão computadas em um arquivo no diretório informado no parâmetro USER_DUMP_DEST. Acesse o diretório e verifique o crescimento do arquivo de saída ( normalmente possui a extensão .TRC).

 

IMPORTANTE: Não esqueça de desativar a sessão, pois a geração do arquivo será interrompida somente, ao término da sessão do usuário monitorado ( SCOTT ) e desta forma, o arquivo poderá crescer de forma contínua, ocupando todo o espaço livre existente no servidor de banco de dados.

 

3-Desativando a monitoração na sessão

Para desativarmos a sessão, anteriormente ativada, executamos o mesmo pacote, porém com a opção FALSE. Vejamos um exemplo, na listagem 3.

 

SQL> exec SYS.DBMS_SYSTEM.SQL_TRACE_IN_SESSION(80,10064,FALSE);

 

PL/SQL procedure successfully completed

 

Listagem 3. Desativando a monitoração na sessão do SCOTT.

 

Conclusão

Neste artigo, vimos como é possível, de maneira simples e prática, identificar quais comandos DML são executados pelos programas que utilizam o Oracle. Trata-se de uma ferramenta para uso do DBA com o objetivo de identificar problemas de performance nos softwares internos da empresa, bem como sugerir melhorias para os softwares de terceiros. Boa sorte e sucesso!

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?