Solicitação Restore – Script + Envio Email

Fala Pessoal,

Seguindo a ideia do Post anterior Solicitação Backup – Procedure “stpBackup_Avulso_Email”, dessa vez vou compartilhar com vocês um script para executar um RESTORE e enviar um email quando finalizar.

Acredito que grande parte das pessoas que trabalham com Banco de Dados já tiveram que fazer algum RESTORE um dia. Se você ainda não fez, pode ter certeza que esse dia ainda irá chegar.

É comum um cliente pedir um RESTORE para atualizar alguma base de teste, OU para verificar os dados de uma base em uma determinada data para poder comparar com os dados atuais, OU para validar se o arquivo de Backup está OK, entre outros motivos.

Esse email será o resultado final do script. Mais abaixo explico o funcionamento com mais alguns detalhes.


Pré-Requisito:

Segue abaixo um pré-requisito:

  • Database Mail: O Database Mail deve ser configurado para o SQL Server conseguir enviar um e-mail.

Solicitação Restore – Script + Envio Email:

Segue abaixo algumas considerações importantes sobre esse script:

Leia as instruções no início do script!

1) “Alterar os parâmetros iniciais – linha 33”

Essa é a parte mais importante do script, pois nesse momento você deve especificar os seguintes parâmetros:

  • @Nm_Database_Restaurada: Nome da Database que será restaurada. Tenha muita ATENÇÃO nesse campo para não sobrescrever alguma database de forma indevida.
  • @Ds_Caminho_Backup: Caminho do arquivo do Backup que será utilizado no RESTORE;
  • @Ds_Email: Destinatários que irão receber o e-mail na conclusão do RESTORE. Se for enviar para mais de uma pessoa, deve utilizar o caractere “;” (ponto e vírgula) para separar.

Observação – Versão SQL Server:

Tem uma parte no script que lê os dados do arquivo do Backup. Dependendo da versão do SQL Server que você estiver utilizando, pode ser necessário comentar algumas linhas do print abaixo, caso contrário o script pode gerar um erro por não encontrar a coluna que só existe a partir de determinada versão.

2) Alterar os parâmetros do RESTORE – linha 153

Abaixo explico as duas formas de fazer o RESTORE.

OBS: Nesse exemplo estou utilizando apenas um BACKUP FULL. Contudo, você pode alterar esse trecho para restaurar também backups diferenciais e de log.

2.1) RESTORE sobrescrevendo uma database já existente

Esse caso é o mais simples, pois será necessário apenas descomentar as linhas do “item 1”. Quando o script for executado, a database será atualizada e irá manter os mesmos arquivos (dados e log) atuais. Por esse motivo não precisamos especificar o caminho.

2.2) RESTORE de uma nova database

Nesse caso, você deverá descomentar as linhas do “item 2” e vamos precisar executar primeiro o script até a parte do RESTORE FILELISTONLY para recuperar o nome lógico dos arquivos (depois que conseguir as informações você pode comentar novamente as linhas 160 e 161). Depois disso, devemos alterar as linhas do MOVE informando o nome lógico e o caminho onde o arquivo será restaurado. Por fim, execute o script para fazer o RESTORE e os arquivos serão criados nos caminhos que foram informados.

OBS: Algumas databases podem utilizar mais de dois arquivos. Com isso, pode ser necessário incluir mais algumas linhas com o comando MOVE.

3) Validar se o RECOVERY MODEL precisa ser alterado para SIMPLE – Base de TESTE – linha 178

Se a base que estiver sendo restaurada for uma base de TESTE, o script abaixo irá alterar o Recovery Model para SIMPLE. Dessa forma, evitamos que o arquivo de log cresça muito e a base também será desconsiderada da Rotina de Backup de Log (caso exista alguma).

“Ah Luiz, mas a base que estou restaurando é uma base de Produção e o Recovery Model NÃO deve ser alterado. E agora?”

Nesse caso, você deverá comentar as linhas 178 e 179. Pronto, problema resolvido.

4) Email – Profile e Destinatários:

  • Nessa procedure utilizei um profile chamado “MSSQLServer”. Se o seu for diferente, basta alterar o parâmetro “@profile_name” e informar o correto.
  • Fazer o REPLACE nos e-mails abaixo pelos e-mails desejados:

[email protected];[email protected]


Segue abaixo um exemplo do e-mail que será enviado caso o RESTORE seja executado com sucesso!

Repare que o email possui informações do Restore e do arquivo do Backup, isso pra não deixar dúvidas sobre o arquivo que foi utilizado para restaurar a base.


Se por algum motivo o Restore falhar, será enviado um email também. Nesse caso, você deve voltar na sessão que estava executando o Restore e verificar o motivo do erro.

Segue abaixo um exemplo:


Download “Solicitação Restore – Script + Envio Email”:

Segue o link para baixar os scripts utilizados nesse Post:

Link: https://github.com/luizvitorf/SQLServer/blob/master/Scripts/Backup%20e%20Restore/Solicita%C3%A7%C3%A3o%20Restore%20-%20Script%20%2B%20Envio%20Email.sql


Referência:

Segue abaixo um LINK que possui mais detalhes sobre o comando RESTORE:

https://docs.microsoft.com/pt-br/sql/t-sql/statements/restore-statements-transact-sql


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

3 comentários em “Solicitação Restore – Script + Envio Email

  1. Vitor Godoi Responder

    Olá, gostei muito desse script porém quando tento aplicar ele da o erro ….

    Msg 213, Level 16, State 7, Line 1
    Column name or number of supplied values does not match table definition.
    Msg 3013, Level 16, State 1, Line 1
    RESTORE FILELIST is terminating abnormally.

    alterei tudo certinho conforme informado por você….

    • Luiz Lima Autor do postResponder

      Olá Vitor,

      Que bom que você gostou do script! Execute o comando abaixo para verificar a versão do SQL Server que você está utilizando:

      SELECT @@VERSION

      Depois disso, valide na linha 102 do script se vai precisar comentar alguma dessas colunas da tabela temporária:

      Containment tinyint, — Include this column if using SQL 2012
      KeyAlgorithm nvarchar(32), — Include this column if using SQL 2014
      EncryptorThumbprint varbinary(20), — Include this column if using SQL 2014
      EncryptorType nvarchar(32) — Include this column if using SQL 2014

      Espero ter ajudado.

      Qualquer dúvida estou à disposição.

      Abraço.
      Luiz Vitor

  2. Pingback: Script Restore – Restaurando vários arquivos de Backup de Log – Plano de Manutenção – Luiz Lima

Deixe uma resposta