Error 3154: The backup set holds backup of a database other than the existing database

Hace un tiempo moviendo una base de datos de SQL Server de un equipo a otro obtuve un error al realizar el RESTORE con el siguiente comando:

 
RESTORE DATABASE [Recurso] 
FROM  DISK = N'O:\MSSQL\Recurso\Recurso20101125.bak' 
WITH 
MOVE N'Recurso_data' TO N'O:\MSSQL\Recurso\Recurso.mdf',  
MOVE N'Recurso_log'  TO N'O:\MSSQL\Recurso\Recurso.ldf',  
NOUNLOAD,  
STATS = 10
GO

El error fue el siguiente

Error 3154: The backup set holds a backup of a database other than the existing database.

Este error habitualmente significa que en la instancia donde se quiere hacer el RESTORE hay una base de datos con el mismo nombre. Por ello, la solución es una de las siguientes alternativas:

  1. Agregar WITH REPLACE el comando RESTORE para indicarle que debe sobre escribir la base de datos. O su alternativa de la opcion de sobre escritura al usar el Management Studio.
  2. Eliminar la base de datos que está en conflicto primero y luego restaurar la base de datos utilizando el comando RESTORE.

Lo extraño fue que había hecho el Backup mediante T-SQL con lo cual estaba totalmente seguro de que el archivo de Backup contenía la base de datos correcta y que en el destino no había una base de datos con el mismo nombre ya que era un equipo recién instalado.

Esta es la sentencia que usé para hacer el backup en el equipo origen:

BACKUP DATABASE [Recurso] 
TO  DISK = N'C:\Backup\Recurso20101125.bak' 
WITH 
NOFORMAT, 
NOINIT,  
NAME = N'Recurso-Full Database Backup', 
SKIP, 
NOREWIND, 
NOUNLOAD,  
STATS = 10
GO

La solución al Error 3154 al hacer Restore

La solución es simple e ingeniosa. Únicamente debemos “mentirle” para que crea que debe sobrescribir una base de datos (aunque en realidad no existe) utilizando WITH REPLACE.  De esta manera, aunque la base de datos a reemplazar no existe, el comando resuelve el problema y permite realizar el RESTORE sin inconvenientes.

Ejemplo

RESTORE DATABASE [Recurso] 
FROM  DISK = N'O:\MSSQL\Recurso\Recurso20101125.bak' 
WITH REPLACE,  
MOVE N'Recurso_data' TO N'O:\MSSQL\Recurso\Recurso.mdf',  
MOVE N'Recurso_log'  TO N'O:\MSSQL\Recurso\Recurso.ldf',  
NOUNLOAD,  
STATS = 10
GO

Dejá un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *