Als je tijdens een deployment een database wilt verplaatsen naar een andere server, dan gebruik je vaak een backup. Deze restore je dan op de target server. “Maar wat als mijn originele server een nieuwere versie is? Ik heb lokaal een SQL Server 2008R2 Express draaien en nu blijkt de productie server nog SQL 2005 te zijn”. Je krijgt dan de foutmelding ‘the media family on device databasename.bak is incorrectly formed’., maar gelukkig is er een oplossing.

Als je tijdens een deployment een database wilt verplaatsen naar een andere server, dan gebruik je vaak een backup. Deze restore je dan op de target server. “Maar wat als mijn originele server een nieuwere versie is? Ik heb lokaal een SQL Server 2008R2 Express draaien en nu blijkt de productie server nog SQL 2005 te zijn”. Je krijgt dan de foutmelding ‘the media family on device databasename.bak is incorrectly formed’., maar gelukkig is er een oplossing.
De foutmelding
Ook al gebruik je geen functionaliteit die specifiek is voor de nieuwere versie, toch komt deze foutmelding. Dit komt omdat het formaat van het backup bestand vernieuwd is en deze is helaas niet backwards compatible. Het tegenovergestelde is overigens geen enkel probleem. Een SQL 2005 backup bestand zal zonder problemen restoren op een SQL 2008 server.
De oplossing
In SQL Server is bijna alles te scripten. Zo ook je database structuur. Echter heb je dan nog niet de data te pakken. Met de import/export wizzard zou je dan wellicht nog aan de slag kunnen, maar echt makkelijk gaat het niet zijn. Nu is de oplossing eigenlijk super makkelijk, alleen wel goed verstop: We moeten namelijk de database scripten inclusief de data.
In de Object Explorer van SQL Server Management Studio, rechts-klik je op de betreffende database en kiest niet voor “Script Database as”, maar voor “Tasks -> Generate Scripts”.
SQL Server scripting 2008 to 2005
Je komt dan in een Wizard. In de introductiepagina klik je op “Next”
SQL Server scripting 2008 to 2005
In het volgende scherm kunnen we kiezen welke objecten we willen scripten. Aangezien we de gehele database willen scripten kiezen we hier voor ‘Script entire database and all database objects’.
SQL Server scripting 2008 to 2005
Het volgende scherm zijn de scripting options en hier komt “the magic trick”! Klik op de “Advanced” knop.
SQL Server scripting 2008 to 2005
Hierin zitten namelijk de interssantste opties verstopt. In dit geval is het belangrijk om de optie ‘Types of data to script’ te veranderen in ‘Schema and data’. En de optie ‘Script for Server Version’ in de gewenste versie, bijvoorbeeld ‘SQL Server 2005’.

Controleer ook even de andere instellingen, bijvoorbeeld wel of geen triggers, full text indexen, enz.
SQL Server scripting 2008 to 2005
Klik vervolgens op ‘Next’ en ‘Finish’ en de database zou nu compleet gescript moeten worden. Uiteraard is dit alleen mogelijk wanneer er geen objecten in je database zitten die door de gekozen SQL Server versie niet ondersteund worden.
SQL Server scripting 2008 to 2005
Overigens zijn het geen kleine script bestanden. Het script van de Adventureworks database wordt al snel een halve gig. En dat is voor Management Studio nogal een uitdaging. Commandline uitvoeren is dan een optie via command prompt “SQLCMD”. Voor een klein databaseje (zoals mijn EK pool) is het geen enkel probleem.
SQL Server scripting 2008 to 2005