Ripristinare un backup su una versione precedente di SQL Server


Microsoft impedisce di ripristinare un backup creato con una versione successiva di SQL Server. Esaminiamo un workaround per aggirare il problema. Microsoft per scelta progettuale impedisce di ripristinare un backup creato da una versione successiva di SQL Server su una versione precedente. Anche se il backup fa riferimento ad un database in compatibilità dell'SQL Server precedente.

Immaginiamo di stare sviluppando una applicazione sul proprio computer dove c'è SQL Server 2008 R2. Progettiamo un database in compatibilità SQL Server 2008. Una volta finito, facciamo il backup lo spostiamo sul server dove c'è installato SQL Server 2008. Ripristiniamo il backup e dopo pochi secondi si blocca e ritorna questo errore:

The database was backed up on a server running version %ls. That version is incompatible with this server, which is running version %ls. Either restore the database on a server that supports the backup, or use a backup that is compatible with this server.

Purtroppo non c'è alcun verso per farglielo digerire. Se il database che abbiamo progettato non ha ancora dati dentro, la soluzione è molto semplice. Si fa creare dal Managment Studio lo script di generazione del database e lo si fa eseguire in remoto.

Se sono presenti dati invece abbiamo davanti a noi due strade che dipendono dalle dimensioni del database stesso. Se è dell'ordine delle poche migliaia di record, possiamo pensare di far scriptare oltre alla struttura anche i dati. Se per caso abbiamo già decine di migliaia di record o più, allora la questione si fa spinosa. L'unica maniera è fare una importazione di dati da un db all'altro. Però c'è il grosso rischio che ci siano blocchi continui, per violazioni di integrità referenziali. Per evitare di importare una tabella per volta, conviene disabilitare prima i vincoli già presenti sul database, come ho spiegato nel post precedente a questo.

Prima di iniziare l'importazione, non dimenticate di abilitare anche l'IDENTITY INSERT per ogni tabella, altrimenti o non vengono inseriti i dati oppure, peggio, vengono create chiavi nuove per le tabelle.

Con un po' di fatica alla fine il database viene importato. Il consiglio, però, è di verificare prima su che SQL Server andrete a pubblicare il database, e se è precedente a quello su cui di solito sviluppate, o fatevi una macchina virtuale con quella versione di SQL Server o sviluppate il db direttamente sul server remoto (se possibile). Vi risparmierete ore di perdita di tempo.

Post correlati: