Loading…

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:

http://www.fabriciolima.net/blog/2019/09/22/passo-a-passo-de-como-criar-40-alertas-para-monitorar-seu-sql-server/

 

 

checklist

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:

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:

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

37 thoughts on “Criando um E-mail de CheckList Diário no SQL Server

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

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

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

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

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

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

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

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

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

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

    1. 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… =)

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

Deixe uma resposta