Hey guys!
Nesse post, eu gostaria de compartilhar com vocês a solução de uma dúvida que me enviaram hoje no Telegram, onde perguntaram como fazia para ocultar as mensagens informativas que o comando BACKUP DATABASE produz durante a sua execução e que também as grava no log do SQL Server.
Introduction
Caso você nunca tenha feito um backup no SQL Server (!!!), um exemplo bem simples da utilização do comando BACKUP DATABASE é assim, onde utilizo o parâmetro STATS = 10 para que a cada 10% na evolução do processamento do backup, seja gerada uma saída para acompanhar a execução:
1 2 3 |
BACKUP DATABASE dirceuresende TO DISK = 'C:\Temporario\dirceuresende.bak' WITH STATS = 10 |
E analisando o nosso log do SQL Server, podemos observar que foram gerados 2 registros por conta desse backup:
Se você tem vários databases na sua instância, inclusive com backups de log sendo gerados com uma frequência alta, essas mensagens informativas podem acabar consumindo muito espaço e dificultando uma busca por informações quando algum problema realmente ocorrer no seu ambiente.
Utilizando a traceflag 3226
Para contornar esse cenário, podemos utilizar a traceflag 3226, que vai suprimir essas mensagens informativas geradas pelo comando BACKUP DATABASE. Caso você não conheça, traceflags são parâmetros utilizados para modificar temporariamente algum comportamento padrão do banco de dados. Para conhecer a lista completa de traceflags do SQL Server, acesse a documentação oficial de Traceflags do SQL Server.
A sua utilização é bem simples:
1 2 3 4 5 6 7 8 9 10 11 12 |
-- Ativa a traceflag DBCC TRACEON (3226, -1) GO -- Executa o backup BACKUP DATABASE dirceuresende TO DISK = 'C:\Temporario\dirceuresende.bak' WITH STATS = 10 -- Se preferir, já pode rodar um backup de log também para testar BACKUP LOG dirceuresende TO DISK = 'C:\Temporario\dirceuresende_20180921_215600.ldf' |
Após executar o backup, vamos analisar novamente o log do SQL Server:
E como ficou demonstrado, executamos o backup e não foi gerado nenhuma mensagem informativa, nem mesmo o de log. Mas será que essa traceflag vai suprimir mensagens de erro também ? Vamos testar!
Vou executar o comando abaixo, tentando fazer o backup de um database que não existe, para forçar um erro:
E agora vamos ver se esse erro ficou registrado no log do SQL Server:
Está aí a nossa mensagem de erro. Ou seja, as mensagens de avisos foram suprimidas do log e as mensagens de erro continuam sendo gravadas.
Ativando e desativando traceflags
Como vimos acima, podemos ativar a traceflag 3226 utilizando o comando abaixo:
1 2 |
DBCC TRACEON (3226, -1) GO |
Uma vez que você execute esse traceflag, ela estará ativada até o serviço do SQL Server ser parado, ou seja, não precisa ser executada a cada vez que um backup for realizado. Caso o serviço do SQL seja reiniciado, a traceflag precisará ser ativada novamente.
Caso você queira parar a traceflag 3226 e voltar ao comportamento padrão, sem ter que reiniciar o serviço do SQL Server, basta executar o comando abaixo:
1 2 |
DBCC TRACEOFF (3226, -1) GO |
E se você quiser que essa traceflag seja ativada automaticamente, sempre que o serviço do SQL Server for iniciado ? Neste caso, é só alterar o parâmetro de inicialização do serviço do SQL Server, acessando o SQL Server Configuration Manager:
E agora adicionamos o parâmetro -T 3226 na aba “Startup parameters”:
Caso você queira adicionar mais de uma traceflag na inicialização do SQL Server, basta adicioná-las separadamente:
Bom pessoal, espero que tenham gostado desse artigo e que ele acabe sendo útil para vocês.
Um grande abraço e até o próximo post.