Hace poco migrando de equipo y edición (pero no de versión) una base de datos de SQL Server utilizada por Blackberry que estaba en un SQL Server 2005 SP3 me dio un error al realizar un RESTORE con el siguiente comando en el nuevo servidor:
RESTORE DATABASE [BESMgmt]
FROM DISK = N'O:\MSSQL\Blackberry\BESMgmt20101125.bak'
WITH MOVE N'BESMgmt_data'
TO N'O:\MSSQL\Blackberry\BESMgmt.mdf',
MOVE N'BESMgmt_log'
TO N'O:\MSSQL\Blackberry\BESMgmt.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.
Lo extraño fue que había hecho el Backup con el siguiente comando con lo cual estaba totalmente seguro que el archivo de Backup contenía la base de datos correcta.
BACKUP DATABASE [BESMgmt]
TO DISK = N'C:\Backup\BESMgmt20101125.bak'
WITH NOFORMAT, NOINIT,
NAME = N'BESMgmt-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
La solución
La solución es simple e ingeniosa. Únicamente debemos “mentirle” para que crea que debe sobrescribir una base de datos existente utilizando WITH REPLACE. Aunque la base de datos no existe la ejecución es exitosa y resuelve el problema, permitiendo realizar el RESTORE.
Ejemplo
RESTORE DATABASE [BESMgmt]
FROM DISK = N'O:\MSSQL\Blackberry\BESMgmt20101125.bak'
WITH REPLACE,
MOVE N'BESMgmt_data'
TO N'O:\MSSQL\Blackberry\BESMgmt.mdf',
MOVE N'BESMgmt_log'
TO N'O:\MSSQL\Blackberry\BESMgmt.ldf',
NOUNLOAD, STATS = 10
GO