Temos um procedimento armazenado que leva o backup de um banco de dados para o local especificado. Às vezes, o processo de backup é executado mais de uma vez. Isso faz com que haja mais de um conjunto de backup no mesmo nome de arquivo. Quando escrevemos T-SQL para restaurar o banco de dados de destino usando este arquivo de backup, como podemos dizer ao SQL para restaurar o conjunto de backup de banco de dados mais recente no banco de dados de destino (usando o comando T-SQL)?
Quando restauramos o backup usando o estúdio de gerenciamento do MS SQL, podemos simplesmente selecionar o conjunto de backup que queremos restaurar. Mas preciso executar a restauração usando T-SQL e me perguntando como posso determinar que o SQL usa o conjunto de backup de banco de dados mais recente para restaurar. Por exemplo, na imagem abaixo, desejo restaurar o último conjunto de backup (destacado em amarelo):
Eu verifiquei este site, mas não consegui encontrar a resposta. Agradeço se puder ajudar.
Obrigado.
Se você não tiver acesso ao servidor original e tudo o que tiver for o arquivo de backup, precisará restaurar os cabeçalhos do arquivo de backup primeiro para ver o que há dentro dele.
Você pode fazer isso por:
Agora você tem uma tabela temporária (
#headers
) que contém detalhes de todos os backups contidos nesse arquivo de dispositivo.Para encontrar o backup completo do banco de dados mais recente, filtramos apenas os backups completos do banco de dados (
backupType=1
) e, em seguida, procuramos o backup mais recente no dispositivo, que será aquele com o maior LSN. Isso nos dá o valor da posição, que é usado noRESTORE
comando para especificar ao SQL Server qual backup queremos restaurar:Como você disse ainda terá acesso ao servidor original, podemos então consultar as tabelas no msdb que o SQL Server usa para armazenar essas informações.
As consultas a seguir pressupõem que você as esteja executando em uma sessão SQL no servidor original. Se você não tem permissão para fazer isso, precisará procurar usar um servidor vinculado e nomenclatura de 4 partes.
Existem 2 maneiras de especificar o conjunto de backups que deseja examinar. Uma é através do caminho para o arquivo de backup, a outra é referenciando o nome no dispositivo de backup. Incluí ambos nesta consulta, com algumas notas sobre quais linhas comentar, dependendo de como você está fazendo isso.
Isso produzirá uma
RESTORE
instrução que você pode executar em uma sessão separada do SSMS. Também incluí um exemplo na parte inferior de como você pode automatizar isso, embora queira fazer alguns testes antes para ter certeza de que está fazendo o que deseja.Isso deve lhe dar um começo: