donderdag 1 augustus 2013

Windows Azure Sql Database backup

Een heet hangijzer in Windows Azure Sql Database was de beperking om backups te maken van jouw database in de cloud. Er waren allerlei kunstgrepen nodig om toch maar een geldige kopie van de database te krijgen. In een eerdere blog heb ik een aantal van die kunstgrepen beschreven. De beste oplossing was om een kopie van de database te maken en deze naar een backup package (bacpac) te exporteren. Sinds een week is het mogelijk om dit proces door Windows Azure te laten uitvoeren.

Om een backup te maken van de database, ga je eerst naar de Portal van Windows Azure. Van daaruit ga je naar de database groep en selecteer je de database die je wilt exporteren. In het menu van de database is nu een tab erbij gekomen: Configuration. Je komt dan uit op het venster van afbeelding 1.

Afbeelding 1. Het exportscherm om de Windows Azure Sql Database te exporteren.
De inhoud van dit venster spreekt redelijk voor zich. De "Export Status" zet je op automatic. Vervolgens specificeer je een storage account waarin de backup package (bacpac) wordt opgeslagen. Daarnaast zul je moeten aangeven om de hoeveel dagen deze export moet worden uitgevoerd en hoe laat. Dit is even een lastig gegoochel met de UTC tijd. In Nederland moet je één of twee uur van de huidige tijd aftrekken afhankelijk van de winter- of zomertijd. Bij Retention geef je aan  hoe lang je de bacpac wilt bewaren. Ofschoon schijfruimte in overvloed aanwezig is, is het niet gratis. Met deze automatische weggooiactie voorkom je onverwachte kosten. Zorg wel dat je ten minste één bacpac bewaard. Dat kun je bewerkstelligen door de checkbox "Always keep at least one export" aan te vinken. Tenslotte specificeer je de loginnaam en het wachtwoord voor de database server. De automated export zal namelijk een tijdelijke kopie van de database op de server maken waarvan de bacpac wordt gegenereerd. Vergeet niet op de "Save" knop onderin beeld te klikken. 
Let ook even op de setting "Allowed Services" in afbeelding 2. Je vindt hem bij de configuratie van de database server (waar je ook de toegestane ip-adressen opgeeft). Zorg dat die op "Yes" staat, anders kan de automated export geen verbinding maken met de server.


Afbeelding 2. Zorg ervoor dat Windows Azure Services op "Yes" staat.

Wanneer de export geslaagd is, zie je in de storage de volgende container staan (afbeelding 3) met daarin de gegenereerde bacpac


Afbeelding 3. De door de Automated Export aangemaakte container waarin de bacpac staat.

Als eenmaal zo'n bacpac aanwezig is, kun je vrij eenvoudig een database hiervan maken. Ga hiervoor naar de "Databases" in de Azure Portal en selecteer "Import" (onderin beeld). Het leidt tot het importvenster uit afbeelding 4.


Afbeelding 4. Een oude bekende. Het importvenster om bacpacs te importeren.
Hier selecteer je de bacpac, naam van de database en de database server, waarop hij komt te draaien. Vergeet niet de "Advanced Settings" te selecteren als je meer wilt dan die standaard 1GB Web database.

Het is ook mogelijk om de bacpac op een on premise SQL Server te importeren. In Sql Server Managment Studio activeer het het contextmenu op de "databases" node en selecteer je "Import Data-tier application...". Je wordt dan door de wizard uit afbeelding 5 geleid (introductiescherm achterwege gelaten).


Afbeelding 5. De import van de bacpac in SSMS.
Aanvankelijk gaf deze import de volgende fout:

Internal Error.  The internal target platform type SqlAzureDatabaseSchemaProvider does not support schema file version '2.5'.

Dit probleem werd verholpen door de laatste versie van SQL Server Data Tools te installeren.

Automated Export is wederom een welkome aanwinst in Windows Azure. Je kunt nu eenvoudig, op gezette tijden, een backup van de database maken. Hij is vrij lomp in die zin dat het alles of niets is, maar het is in ieder geval een begin. Een groot nadeel vind ik het afhandelen van triggers in de database. In tenminste één geval bleek de import niet te slagen door een lastige trigger. Omdat een bacpac eigenlijk gewoon een .zip bestand is, kun je nog wel wat morrelen aan de inhoud, maar het zou beter zijn als de activering van triggers bij import optioneel zou zijn.
Voor het besteproduct is de huidige oplossing echter redelijk werkbaar.

Geen opmerkingen:

Een reactie posten