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

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.

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:

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).

    Nota: 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!

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados