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

    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!