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