Eu tenho um problema aqui - desejo acompanhar todas as transações executadas no SQL Server, mas queria saber como devo proceder.
Se eu fosse usar o SQL Server Profiler e configurá-lo para armazenar todo o histórico de transações em um arquivo e executar um roll-over se um tamanho especificado for atingido, precisarei garantir que o SQL Server Profiler esteja sempre aberto e corrida. Também pelo que entendi, isso diminuirá o desempenho do servidor.
Se eu usasse a função Jobs no SQL Server Agent no SSMS, ela se tornaria uma tarefa agendada que seria executada apenas quando estivesse sendo chamada.
Então, como faço para acompanhar todas as transações SQL feitas no SQL Server e gravá-las 24 horas por dia, 7 dias por semana ou até que eu as interrompa manualmente (e também não diminua o desempenho do servidor)?
No passado, escrevi alguns scripts para capturar consultas lentas.
Usei o SQL Profiler por meio de procedimentos armazenados T-SQL. A sobrecarga para isso não foi enorme e, na época, forneceu informações valiosas.
Mais informações e alguns exemplos estão aqui: http://www.toadworld.com/platforms/sql-server/w/wiki/9827.running-traces-with-tsql.aspx
Eu escreveria dois procedimentos armazenados, um para iniciar o rastreamento e outro para interrompê-lo. Eles podem ser chamados por meio de um trabalho do SQL Agent ou de uma tarefa agendada, o que for preferido. Registre apenas as informações que você deseja em uma tabela em vez de arquivos para facilitar o gerenciamento. Você pode criar um terceiro trabalho para limpar registros após "X" dias/semanas/meses, dependendo de suas necessidades.
O impacto no desempenho dependerá da carga existente no servidor e não há uma maneira fácil de fazer isso, então teste todas as soluções recomendadas completamente antes de decidir qual caminho seguir.