Καθημερινά οι επαγγελματίες πληροφορικής που ασχολούνται με τις βάσεις δεδομένων και κυρίως με τον Microsoft SQL Server έρχόνται αντιμέτωποι με διάφορες προκλήσεις που καλούνται να βγάλουνε εις πέρας με επιτυχία και σε σύντομο χρονικό διάστημα.
Ο χρόνος είναι πολύτιμος και πρέπει αυτές οι διαδικασίες να γίνονται αυτόματα με τα εργαλεία που διαθέτουμε.
Αυτό το άρθρο απευθύνεται τόσο σε έμπειρους DBA/ΙΤ Pro οσο και σε άτομα που δεν είναι τοσο εξοικειωμένα με το Azure Cloud και τo PowerShell Scripting.
Κυρίως, ο σκοπός του άρθρου αυτού είναι να σας παρουσιάσω πως να δημιουργήσετε απλά PowerShell Scripts για Backup και Restore των βάσεων σας καθώς και την προετοιμασία που απαιτείται τόσο στο περιβάλλον(Tenant) του Azure για την δημιουργία του Storage Account και του Container, οσο και στο SQL Server instance για να υλοποιηθεί και να αυτοματοποιήθει μια τέτοια διαδικασία ανάλογα με τις ανάγκες σας.
Θα αναφερθούμε επίσης στην σύνταξη των εντολών Backup-SqlDatabase και Restore-SqlDatabase μέσα απο το PowerShell για Backup και Restore των δεδομένων σας.
Ας προχωρήσουμε στα ενδότερα.
Τα προαπαιτούμενα που χρειάζονται για την υλοποίηση των ανωτέρω ειναι να έχετε προετοιμάσει τα παρακάτω:
- SQL Server 2012 CU 12 or above
- SQL Credential (SQL Server Instance Based)
- Azure Subscription
- Azure Resource Group
- Azure Storage Account
- Azure Blob Container
- PowerShell 3.0 or above versions
- Backup -SqlDatabase cmdlet
- Restore-SqlDatabase cmdlet
Create Resource group
Θεωρούμε δεδομένο οτι υπάρχει ενα Azure Subscription στο οποίο έχουμε κάνει Login και δήμιουργούμε(βήμα1) το Azure Resource Group με το όνομα LabResourceGroup όπως φαίνεται στην παρακάτω εικόνα:
Create Storage Account
Στην συνέχεια στο βήμα 2 δημιουργούμε το Storage Account κάτω απο το ResourceGroup που δημιουργήσαμε στο βήμα 1 και θα το ονομάσουμε labstorageaccountv2 με account type StorageV2 όπως φαίνεται στην παρακάτω εικόνα:
Create Storage Container
Στο βήμα 3 δημιουργούμε ενα Container μεσα απο το storage account που δημιουργήσαμε στο βημα 2 και το ονομάζουμε labcontainer
Get Storage URL
Στo βήμα 4 και στα Properties του labcontainer καλό είναι να αντιγράψουμε σε ένα πρόχειρο το URL που φαίνεται στην παρακάτω είκόνα γιατί θα χρησιμεύσει στην συνέχεια του άρθρου μας
Get Storage Keys
Αντιγράφουμε επίσης το Key1 απο την επιλογή Access keys όπως παρακάτω στην εικόνα
Create Credential
Στην συνέχεια και στο τελευταίο βήμα 5 κάνουμε Login στο Sql Server Instance μας και κάτω απο το Security κάνουμε δεξι κλίκ στο Credentials - New Credential.
Στο Credential name δίνουμε ενα όνομα το οποίο το αντιγράφουμε και αυτό σε ενα πρόχειρο και στο Identity δίνουμε το όνομα του Storage Account που δημιουργήσαμε στο βήμα 2 και στο Password το Key1(Storage Account Key Password) που συλλέξαμε μεσα απο τα Properties του Access Keys στο Azure Tenant μας.
Η βάση που θα γίνει Backup / Restore είναι η LabDatabase .Την σημειώνουμε και αυτη στο προχειρό μας.
Backup Database on Azure Blob Storage
Είμαστε έτοιμοι απο το περιβάλλον που έχουμε δημιουργήσει και τώρα θα ανοίξουμε το WindowsPower Shell ISE
Οπως θα δείτε στην παρακάτω εικόνα το πρόχερο δεν ήταν άλλο απο το ίδιο το PowerShell ISE που τα δεδομένα μας τα πέρασα σαν μεταβλητές για να χρησιμοποιηθoύν απο τις παραμέτρους της εντολής Backup-SqlDatabase και Restore-SQL Database.
Επίσης εχω προσθέσει το $InstanceName, το όνομα της βάσης $databasename.
Το $filename είναι το όνομα του backup της βάσης που θα δημιουργηθεί στο storage container το $CredentialName που είναι το Sql Credential name που δημιουργήσαμε στο SQL Instance μας.
Επίσης θα δείτε το $backupUrlContainer που είναιο το URL του Azure Storage Account με το Container και το $BackupFile που είναι το URL του Storage και το όνομα του αρχείου που θα δημιουργηθεί στο Container.
Αφου προετοιμάσουμε σώστα τις τιμές μας ερχόμαστε παρακάτω να εκτελέσουμε την διαδικασία Backup με την παρακάτω εντολή:
Backup-SqlDatabase -Credential (Get-Credential "sa") -ServerInstance $instanceName -Database $databaseName -BackupFile $backupFile -SqlCredential $credentialName -FormatMedia -SkipTapeHeader -Initialize -Compression On -CopyOnly
Παραπάνω πληροφορίες για την εντολή θα βρείτε στο Link αυτό
H παράμετρος -Credential θα μας σύνδέσει στο SQL instance μα. Tο -ServerInstance μας είναι το SQL instance που είναι η βάση το -FormatMedia και το -SkipTapeHeader κανει overwrite το Backup που έχουμε στο azure blob αν υπάρχει.
Επίσης με την παράμετρο -compress γίνεται compress ή βάση μας και -CopyOnly για να μην χαλασει η αλληλουχία των Backup διαδικασίων που τυχόν μπορεί να έχουμε στο παραγωγικό μας περιβάλλον.
Αν χρησιμοποιήσετε και την παράμετρο -script θα σας κάνει output την T-SQL την οποία μπορείτε να την πάρετε με Copy και να την δοκιμάσετε με τον παραδοσιακό τρόπο μεσα απο το περιβάλλον του SSMS.
Να σημειώσω εδω οτι μπορεί να γίνει χρήση πολλών ακόμα παραμέτρων ανάλογα με τις ανάγκες σας όπως της -EncryptionOption για Encryption της βάσης και της -Checksum για τον έλεγχο και επαλήθευση του Backup που θα δημιουργηθεί στο Azure Container μας.
Εκτελούμε την εντολή και το Backup έχει ολοκληρωθει οπως θα δείτε στην παρακάτω εικόνα
Αν μεταβουμε στο Azure Portal μας και ανοίξουμε το Container μας θα δούμε οτι έχει δημιουργηθεί με επιτυχία η βάση που πήραμε Backup.
Restore SQL database from Azure Blob Storage
Για την εκτέλεση του restore οπως θα δείτε στο image-7 δημιουργήθηκε με την παρακάτω εντολή
Restore-SqlDatabase -Credential (Get-Credential "sa") -ServerInstance "192.168.1.40\SQL02" -Database $databaseName -BackupFile $backupFile -SqlCredential $credentialName -ReplaceDatabase -RelocateFile @($RelocateData,$RelocateLog)
Η παραμετρος (Get-Credential "sa") συνδέεται με το Instance βάση του sql login που έχει οριστεί(Μπορεί να ειναι κ Login με backup operator δικαιώματα) που θα γίνει restore η βάση απο το Azure Blob Storage.
Με την παράμετρο -ServerInstance δηλώνουμε το όνομα του SQL instance ,το -Database το όνομα της βάσης που θα δημιουργηθεί στο Instance το -BackupFile είναι το URL του storage account μας με το όνομα του Backup της βάσης.
Θα δείτε το -ReplaceDatabase που κάνει replace την βάση αν υπάρχει και ειναι το αντιστοιχο WITH MOVE που υπάρχει εδώ και πολλά χρόνια στην T-SQL ,το -Relocatefile που ορίζεi τα Path των MDF και LDF κ έχουν δηλωθεί απο τις μεταβλητές ($RelocateData,$RelocateLog) οπως διακρίνεται στο Image 7.Επίσης με το -Script οπως ισχύει και στην Backup Backup-SqlDatabase μας κάνει export την T-SQL για να την τρέξουμε στο SSMS αν επιθυμούμε.
Περισσότερες πληροφορίες για την Restore-SqlDatabase με μπορείτε να βρείτε και στο Link
Μετα την εκτέλεση της εντολής η βάση μας εγινε Restore με επιτυχία οπως θα δείτε στο Image10
Τα συγκεκριμένα script μπορειτε να τα τροποποιήσετε ανάλογα με τις ανάγκες σας και τις συνθήκες εργασίας και να αυτοματοποιήσετε με αυτο τον τρόπο διαδικασίες που ενδεχομένως προηγουμένως να σας ήταν χρονοβόρες και να απαιτούσαν αρκετό χρόνο για την υλοποιησή τους.
Kyriakos Petsalaris