Dicas sobre desenvolvimento de software, gestão e tributações

Rede Social

9 de julho de 2018

Restaurar banco SQL server sem o arquivo .LDF (log)




     Recentemente passei por uma situação onde um bakcup do banco de dados foi feito de forma errada e ao invés de gerado um backup, foram copiados os arquivos .mdf e .ldf, até aí ok, mas o problema é que isso tudo foi feito remotamente e no momento de transferir os arquivos o .ldf foi corrompido.
    Quando o técnico tentou anexar o arquivo .mdf para voltar a utilizar o banco uma mensagem de erro era exibida algo como:
“Log file ‘D:\MeuDb.ldf’ does not match the primary file.  It may be from a different database or the log may have been rebuilt previously.The log cannot be rebuilt when the primary file is read-only.”
    Isso ocorre quando o banco de dados não é colocado offline antes de copiar os arquivos, portanto o arquivo primário como é dito na mensagem não aceita o comando é como se estivesse sempre vinculado ao arquivo de log.
    Mas mesmo assim existe uma forma de "enganar" o SQL Server e conseguir utilizar o banco de dados basta seguir os passos.

obs. Como na mensagem acima vou colocar o nome fictício do meu banco como Db, então nas descrições sempre que ver MeuDb coloque o nome do seu banco de dados. E durante o processo abaixo algumas mensagens de erro serão exibidas pelo SQL Server, continue seguindo o passo-a-passo mesmo assim.

1 - Criar um banco de dados qualquer com o mesmo nome do banco de dados que estamos tentando recuperar, se atente para os arquivos .mdf e .ldf que devem ser iguais aos que eram do banco anterior.
2 - Coloque o banco criado como somente leitura e depois como offline
alter database MeuDb set read_only
alter database MeuDb set offline
3 - Substitua o arquivo mdf do novo banco pelo arquivo que você está recuperando
4 - Volte o banco como online
alter database MeuDb set online
5 - Sete o banco para leitura e escrita
alter database MeuDb set read_write
6 - Coloque o banco em emergência e como usuário único
alter database MeuDb set emergency
alter database MeuDb set single_user
7 - Exclua o arquivo de log do banco novo
8 - Recrie o log
alter database MeuDb rebuild log on
(Name= MeuDb_log,filename='CaminhoDoArquivo\MeuDb.ldf')
9 - Defina o banco como pronto para uso
alter database MeuDb set online
alter database MeuDb set MULTI_USER

Pronto você já pode voltar a usar seu banco de dados.

Um comentário: