Error 3154 al restaurar una copia de seguridad con WITH REPLACE

16

Tengo SQL 2012 con SP1 instalado en mi computadora. Hice una copia de seguridad de una base de datos test.bak.

Tengo una base de datos con el nombre test2que es la misma base de datos, pero los datos cambiaron.

Quiero restaurar test.baksobre la test2base de datos.

Siempre recibo el error:

Error 3154: el conjunto de copia de seguridad contiene una copia de seguridad de una base de datos distinta de la base de datos existente.

Lo intenté:

  1. Hice clic derecho en test2 -> Restore database -> From device

    Elegí test.baky verifiqué With Replacepero recibí el error.

  2. Luego intenté hacer clic derecho en test2 -> Restore file and filegroups

    Elegí test.baky verifiqué With Replacepero recibí el error.

Puedo eliminar mi base de datos anterior y luego restaurar mi copia de seguridad con el nombre correcto, pero cuando estaba usando SQL 2008, no tuve problemas para restaurar una base de datos existente.

Parece que desde que uso SQL2012, ¡me sale mucho este error!

Danielle Paquette-Harvey
fuente

Respuestas:

12

Debería usar WITH REPLACEy, en general, evitar usar las cosas de apuntar y hacer clic en Management Studio: son inflexibles y a menudo tienen errores.

Esto funcionó para mí:

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';

También debe asegurarse cuando realiza una copia de seguridad de las bases de datos que usa WITH INITy / o no apunta el dispositivo a un archivo que ya contiene una copia de seguridad (ya que podría no ser la misma base de datos de la que está haciendo una copia de seguridad ahora, especialmente si reutiliza nombres como test...)

Aaron Bertrand
fuente
@AaronBertrand fyi, esa característica existe. Lo que suelo hacer es usar la interfaz de usuario y escribirla para asegurarme de que todo está bien. No son un montón de errores, sí.
Usr
2

1) Usar WITH REPLACEmientras se usa el RESTOREcomando.

2) DROPla base de datos más antigua que está en conflicto y restaurar nuevamente usando el RESTOREcomando.

No hay problema con la versión de SQL Server. Como Aaron señaló, también puedo restaurar la base de datos de 2008 a 2012 y las mismas versiones.

Kin Shah
fuente
2

Estás restaurando la base de datos incorrecta. No piense que es "restaurar test2con una copia de seguridad de test", piense "restaurar mi copia de seguridad testpero cámbiele el nombre por test2". Puede elegir la tarea de restauración testy poner test2en el campo "A la base de datos:".

Como Aaron menciona, aprenda el guión en lugar de confiar en el asistente: es más claro en cuanto a qué va a dónde.

SQLFox
fuente
2

Todavía puede hacer esto, pero requiere un paso adicional.

Abra el diálogo de restauración, realice sus selecciones habituales según los hábitos de 2008. Si la base de datos original es DB, elija el dispositivo DB.bak para Origen y cambie el Nombre de destino a DBTest. Luego, en Seleccionar una página (esquina superior izquierda), verá General / Archivos / Opciones: elija Archivos. Mira en la cuadrícula. Verá columnas para Nombre de archivo original y Restaurar como nombre de archivo. Amplíe manualmente este último y escriba el nuevo nombre (si el nombre original de la base de datos es DB y desea crear DBTest, cambie .... \ DB.mdf a ... \ DBTest.mdf, etc.)

Esto aceptará su archivo .bak para DB como origen y DBTest como destino. Es posible que también deba ir a la página Opciones y elegir Con reemplazar. Lo necesito por otros motivos, por lo que no puedo probarlo sin esta opción.

Debby
fuente
2

La respuesta correcta, como se señaló, es usar la WITH REPLACEopción.

Solo quiero señalar que puede obtener el error en la pregunta incluso cuando lo usa WITH REPLACE, si intenta restaurar desde una copia de seguridad diferencial (sin la completa).

Brimstedt
fuente
Probablemente yo no tengo suficientes puntos para comentario en el momento de esta respuesta, sólo quería señalar que se puede obtener el error incluso cuando se utiliza "CON CAMBIAR" si intenta restaurar desde una copia de seguridad diferencial (sin el lleno)
Brimstedt
0

Espero que esto funcione.

  1. Una vez que establezca la ruta para restaurar el archivo.
  2. Haga clic en "Opciones" en el lado izquierdo.
  3. Marque la casilla de verificación - "Cerrar conexiones existentes a la base de datos de destino".
  4. Haga clic en Aceptar. ingrese la descripción de la imagen aquí
Vinu M Shankar
fuente
-4

Detenga su servidor en ejecución y luego restaure db, lo ayudará. :)

Dupinder Singh
fuente