Erro 3154 ao restaurar um backup usando WITH REPLACE


16

Eu tenho o SQL 2012 com SP1 instalado no meu computador. Eu fiz um backup de um banco de dados test.bak.

Eu tenho um banco de dados com o nome test2que é o mesmo banco de dados, mas os dados foram alterados.

Eu quero restaurar test.baksobre o test2banco de dados.

Estou sempre recebendo o erro:

Erro 3154: O conjunto de backup mantém um backup de um banco de dados diferente do banco de dados existente.

Eu tentei:

  1. Eu cliquei direito test2 -> Restore database -> From device

    Eu escolhi test.bake verifiquei, With Replacemas recebo o erro.

  2. Então eu tentei clicar com o botão direito do mouse em test2 -> Restore file and filegroups

    Eu escolhi test.bake verifiquei, With Replacemas recebo o erro.

Posso excluir meu banco de dados antigo e, em seguida, restaurar meu backup com o nome correto, mas quando estava usando o SQL 2008, não tive problemas em restaurar um banco de dados existente.

Parece que desde que eu uso o SQL2012, recebo muito esse erro!

Respostas:


12

Você deve usar WITH REPLACEe, em geral, evitar o uso de apontar e clicar no Management Studio - eles são inflexíveis e geralmente apresentam bugs.

Isso funcionou para mim:

USE [master];
GO

CREATE DATABASE test;
GO

CREATE DATABASE test2;
GO

BACKUP DATABASE test TO DISK = 'c:\temp\test.bak' WITH INIT, COMPRESSION;
GO

RESTORE DATABASE test2
  FROM DISK = 'c:\temp\test.bak'
  WITH REPLACE,
  MOVE 'test' TO 'c:\temp\test2.mdf',
  MOVE 'test_log' TO 'c:\temp\test2.ldf';

Além disso, certifique-se de que, ao fazer backup dos bancos de dados, use WITH INITe / ou não aponte o dispositivo para um arquivo que já contenha um backup (já que talvez não seja o mesmo banco de dados do qual você está fazendo backup agora - especialmente se você reutilizar nomes como test...)


@AaronBertrand fyi, esse recurso existe. O que eu costumo fazer é usar a interface do usuário e criar um script para garantir que tudo esteja bem. Não é um monte de erros, sim.
usr

2

1) Use WITH REPLACEenquanto estiver usando o RESTOREcomando.

2) DROPo banco de dados mais antigo que está em conflito e restaura novamente usando o RESTOREcomando

Não há nenhum problema com a versão do SQL Server. Como Aaron apontou, também sou capaz de restaurar o banco de dados de 2008 a 2012 e as mesmas versões.


2

Você está restaurando o banco de dados errado. Não pense nisso como "restaurando test2com um backup de test", pense em "restaurar meu backup de, testmas renomeie-o como test2". Você pode escolher a tarefa de restauração teste colocar test2no campo "Para o banco de dados:".

Como Aaron menciona, aprenda o script em vez de confiar no assistente - é mais claro o que está acontecendo para onde.


2

Você ainda pode fazer isso, mas isso requer uma etapa extra.

Abra a caixa de diálogo de restauração, faça suas seleções habituais de acordo com os hábitos de 2008. Se o banco de dados original for DB, escolha o dispositivo DB.bak para Source e altere o nome do Destination para DBTest. Em seguida, em Selecione uma página (canto superior esquerdo), onde você vê Geral / Arquivos / Opções - escolha Arquivos. Olhe na grade. Você verá colunas para Nome do arquivo original e Restaurar como nome do arquivo. Aumente manualmente o último e digite o novo nome (se o nome original do banco de dados for DB e você desejar criar o DBTest, altere .... \ DB.mdf para ... \ DBTest.mdf, etc.)

Isso aceitará seu arquivo .bak para DB como origem e DBTest como destino. Você também pode precisar ir para a página Opções e escolher Com Substituir. Preciso de outros motivos, portanto não posso testá-lo sem essa opção.


2

A resposta correta, como apontado, é usar a WITH REPLACEopção

Eu só quero ressaltar que você pode obter o erro na pergunta mesmo quando estiver usando WITH REPLACE, se tentar restaurar de um backup diferencial (sem o completo).


Provavelmente eu não tinha pontos suficientes para comentar no momento desta resposta, só queria ressaltar que você pode receber o erro mesmo ao usar "WITH REPLACE" se tentar restaurar de um backup diferencial (sem o completo)
Brimstedt 13/08/2015

0

Espero que isso funcione.

  1. Depois de definir o caminho para restaurar o arquivo.
  2. Clique em "Opções" no lado esquerdo.
  3. Marque a caixa de seleção - "Fechar conexões existentes com o banco de dados de destino".
  4. Clique OK. insira a descrição da imagem aqui

-4

Por favor, pare o servidor em execução e, em seguida, restaure o db, ele irá ajudá-lo. :)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.