SQL Server - Server Side Trace - Operação

Após uma breve postagem sobre a criação de um Server Side Trace, ou simplesmente SQL Trace, como também pode ser encontrado em outros blogs e até mesmo na documentação oficial do SQL Server, também faz-se necessário explicar um pouco sobre a operação com este tipo de trace, visto que sem o auxílio do SQL Server Profiler, quais atividades de início, parada e exclusão das definições do seu trace, deverão ser realizadas via linha de comando, seja ela T-SQL ou através do SQLCMD via prompt.

Antes de qualquer coisa, é preciso criar as definições do seu trace, conforme explicado no post: "SQL Server - Server Side Trace".

Após a criação, seguindo o script do post supracitado, seu trace já estará executando e capturando os eventos definidos no mesmo, logo abaixo, segue uma breve definição dos principais comandos T-SQL para operação com traces deste tipo (SQL Trace / Server Side).

1 - Exibição dos traces criados na instância, juntamente com os principais campos. Existem outros campos que não estão sendo exibidos nesta consulta.

select id  -- Id de todos os traces criados na instância (ID = 1, sempre pertence ao Default Trace do SQL Server) ,status -- Status dos traces, sendo . ,path  -- Caminho do arquivo gerado pela execução do trace. ,max_size  --  Tamanho máximo que cada arquivo pode atingir antes que um novo arquivo de trace seja criado. ,max_files -- Número máximo de arquivos de trace que podem ser criados antes que o primeiro arquivo seja sobrescrito. ,start_time -- hora de início do trace from sys.traces 1 2 - Uma pequena procedure para alteração do status do trace, sendo que existem três status possívels ( 0 - Para a execução do Trace, 1 - Inicia a execução do trace, 2 - Exclui a definição do trace da isntância). exec sp_trace_setstatus 1,0  -- Onde "1" é o id do trace e "0" é o status desejado. 2 Obs: O Default Trace, apenas pode ter seu status alterado utilizando-se a SP_CONFIGURE. Uma tentativa de alteração do status do mesmo, via sp_trace_setstatus resultará no erro acima. 3 - Já foi possível identificar o trace, alterar seu status, e agora é a vez de literalmente ler o arquivo do trace... Para isto, basta utilizar uma função muito útil, conforme descrito abaixo. select * from ::fn_trace_gettable ('c:tempExemploTrace.trc',2) -- Os parâmetros para esta função são: o caminho do arquivo de trace e o número de arquivos a serem lidos, a partir do que foi passado. 3 Com as funções e procedures citadas, já é possível fazer uma administração e operação completa dos traces Server Side com definições criadas na instâncias. Adicionalmente existem algumas outras opções que podem também ser muito úteis conforme as descritas abaixo:
  • select * from fn_trace_getinfo (0) -- Fornece informações detalhadas sobre a propriedade de cada um dos traces. Recebe como parâmetro, o id do trace sendo (id = 0), o parâmetro para todos os traces da instância.
  • select * from sys.trace_columns -- Exibe informações sobre as colunas possíveis de serem capturadas em um trace.
  • select * from sys.trace_categories -- Exibe informações sobre as categorias de traces disponíveis no SQL Server.
Existe muito mais a ser explorado no mundo do Server Side trace, como por exemplo o parâmetro "Blocked Process Report", que pode ser configurado a nível de instância, capturado via Server Side Trace e servir para consultas, levantamentos e evidências posteriores sobre bloqueios com tempo superior ao definido. Mas este já é assunto para um outro post... Até a próxima.... enjoy it... Edvaldo Castro MCITP | MCTS | MCT | MTA | MTAC | CCSQLA | TOEIC @edvaldocastro02