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:
- 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.
- 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
0 Comentarios