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