23 de outubro de 2009

Depurando comandos enviados ao Oracle

Desenvolver um ERP é um trabalho bastante grande já que normalmente engloba vastas áreas da operação de uma Empresa. Se a construção desse ERP tem como premissa ser independente do fabricante do banco de dados onde ele vai armazenar as transações, esse trabalho será ainda maior pois adiciona a dificuldade de compatibilizar a sintaxe dos comandos SQL para realizar as operações no banco de dados.

A ABC71 trabalha com essa premissa e seu ERP é homologado para executar em alguns bancos de dados, entre eles SQL Server e Oracle. Embora haja um SQL padrão, na prática cada fabricante acaba introduzindo diferenças de sintaxe para refletir diferenças de implementação - seja para melhorar performance ou usabilidade, entre outros. É por essa razão que não utilizamos Stored Procedures para implementar funcionalidades do ERP; teríamos praticamente que construir um ERP para cada tipo de banco de dados.

Esse cenário levanta outra questão, relacionada com situações em que é necessária a depuração do programa. Uma vez que os comandos SQL são montados internamente no programa e podem ser diferentes dependendo do banco ao qual são direcionados, como interceptar o comando que é de fato submetido ao banco ? Isto é, será que os valores enviados como parâmetros ao comando SQL estão corretos ? E quanto à sintaxe do comando em si ?

Junto com o SQL Server é distribuído o programa Profiler que é capaz de interagir com o gerenciador de banco de dados e capturar os comandos SQL, incluindo parâmetros, se houverem. No caso do Oracle, não há uma ferramenta que venha junto com o banco para permitir esse tipo de depuração.

Procurando na internet, localizei uma ferramenta chamada Statement Tracer for Oracle, cuja empresa desenvolvedora chama-se Aboves Software. Ela é gratuita mas faz pelo Oracle exatamente o que o Profiler faz pelo SQL Server: captura os comandos SQL submetidos ao banco de dados por uma aplicação. Os comandos capturados são exibidos em linhas, sequencialmente de acordo com a data e hora em que foram submetidos. Ao selecionar uma das linhas, o programa transfere o comando completo para um painel na parte de baixo da interface, permitindo sua análise e, eventualmente, sua cópia.
Tela do Tracer

O Statement Tracer é executado localmente, isto é, no mesmo computador em que você está executando o programa que submeterá as queries. Ele, então, criará uma lista com todos os programas que estejam com alguma conexão ativa com um banco de dados Oracle, exibindo cada programa numa guia diferente. Para iniciar o monitoramento, basta apertar um botão na interface.

O programa permite que você configure quais classes de comando você quer interceptar, incluindo controle de transações, preparação e execução das queries (SELECT, INSERT, etc), visualização de parâmetros em queries parametrizadas e comandos relacionados a operações no esquema do banco de dados (CREATE TABLE, por exemplo). Você pode também incluir ou remover determinadas colunas. Uma dessas colunas traz o tempo que o comando relacionado demorou para executar, sendo uma ferramenta bastante útil para detectar pontos no sistema que possam ter a perfomance melhorada.

Há ainda um configuração de regras para aplicar uma cor diferente às linhas do Tracer, baseado no texto apresentado pelo comando. A utilidade disto é ampla e vai desde descobrir qual comando enviou um determinado valor ao banco de dados até saber quais comandos envolveram determinada tabela ou visão.

Caso queira analisar num outro momento os comandos que foram capturados, basta salvar todo o log para um arquivo texto.

O download da ferramenta pode ser feito neste link. Há outras ferramentas da mesma empresa que podem ser encontradas neste endereço. Veja que há aí um Tracer para interceptar comandos diretamente no ADO, indepentemente do Banco de Dados conectado. No entanto, essa ainda não me pareceu totalmente madura pois às vezes gera invasões de memória.

Mais Informações
Statement Tracer For Oracle

Nenhum comentário :

Postar um comentário

OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.

Observação: somente um membro deste blog pode postar um comentário.