Restaurar una DB antigua en instancia moderna


Esta pregunta es algo común en los foros y la respuesta es no, no es posible a menos que migres todos los objetos como scripts o algunas herramientas de vendedores pueden hacer esto de manera semi automática. Este post te dirá un poco el cómo detectar esto fuera de prueba y error.

El error normalmente nos dará un dialogo como el de arriba o como este código. Lo cual puede ser molesto pero no pasar a mayores y bastante atendible cuando hablamos de versiones mayores cómo 2005, 2008, 2008 r2, 2012, 2014, 2016 pero que pasa entre service packs o cumulative updates, en ocasiones esto también puede suceder entre ellas y cuando evalúas una migración de varias bases puede ser catastrófico que no puedas realizarla por no verificar este punto.

1
2
3
4
5
6
Restore failed for Server '...\SQLEXPRESS'.  (Microsoft.SqlServer.SmoExtended)
System.Data.SqlClient.SqlError: The database was backed up on a server running version
10.50.1600. 
That version is incompatible with this server, which is running version 10.00.2531. 
Either restore the database on a server that supports the backup, or use a backup 
that is compatible with this server. (Microsoft.SqlServer.Smo)

La mejor forma de verificar esto es por medio de este comando

1
2
dbcc traceon(3604);
dbcc dbtable('nombreBase') WITH TABLERESULT

El cual nos regresara mucha información pero lo que nos interesa es:

1
DBTABLES: DBTABLE @0x0000000477F8D580 database version  782


La versión que aquí vemos es 782, seria una buena practica hacer una comprobación contra la master del servidor destino, si este número es mayor podemos estar seguros que no tendremos problema al restaurar

Y si tengo solo un backup?

Pero qué pasa si no tenemos ya la base origen y solo tenemos un backup? no hay problema podemos realizar un restore con headers only para ver que versión tenemos.

1
RESTORE HEADERONLY FROM DISK = N'D:\SQL\Backup\SQLSentry.bak' 

Lo cual nos data el siguiente resultado entre otros, pero pondremos el que nos interesa


1
2
DatabaseVersion
782

Con eso podemos ahorrar tiempo y ver si no tendremos problemas para hacer una restauración exitosa sin problemas de compatibilidad entre versiones.

PD: Gracias a Paul Randal por recordarme como obtener el número de la versión de base de datos

Comentarios

  1. entonces la versión es importante para restaurar una base y también la intercalación de instalación o no??

    ResponderBorrar
    Respuestas
    1. Disculpa Luis a que te refieres con intercalación, te refieres a collation (disculpa luego los términos en español se me escapan).

      Mas que nada no puedes restaurar una nueva en una instancia mas vieja.

      Borrar

Publicar un comentario

Entradas más populares de este blog

Mover indices no clustered a un nuevo filegroup