Olá Pessoal,
No post de hoje vou compartilhar com vocês uma procedure que pode ser usada para atender Solicitações de Backup dos clientes e enviar um e-mail quando o Backup for finalizado.
Acredito que grande parte das pessoas que trabalham com Banco de Dados já tiveram que fazer algum BACKUP um dia. Se você ainda não fez, pode ter certeza que esse dia ainda irá chegar.
É comum um cliente pedir um Backup antes de algum tipo de atualização ou alteração no banco de dados / sistemas para garantir uma cópia de segurança. Se der algum problema e for necessário voltar o banco nesse ponto, basta fazer um RESTORE utilizando esse arquivo de Backup.
Em alguns casos, o cliente pode pedir para agendar o backup em um determinado horário e ser avisado assim que o Backup for finalizado. Com isso, ele poderia seguir com os próximos passos das suas atividades.
Para resolver essa tarefa, vamos criar um JOB para executar o Backup e enviar um e-mail quando o mesmo for finalizado. Com isso, o cliente já poderia iniciar as suas atividades logo após o término do Backup. Isso também pode evitar que você esqueça de avisar o cliente que o Backup foi finalizado ou avisar apenas depois de algum tempo, fazendo o cliente atrasar as outras atividades por estar esperando o seu OK.
Esse e-mail será o resultado final da procedure. Mais abaixo explico o funcionamento com mais alguns detalhes.
Pré-Requisitos:
Segue abaixo alguns pré-requisitos:
- Database “Traces”: Ter uma base chamada “Traces” ou então alterar o script e colocar o nome da base que você desejar.
- Database Mail: O Database Mail deve ser configurado para o SQL Server conseguir enviar um e-mail.
Procedure: “stpBackup_Avulso_Email”
Essa procedure irá executar um Backup FULL para a database informada. Segue abaixo uma descrição dos parâmetros:
IMPORTANTE: Leia as recomendações no início do arquivo do script que está no GitHub.
Procedure: [Traces].[dbo].[stpBackup_Avulso_Email]
@Nm_Database: Nome da Database que será feito o backup;
@Ds_Caminho_Backup: Caminho da pasta onde o arquivo do Backup será gerado. Lembrar de incluir o caractere “\” no final do caminho;
@Ds_Email: Destinatários que irão receber o e-mail na conclusão do Backup. Se for enviar para mais de uma pessoa, deve utilizar o caractere “;” (ponto e vírgula) para separar.
Segue abaixo um exemplo de execução da procedure:
1 |
EXEC stpBackup_Avulso_Email 'NomeDatabase', 'C:\SQLServer\Backup\','[email protected];[email protected]' |
Você também pode executar manualmente a procedure sem precisar de um JOB e quando o Backup finalizar irá enviar um e-mail da mesma forma. Com isso, você não precisa ficar monitorando a execução e pode executar outras tarefas em paralelo.
Dentro da procedure, o código abaixo que será o responsável por executar o Backup.
1 2 3 |
BACKUP DATABASE @Nm_Database TO DISK = @Ds_Caminho_Backup WITH CHECKSUM, INIT, COMPRESSION, COPY_ONLY |
Observações:
- COMPRESSION: Dependendo da versão do SQL Server que estiver sendo utilizada, essa opção pode não estar disponível. Se for o seu caso, você precisará remover essa opção do script do backup.
- COPY_ONLY: Essa opção gera um backup que NÃO depende da sequência de backups convencionais do SQL Server. Geralmente, um backup afeta a forma de restauração dos backups posteriores. Contudo, ocasionalmente, é útil fazer um backup para uma finalidade especial SEM AFETAR o backup global e os procedimentos de restauração do banco de dados. A opção COPY_ONLY serve para essa finalidade.
Referências:
- Segue um LINK com mais detalhes sobre a opção COPY_ONLY:
- Deixo como referência também o Blog do Edvaldo Castro que tem alguns posts muito interessantes sobre Backup. Recomendo fortemente a leitura!
https://edvaldocastro.com/Administra%C3%A7%C3%A3o/sql-server/backup/
Database Mail – profile:
Nessa procedure utilizei um profile chamado “MSSQLServer”. Se o seu for diferente, basta alterar o parâmetro “@profile_name” e informar o correto.
1 2 3 4 5 6 |
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'MSSQLServer', @recipients = @Ds_Email, @subject = '[Banco de Dados] Solicitação Backup' , @body = @Ds_Email_Body, @body_format = 'HTML' |
JOB: “DBA – Solicitação Backup”
Com a procedure e o JOB criados, agora podemos alterar os parâmetros da procedure dentro do JOB de acordo com a solicitação do cliente. Segue abaixo um passo a passo:
1) Clique com o botão direito no JOB “DBA – Solicitação Backup” e vá em “Properties”. No canto esquerdo escolha “Steps” e dê dois cliques em “EXECUTA BACKUP AVULSO”.
2) Na nova janela, altere os parâmetros da procedure de acordo com a solicitação do cliente e clique em “OK”.
3) Agora vamos criar o agendamento. No canto esquerdo escolha “Schedules” e dê dois cliques em “BACKUP AVULSO”. Ele já está utilizando a opção para executar apenas uma vez. Portanto, basta você alterar a data e horário da execução e clicar em “OK”. Pronto, agora o Backup está agendado!
IMPORTANTE: Não esqueça de marcar a opção “Enabled”, caso contrário o Backup NÃO será executado.
Segue abaixo um exemplo do e-mail que será enviado caso o Backup seja executado com sucesso!
Para conferir se o Backup realmente foi executado, verifique se o arquivo foi gerado no caminho informado.
Repare que o padrão utilizado para a nomenclatura do arquivo será “NomeDatabase_AAAAMMDD_HHMMSS_Dados.bak”. Se você quiser utilizar outro padrão, basta alterar o trecho abaixo:
1 |
SELECT @Ds_Caminho_Backup = @Ds_Caminho_Backup + @Nm_Database + '_' + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),120),'-',''),':',''),' ','_') + '_Dados.bak' |
“Ah Luiz, mas e se o Backup falhar? O que vai acontecer?”
O JOB já está configurado para enviar uma Notificação de Falha por e-mail, conforme o print abaixo:
OBS: Lembre de fazer o REPLACE no script para enviar a notificação de falha para os e-mails necessários.
Portanto, quando o Backup falhar por algum motivo, você também irá receber uma notificação de falha. Segue abaixo um exemplo:
Para identificar o motivo da falha, basta verificar o History do JOB (botão direito no JOB e depois “View History”) e validar a mensagem de erro, conforme o print abaixo.
Download “sptBackup_Avulso_Email”:
Segue o link para baixar os scripts utilizados nesse Post:
Espero que tenha gostado e que isso também possa ser útil no seu dia a dia. Até o próximo post!
Me siga no LinkedIn e YouTube para ficar por dentro das novidades.
Abraço,
Luiz Vitor França Lima
Consultor SQL Server
Muito bom e útil o post. Parabéns e obrigado pela citação 🙂
Abraço
Keep sharing
Edvaldo Castro
Valeu Edvaldo! Já estou usando ele na prática por aqui kkk.
Compartilhar e aprender mais e mais, essa é a ideia mesmo =)
Abraço.
Luiz Vitor
Pingback: Solicitação Restore – Script + Envio Email – Luiz Lima