sqlschool.gr logo

articles

Articles of SQLschool.gr Team

Backup και Restore SQL Database on Azure Blob Storage using PowerShell

Kyriakos Petsalaris
Sunday 12 April 2020

Καθημερινά οι επαγγελματίες πληροφορικής που ασχολούνται με τις βάσεις δεδομένων και κυρίως με τον 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 όπως φαίνεται στην παρακάτω εικόνα:


Image-1
image

Create Storage Account

Στην συνέχεια στο βήμα 2 δημιουργούμε το Storage Account κάτω απο το ResourceGroup που δημιουργήσαμε στο βήμα 1 και θα το ονομάσουμε labstorageaccountv2 με account type StorageV2 όπως φαίνεται στην παρακάτω εικόνα:


Image-2
image

Create Storage Container

Στο βήμα 3 δημιουργούμε ενα Container μεσα απο το storage account που δημιουργήσαμε στο βημα 2 και το ονομάζουμε labcontainer


Image-3
image

Get Storage URL

Στo βήμα 4 και στα Properties του labcontainer καλό είναι να αντιγράψουμε σε ένα πρόχειρο το URL που φαίνεται στην παρακάτω είκόνα γιατί θα χρησιμεύσει στην συνέχεια του άρθρου μας


Image-4
image

Get Storage Keys

Αντιγράφουμε επίσης το Key1 απο την επιλογή Access keys όπως παρακάτω στην εικόνα


Image-5
image

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 .Την σημειώνουμε και αυτη στο προχειρό μας.


Image-6
image

Backup Database on Azure Blob Storage

Είμαστε έτοιμοι απο το περιβάλλον που έχουμε δημιουργήσει και τώρα θα ανοίξουμε το WindowsPower Shell ISE

Οπως θα δείτε στην παρακάτω εικόνα το πρόχερο δεν ήταν άλλο απο το ίδιο το PowerShell ISE που τα δεδομένα μας τα πέρασα σαν μεταβλητές για να χρησιμοποιηθoύν απο τις παραμέτρους της εντολής Backup-SqlDatabase και Restore-SQL Database.


Image 7
image

Επίσης εχω προσθέσει το $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 έχει ολοκληρωθει οπως θα δείτε στην παρακάτω εικόνα


Image-8
image

Αν μεταβουμε στο Azure Portal μας και ανοίξουμε το Container μας θα δούμε οτι έχει δημιουργηθεί με επιτυχία η βάση που πήραμε Backup.


Image-9
image

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


Image-10
image

Τα συγκεκριμένα script μπορειτε να τα τροποποιήσετε ανάλογα με τις ανάγκες σας και τις συνθήκες εργασίας και να αυτοματοποιήσετε με αυτο τον τρόπο διαδικασίες που ενδεχομένως προηγουμένως να σας ήταν χρονοβόρες και να απαιτούσαν αρκετό χρόνο για την υλοποιησή τους.


Kyriakos Petsalaris

Comments

28 Apr 2020 @ 1:34 PM

user-gravatar

Athos K. MCP,MCSA

I find your article quite interesting and useful

05 May 2020 @ 9:15 AM

user-gravatar

Λευτέρης Μουρίκης

Ωραίο και χρήσιμο άρθρο!Για το retention policy υπάρχει κάτι; Μπορούμε δηλαδή μέσα από το SSMS να φτιάξουμε ένα job που θα σβήνει τα παλαιότερα των X ημερών αρχεία backup;

05 May 2020 @ 11:32 PM

user-gravatar

Kyriakos Petsalaris

Ευχαριστώ πολύ!Δεν χρειάζεται να γίνει χρήση του SSMS μπορείς στην εντολή Backup-SqlDatabase να χρησιμοποιήσεις την παράμετρο - RetainDays που καθορίζει τον αριθμό των ημερών πριν γίνει overwrite το backup set .Πρέπει να χρησιμοποιηθεί σε συνδυασμό με την -Initialize ή -FormatMedia που είναι οι αντίστοιχες Init και with Format του native Backup statement (SSMS,T-SQL)

Kyriakos Petsalaris

Kyriakos Petsalaris

Kyriakos is a Multifaceted Information Technology professional with a background in Information Technology Management. An experienced database and systems administrator, who also establishes clear objectives for team members and enforces deadlines to keep projects on track. Well versed in personnel training and supporting servers,Azure based Systems and Virtual Enviroments. He can do a bit of everything, but he has a passion for SQL Server and loves resolving complex live site incidents, as well as engineering continuous improvements to avoid repeated incidents. He is also skilled with writing, performance-tuning and debugging T-SQL, and developing automated and scalable maintenance/monitoring procedures to ensure optimal uptime across multiple systems. He has 20+ years experience as a Systems Engineer with specific expertise in SQL Server (from SQL 2005 to 2019). He works with both on-premise and Azure-based, customer-facing services including several Microsoft’s Products and have experience collaborating remotely with global teams in Bahrein,South Africa, Egypt and England.

Episode

First look: SQL Database in Microsoft Fabric

image

More Episodes...

Tip

What's New in SQL Server 2022 - Episodes

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn


sqlschool.gr © 2010-2024 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.