Criando um E-mail de CheckList Diário no SQL Server
Update dia 22/09/2019: Veja nesse post uma nova versão para a criação desse Checklist para seu BD SQL Server junto com outros 40 alertas:
Olá Pessoal,
No dia 07/03/2010 eu fiz meu primeiro post para esse blog: Apresentação
Contudo, foi no dia 24/03/2010 que eu comecei a ficar conhecido no mundo SQL Server. O meu post Criando um CheckList Automático do Banco de Dados bombou!!! Recebi muitos acessos, comentários e a partir disso conheci muitas pessoas novas da comunidade SQL aumentando bastante meu networking.
Hoje, 7 anos depois, esse CheckList em Excel já foi substituído por um Checklist em HTML que vem no corpo do e-mail, conforme esse exemplo abaixo:
Exemplo E-mail com o CheckList do Banco de Dados
Eu implanto esse Checklist em todos os clientes que sou responsável pelo SQL Server e também ministrei até outubro-2016 um workshop pago (3 horas) de como implantar esse Checklist.
Aí que vem a boa notícia, agora que já se passaram 6 meses do meu último workshop pago de como implantar esse CheckList, conforme prometido, estou compartilhando ele grátis com vocês.
Certamente ele tem muita coisa que pode ser melhorada e conto com vocês para dar esse feedback e evoluirmos o CheckList.
Quem já tem esse meu CheckList (alunos ou clientes) também serão beneficiados, pois estou liberando com algumas melhorias desde o último treinamento em Outubro.
Vamos ao que interessa…
Porque criar um Checklist de monitoramento do Banco de Dados?
Essa é uma maneira simples e rápida de fazer uma checagem em vários itens do seu banco de dados. Com isso, você ganha um bom tempo e não precisa conferir essas informações manualmente, como eu fazia no inicio da carreira sem o Checklist.
Antes de você sair de casa, você já tem o Checklist ali no seu e-mail. Pode olhar no celular e já tomar alguma ação caso seja algo importante.
O que será monitorado com o Checklist
Vamos monitorar esses itens abaixo no CheckList:
1) Disponibilidade do SQL Server
2) Espaço em disco
3) Informações dos Arquivos .MDF
4) Informações dos Arquivos .LDF
5) Crescimento das Bases
6) Crescimento das Tabelas
7) Utilização Disco Writes
8) Utilização Disco Reads
9) Bases sem Backup nas últimas 16 horas
10) Backup FULL e Diferencial
11) Queries em Execução a mais de 2 horas
12) Jobs em Execução
13) Jobs Alterados
14) Jobs que Falharam
15) Jobs Demorados
16) Queries Demoradas Dia Anterior
17) Queries Demoradas – Últimos 10 dias
18) Contadores
19) Conexões Abertas por Usuários
20) Fragmentação dos Índices
21) WAITS Stats Dia Anterior
22) Alertas Sem CLEAR
23) Alertas do Dia Anterior
24) Login Failed
25) Error Log do SQL Server
Pré-Requisitos
Para configurar o envio desse CheckList, temos alguns pré-requisitos:
- Configurar o SQL Server para enviar e-mail (claro)
- Usuário do SQL com acesso para criar e excluir um arquivo em uma pasta no servidor (isso será necessário na rotina que monitora queries lentas)
- Criar uma database para logar informações
- Utilizo uma database com nome “Traces” nos Scripts. Se quiser usar uma base com outro nome, boa sorte no replace de todos os scripts.
Rotinas para logar informações do BD
Algumas das informações que são enviadas no CheckList são coletadas na hora da execução diretamente do SQL Server. Contudo, algumas informações temos que criar um histórico delas para poder enviar no CheckList.
Dessa forma, as rotinas abaixo precisam ser criadas para que o CheckList envie as informações:
1) Server Side Trace guardando as queries que demoram mais de X segundos
Essa rotina já tinha no meu Blog:
- Passo a passo para encontrar as querys mais demoradas do Banco de Dados – Parte 1
- Passo a passo para encontrar as querys mais demoradas do Banco de Dados – Parte 2
Esse trace fica habilitado 24 horas nos meus clientes.
O ponto importante aqui é que cada ambiente tem sua particularidade. Eu monitoro queries que demoram mais de 3 segundos em um ambiente, 5 segundos em outro ambiente e 10 segundos em outro ambiente. Então você deve adaptar essa rotina a sua realidade. Não deixe logar muita informação (sugestão de 3 à 5 mil queries por dia no máximo).
Teste o procedimento em homologação antes de colocar em produção.
2) Rotina para guardar o tamanho das tabela
3) Rotina para guardar o log de contadores
4) Rotina para guardar a fragmentação dos índices
5) Rotina para guardar os Waits Stats
Ainda não tinha publicado uma rotina dessa no meu Blog.
6) Rotina para guardar informações de Leitura e Escrita dos arquivos de dados e log.
Ainda não tinha publicado uma rotina dessa no meu Blog.
Scripts e informações para implantação
Segue abaixo os Scripts que serão utilizados para criar todo esse CheckList:
- 1 – Passo a Passo – Criação do CheckList
- 2 – PreRequisito – QueriesDemoradas
- 3 – PreRequisito – DemaisRotinas
- 4 – Criação da Tabela de Controle dos Alertas
- 5 – CheckList – Tabelas e Procedures
- 6 – CheckList – Procedure de Envio do Email
Segue abaixo o vídeo com a explicação de como executar os scripts:
É isso ai galera… Script prontinho e simples de implantar como viram no vídeo.
Espero que tenha contribuído para tornar seu dia a dia de DBA um pouco mais simples.
Aproveitem o Checklist sem moderação e indiquem para seus conhecidos que possuem um banco SQL Server para que eles também possma usar.
Gostou desse Post?
Curta, comente, compartilhe com os coleguinhas…
Assine meu canal no Youtube e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.
Até a próxima.
Abraços,
Fabrício Lima
Microsoft Data Platform MVP
Consultor e Instrutor SQL Server
Trabalha com SQL Server desde 2006
Fabricio, boa noite.
Cara sensacional o conteúdo que você compartilhou, parabéns.
Fala Galvão,
Massa… Obrigado!
Muito Bom! vai ajudar muitas pessoas! Parabens Cara!
Obrigado Nasser.
Muito bom o artigo, parabéns pela iniciativa.
Obrigado Nebert.
Muito bom o Post Fabrício! Parabéns!
Obrigado Paulo.
Parabens pelo post e pela explicacao. Show de bola!
Obrigado Bruno.
Parabéns, como sempre, material de primeira!
Obrigado Anderson!
Excelente post Fabrício, ficou bem mais detalhado do que um mesmo monitoramento que eu fiz.
Parabéns!
Obrigado Wesley.
Sensacional Fabricio! Explicação e material de altíssima qualidade!
Que bom que gostou Gabriel.
Obrigado.
Estou com um problema no momento que roda o step 3 do desabilita o trace (exclui o arquivo de trace antigo).No historico esta dando a segunte mensagem: Message
The job failed. The Job was invoked by Schedule 1019 (DBA – Traces Banco de Dados). The last step to run was step 4 (Cria o Trace).
Sabe o que pode ser? já ate mudei o comando para Del “C:\Temp\Duracao.trc” /F /Q mas não resolveu o problema
Olá Miqueias,
Verifique se esse caminho existe e se o usuário do SQL Server Agent possui os devidos acessos nessa pasta (acesso FULL). Já tive alguns problemas com isso e tive que alterar na configuração de segurança da pasta.
Abraço.
Fabrício
qual usuario que eu dou permissao na segurança da pasta?vc tem o nome do usuario?
Miqueias,
Verifica no “Configuration Manager” qual o usuário que está sendo utilizado na coluna “Log On As” pelo “SQL Server Agent” da sua instância.
Abraço.
Fabrício
Fabricio, Muito bom seu post e seu material. Estou estudando-os.
Tenho um cliente que ainda esta utilizando o Sybase ASE 12.0.
Não sou DBA, estou apenas auxiliando ele na manutenção da base com a experiência que tenho.
Sabe se essas suas rotinas podem ser adaptadas para o SYBASE, já que é avo do SQL Server?
Obrigado
Obrigado Marcio.
Provavelmente não devem funcionar. O SQL server evoluiu demais…
Já planeja uma migração para SQL Server … =)
Bom dia Fabricio,
Quando executo o check list esta me dando um erro…. verifico o erro no log do sql agent e me da isso
Mensagem
[264] Foi feita uma tentativa de envio de email sem uma sessão de email estabelecida
saberia o que pode ser
Olá Everton,
Faça um teste separado de envio de e-mail através do Database Mail. Se funcionar, verifica também se você está utilizando o profile correto que existe na sua instância e altere nessa variável no nosso script “@Profile_Email = ‘MSSQLServer'”.
Abraço.
Fabrício
Bom dia Fabrício , muito bom esse check list , é uma mão na roda . Estou com uma dificuldade para realizar o procedimento quando rodo o job Cheklist do Banco de dados ele retorna o seguinte erro :
Date 13/12/2017 10:01:02
Log Job History (DBA – CheckList do Banco de Dados)
Step ID 1
Server TESTE28
Job Name DBA – CheckList do Banco de Dados
Step Name DBA – Carga Tabelas CheckList
Duration 00:00:01
Sql Severity 16
Sql Message ID 208
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 0
Message
Executed as user: AUTORIDADE NT\SERVIÇO DE REDE. Warning: Null value is eliminated by an aggregate or other SET operation. [SQLSTATE 01003] (Message 8153) Warning: Null value is eliminated by an aggregate or other SET operation. [SQLSTATE 01003] (Message 8153) Invalid object name ‘dbo.Alerta_Parametro’. [SQLSTATE 42S02] (Error 208). The step failed.
Tem alguma ideia do que possa ser ?
att
Bom Dia, Script atualizado.
Tente novamente.
Parabéns Fabrício, ótimo material…
Obrigado Andrey
Bom dia Fabrício,
este script serve para SQL Server 2012 Express???
Eu sei que o envio de e-mail não vai ser possível, mas será consigo gerar o HTML final e salvar isso em arquivo para ‘conferencia manual’???
Ola Marcelo,
Nao vai ter jobs também… mas daria para customizar algumas coisas sim para rodar no sql express salvando em tabelas ao inves de email…
vai ter que gastar algumas horas com isso,mas da para fazer algo sim.
Obrigado Fabrício, vou estudar as modificações necessárias e implementar aqui, depois te envio para você compartilhar com quem mais precisar.
Ótimo post Fabricio, só estou tendo problema na execução do Job.
Ocorre o erro abaixo:
Data 12/12/2018 12:03:09
Log Histórico do Trabalho (DBA – CheckList do Banco de Dados)
ID da Etapa 2
Servidor XXX
Nome do Trabalho DBA – CheckList do Banco de Dados
Nome da Etapa DBA – Envio de E-mail em HTML com o CheckList do Banco de Dados
Duração 00:00:00
Severidade do Sql 16
ID da Mensagem Sql 6841
Operador Notificado por Email
Operador Notificado por Envio de Rede
Operador Notificado por Pager
Repetições Tentadas 0
Mensagem
Executed as user: NT SERVICE\SQLSERVERAGENT. FOR XML could not serialize the data for node ‘td’ because it contains a character (0x001A) which is not allowed in XML. To retrieve this data using FOR XML, convert it to binary, varbinary or image data type and use the BINARY BASE64 directive. [SQLSTATE 42000] (Error 6841). The step failed.
Obrigado.
Alguma string gerando problema. Teria que debugar seu caso para achar.
Boa tarde Fabrício, parabéns ótimo material. Gostaria de fazer uma sugestão:
No script 02 , alterar :
declare @Dt_Atual varchar(8)=convert (varchar(8), getdate(), 112);
para:
declare @Dt_Atual varchar(8) set @Dt_Atual=convert (varchar(8), getdate(), 112);
Assim o script roda tanto no SQL Server 2005 como no 2008.
Grande abraço.
Obrigado pelo feedback Helder. Nem tenho 2005 mais para testes…
Infelizmente a próxima versão dos scripts não vai contemplar o SQL 2005. Galera vai ter que usar essa atual.
Bora migrar esse sql ai… =)
Bom dia Fabricio! Parabéns pelo seu trabalho e principalmente pela iniciativa de compartilhar isso.
Rodei os scripts em um SQL Server 2017 Developer em um servidor com Linux. Está ocorrendo o seguinte erro na execução do job:
Também não está encontrando uma tabela, que não foi criada com os scripts.
“dbo.Alerta_Parametro”
Servidor CENTOSSQLSERVER
Nome do Trabalho DBA – CheckList do Banco de Dados
Nome da Etapa DBA – Carga Tabelas CheckList
Mensagem
Executed as user: NT AUTHORITY\NETWORK SERVICE. Could not load the DLL odsole70.dll, or one of the DLLs it references. Reason: 2(failed to retrieve text for this error. Reason: 15105).
[SQLSTATE 42000] (Error 17750) Could not load the DLL odsole70.dll, or one of the DLLs it references. Reason: 2(failed to retrieve text for this error. Reason: 15105).
[SQLSTATE 42000] (Error 17750) Warning: Null value is eliminated by an aggregate or other SET operation.
[SQLSTATE 01003] (Message 8153) Invalid object name ‘dbo.Alerta_Parametro’. [SQLSTATE 42S02] (Error 208). The step failed.
Opa,
Ainda não homologuei os scripts no linux, entao não sei se vai funcionar sem modificações.