woensdag 17 april 2013

Backups van Windows Azure SQL Database

Hoe veilig is jouw data in de cloud eigenlijk? Dat hangt helemaal af van wat je onder veilig verstaat. Veiligheid kan betrekking hebben op de mate waarin derden over jouw data kunnen beschikken. Nou, dan ben je in de cloud niet goed af, tenminste, als de cloudprovider een Amerikaans bedrijf is (en dat is Microsoft). Na de aanslagen van 9/11 heeft George W. Bush besloten om de USA Patriot Act (United and Strengthening America by Providing Appropiate Tools Required to Intercept and Obstruct Terrorism) in te stellen. Deze act stelt de Amerikaanse overheid in staat om data van de systemen van Amerikaanse bedrijven op te vragen. Als jouw data toevallig op een Amerikaans systeem staat, dan kan de overheid die dus ook inzien. Het maakt daarbij niet uit waar in de wereld die data staat. Kort samengevat, als jouw data in Windows Azure draait, ook al staat het datacentrum fysiek in Nederland, dan kan de Amerikaanse overheid die data inzien. Dit geldt dus ook voor andere cloudproviders zoals Google en Amazon. Deze act is in 2011 door Barack Obama nog eens met vier jaar verlengt. Je zit er dus tot 2015 aan vast.
In dit artikel wil ik het hebben over een heel andere vorm van veiligheid, namelijk in welke mate mijn data beschermd is tegen hardware failures, datacorruptie en andere rampen.

Wanneer je in Windows Azure SQL Database een database aanmaakt, worden er eigenlijk drie databases aangemaakt. Eén is de primaire replica. Dit is de database waarop jij jouw werkzaamheden uitvoert. Daarnaast zijn er twee secundaire replica's waar je verder niets mee doet. Wanneer de primaire replica eruit vliegt, zal onmiddelijk een secundaire replica worden ingeschakeld. Zo'n secundaire replica is een exacte kopie van de primaire. Wanneer er een transactie plaatsvindt op de primaire replica, zal die transactie pas slagen als de transactie op één secundaire replica ook gelukt is (Quorum Based Commit). Daarnaast houdt Windows Azure SQL Database ook nog eens kopieën van de afgelopen veertien dagen bij. Helaas heb jij aan die duplicaten niet zoveel, ze worden alleen intern gebruikt mocht het eens helemaal uit de klauwen lopen.

Het komt er dus op neer dat je zelf moet zorgen voor backups, maar hoe doe je dat eigenlijk in Windows Azure SQL Database? Daar zijn een aantal strategieën voor bedacht:
Een kopie maken van de database is de meest eenvoudige. Er is maar één statement voor nodig en, niet geheel onbelangrijk, hij is volledig consistent met de originele database. Wijzigingen tijden de kopieeractie worden meteen gerepliceerd naar de kopie. Nadeel is dat je een of meerdere databases in de cloud krijgt en dat kost weer centen. Er zijn twee situaties denkbaar:
  1. Een kopie naar een database op dezelfde server
  2. Een kopie naar een database op een andere server.
Een kopie maken naar dezelfde server is één statement in Sql Azure

CREATE DATABASE DatabaseB AS COPY OF DatabaseA;

Daarvoor moet je wel eerst op de master database inloggen (afbeelding 1)
Afbeelding 1. Inloggen op de master database
Een kopie van de database naar een andere server werkt nagenoeg hetzelfde. Je logt eerst in op de master database van de bestemmingsserver en dan voer je het volgende commando in:

CREATE DATABASE DatabaseB AS COPY OF servernaam.DatabaseA

Bijvoorbeeld:

CREATE DATABASE DatabaseB AS COPY of diid89wef.DatabaseA

Je kunt er ook voor kiezen om de backup via een backup package (BACPAC) te laten verlopen. Hiervoor kun je het beste eerst een kopie van de database maken zoals hierboven beschreven. Op deze manier krijg je een consistente backup. Daarna ga je naar de Azure Portal en selecteer je de gekopieerde database waarvan je de BACPAC maakt. Vervolgens klik je op de "Export" knop onderin het beeld. Dat tovert het schem in afbeelding 2 tevoorschijn.
Afbeelding 2. Het export scherm om de BACPAC te genereren.
Op dit scherm specificeer je eerst de naam van de BACPAC. Standaard geeft Windows Azure jou al een suggestie. Vervolgens moet je de naam van een blob storage specificeren. Dit is de storage waarin de BACPAC wordt geplaatst. Eventueel kun je een nieuwe container (een logische verzamelnaam voor gelijksoortige blobs) specificeren. Tenslotte de credentials opgeven en je bent klaar om te gaan. Wanneer de BACPAC naar de blob storage is gekopieerd, kun je hem met een Azure Storage Browser, zoals CloudBerry, CloudXplorer, Cloud Storage Studio of gewoon vanuit Visual Studio 2012, downloaden. Je kunt hem natuurlijk ook in de blob storage laten staan om, indien nodig, meteen te restoren want dat zul je toch vanuit de storage moeten doen.

De laatste methode om backups te maken gaat via SQL Database Migration Wizard, of liever gezegd met de tools SqlAzureMWBatchBackup en SqlAzureMWBatchUpload. Dit zijn twee command-line tooltjes die je dus ook in een batch programma kunt laten draaien. De commando's zijn vrij eenvoudig: 

SQLAzureMWBatchBackup -S SERVER.database.windows.net -U "username" 
                                       -P "password" -D Database 
[-S target server name] 
[-U username] 
[-P password] 
[-D source database name] 
[-o output process results file] 
[-O output directory for all files] 
[-T trusted connection] 

Het mooie is dat alles ook in de configuratiefile kan worden opgenomen waardoor het starten nog eenvoudiger wordt. Om de database weer te herstellen gebruik je SqlAzureMWBatchUpload.exe. Het commando ziet er als volgt uit:

SQLAzureMWBatchUpload -S SERVER.database.windows.net -U "username" 
                                      -P password -D Northwind -d -s 1 
[-S target server name] 
[-U username] 
[-P password] 
[-D target database name] 
[-i TSQL input file] 
[-o output file] 
[-e database edition (web or business)] 
[-s database size (1, 5, 10, 20, 30, 40 or 50)] 
[-T trusted connection] 
[-d drop existing database]

Ook deze schakelopties kunnen in een configuratiebestand worden opgenomen.

Ofschoon een backup maken vanuit Windows Azure SQL Database (nog) niet mogelijk is, zijn er tal van alternatieven. Een kopie maken van de database is een veilige methode die ook wijzigingen tijdens het backup proces nog meeneemt. Nadeel is dat je hiervoor wel een extra database in de cloud krijgt en dat kost geld. Wel kun je van zo'n kopie een BACPAC maken die je vervolgens downloadt. Het vergt wel wat gepeuter om die BACPAC van uit de storage te krijgen. SqlAzureMW blijkt wederom een veelzijdig tooltje te zijn dat ook backups kan maken. Het uitvoeren vanaf de command-line is een groot voordeel waardoor de backupscommando's in een script kunnen worden ondergebracht om vervolgens, via de scheduler, op gezette tijden te worden uitgevoerd.

Update: Eindelijk is een automatische exportfunctionaliteit aan Windows Azure toegevoegd: http://blog.pasit.nl/2013/08/windows-azure-sql-database-backup.html.

Geen opmerkingen:

Een reactie posten