sqlschool.gr logo

articles

Articles of SQLschool.gr Team

Backup to URL for Large Databases

Antonios Chatzipavlis
Wednesday 20 September 2017

Εδώ και χρόνια ( από τον SQL Server 2012 SP1 CU2) υπάρχει η δυνατότητα για SQL Server backups σε Azure Blob storage με το γνωστό (υποθέτω σε όλους μας)  backup to URL. Αρκετοί το έχουν υλοποιήσει, μεταξύ αυτών και ένας πελάτης μου αλλά κάποια στιγμή άρχισε να μην δουλεύει. Σε αυτό το άρθρο σας δείχνω το γιατί και πως λύνεται το πρόβλημα.

Το backup to URL είναι ένα εξαιρετικό feature καθώς δίνεται άμεσα η δυνατότητα για off site backups που είναι επιτακτική ανάγκη όλοι να έχουν (αν και για αρκετούς αυτό είναι μια άγνωστη έννοια ).

Ακόμα σημαντικό και δεν πρέπει να αγνοηθεί είναι το κόστος που σε αυτή την περίπτωση είναι αρκετά χαμηλότερο σε σχέση με άλλες λύσεις καθώς το κόστος του storage στο Azure είναι πραγματικά πολύ χαμηλό.

Backup to URL μπορούν όλοι να έχουν είτε έχουν SQL Server instance on premise είτε σε VM on Azure.

Ιδιαίτερα για αυτούς που είναι σε VM on Azure θα έλεγα ότι είναι η ιδανική λύση κυρίως από άποψη network αρκεί να είναι στο ίδιο datacenter.

Create Azure Storage Account


image1

Για να μπορέσουμε να πραγματοποιήσουμε backup to URL θα πρέπει να έχουμε Azure subscription και σε αυτό να δημιουργήσουμε  ένα azure storage account

Η διαδικασία για την δημιουργία ενός azure storage account είναι αρκετά απλή αλλά έχει τρία σημεία που πρέπει να προσεχθούν

Το πρώτο σημείο είναι ότι στο Account kind θα πρέπει να επιλεχθεί η επιλογή General purpose.

Το δεύτερο σημείο είναι το deployment model που πρέπει να είναι Resource manager στο Resource Group είτε να βάλουμε κάποιο ήδη υπάρχον είτε να φτιάξουμε νέο.

Το τρίτο είναι το Location που πρέπει να επιλεχθεί αυτό που είναι καλύτερο σε επικοινωνία στην περίπτωση που έχω on premise SQL Server ή να είναι το ίδιο με αυτό που είναι το Azure VM στην περίπτωση που έχω τον SQL Server σε Azure VM.

Create Blob Container

image1

Επόμενο βήμα είναι δημιουργηθεί  ένας container με τιμή Private στο Public Access level και είμαστε σχεδόν ένα βήμα πριν την ολοκλήρωση για να μπορούμε να εκτελούμε backup to URL.

Create SQL Server Credential

Αυτό που μένει να κάνουμε είναι να πάρουμε από τα Access keys του storage account τις τιμές που υπάρχουν στο storage account name και το primary default key και με αυτά στο SQL Server να δημιουργήσουμε ένα credential με το statement

CREATE CREDENTIAL <credential name>
WITH IDENTITY ='<your storage account name>'
, SECRET = '<your primary default key>'

Πλέον το να πραγματοποιηθεί backup to URL είναι μια απλή διαδικασία αρκεί να εκτελέσει κάποιος το statement

BACKUP DATABASE <database name>
TO URL='https://<storage account>.blob.core.windows.net/<container name>/<backup file name>.bak'
WITH COMPRESSION, CREDENTIAL='<credential name>'

Backup to URL Limitations before SQL Server 2016

Πράγματι η συγκεκριμένη διαδικασία δουλεύει εξαιρετικά αρκεί να μην δημιουργείται backup device (file) μεγαλύτερο από 1 ΤΒ. Επίσης δεν επιτρέπει να κάνεις stripe backups δηλαδή να παίρνεις backup  σε περισσότερα από ένα backup devices. Αυτό σημαίνει ότι αν έχεις μια database που έχει πάνω από 1ΤΒ δεδομένα κάθε προσπάθεια να πάρεις backup to URL αποτυγχάνει.  Αυτό είναι μια πραγματικότητα εφόσον είσαι σε SQL Server 2012, 2014.

O πελάτης μου που έχει ένα super VM on Azure έφτασε σε αυτό το όριο καθώς πλέον έχει φτάσει να έχει δεδομένα πάνω από 1 ΤΒ και φυσικά έσκαγε το backup.

Backup to URL in SQL Server 2016

Ο παραπάνω περιορισμός έχει φύγει στον SQL Server 2016 και ευτυχώς ο πελάτης ήταν σε SQL Server 2016. Όμως και πάλι η παραπάνω διαδικασία σκάει καθώς το BACKUP TO URL WITH CREDENTIAL συνεχίζει να έχει τα παραπάνω limitations καθώς αυτός ο τρόπος υποδηλώνει page blob usage.

Για να μπορέσουμε να έχουμε την δυνατότητα να πάρουμε μεγαλύτερες databases backup to URL πρέπει να κάνουμε block blob usage και για να γίνει αυτό θα πρέπει μερικά πράγματα να γίνουν διαφορετικά από όσα είπαμε και κάναμε παραπάνω.

Create Shared Access Signature (SAS) 

Δεν υπάρχει καμία αλλαγή στον τρόπο με τον οποίο θα πρέπει να δημιουργηθεί το azure storage account και ο container σε αυτό.

Αυτό που πρέπει να κάνουμε είναι να πάμε στο azure storage account και να δημιουργήσουμε ένα SAS (Shared Access Signature) και θέλει λίγη προσοχή σε κάποια πράγματα όπως το χρονικό διάστημα που αυτό θα είναι διαθέσιμο και το οποίο ορίζουμε με τις ημερομηνίες που στο διάλογο έχουμε και ένα ακόμα σημαντικό στοιχείο είναι οι IP addresses  (των SQL Server instances) που θα έχουν πρόσβαση σε αυτό το storage account.

Aφού όλα αυτά τα ορίζουμε πατάμε το Generate SAS button.

Αυτό θα μας δημιουργήσει πολλαπλά αποτελέσματα αλλά από όλα αυτά χρειαζόμαστε το πρώτο που είναι το SAS Token το οποίο κάνουμε copy καθώς θα το χρειαστούμε στο επόμενο βήμα και η συμβουλή που σας δίνω είναι να το κάνετε paste σε ένα notepad καθώς αν κλείσετε το συγκεκριμένο blade θα το χάσετε και θα πρέπει να φτιάξετε νέο ή να γράψετε PowerShell για να το ανακτήσετε.

Επίσης κάνοντας paste σε ένα notepad θα δείτε ότι το SAS Token ξεκινάμε με ?. Αυτό πρέπει να φύγει από τη αρχή και να κρατήσουμε το SAS Token χωρίς αυτό.

image1

Create SQL Server Credential for Block blob usage

Αυτό που πρέπει να φτιάξουμε πλέον είναι ένα νέο credential ώστε να έχουμε την δυνατότητα να κάνουμε χρήση του block blob usage. Για να γίνει αυτό θα πρέπει εκτελεστεί το παρακάτω state

CREATE CREDENTIAL [https://<your azure storage account name>.blob.core.windows.net/<container name>] 
WITH IDENTITY = 'SHARED ACCESS SIGNATURE' -- ΠΡΟΣΟΧΗ ΑΥΤΌ ΘΑ ΠΡΕΠΕΙ ΝΑ ΕΊΝΑΙ ΩΣ ΕΧΕΙ
,SECRET = '<SAS TOKEN>';

Take Backup to URL using Block Blobs

Τώρα πλέον είμαστε σε θέση να μπορούμε να πάρουμε backup to URL using block blob κάνοντας χρήση του statement

BACKUP DATABASE  <database name> TO
URL = 'https://<yourstorageaccount>.blob.core.windows.net/<containername>/DB_part01.bak',
…
URL = 'https://<yourstorageaccount>.blob.core.windows.net/<containername>/DB_partN.bak',
WITH COMPRESSION,  MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536,

Πρώτη παρατήρηση είναι ότι δεν υπάρχει το WITH CREDENTIAL.

Why striped backup needed?

Δεύτερη παρατήρηση είναι ότι μπορώ και πρέπει να έχω striped backups και αυτό γιατί μόνο έτσι μπορώ να έχω παραπάνω μέγεθος από το 1 ΤΒ στο backup. Κάθε block blob μπορεί να φτάσει τα 195GB και στον SQL Server ένα  backup μπορεί να έχει μέχρι 64 backup devices αυτό σημαίνει ότι μπορώ να έχω backups που μπορούν να φτάσουν τα 12 ΤΒ.

What the MAXTRANSFERSIZE is?

Ας πούμε ότι έχουμε μια βάση που είναι 10ΤΒ άρα για να μπορέσω να έχω backup to URL με όλα όσα έχω πει πρέπει το backup να έχει 52 backup devices που το κάθε ένα μπορεί να φτάσει το 195GB (δυνητικά). Όμως και πάλι μπορεί να έχεις πρόβλημα !!!

Μπορεί να πάρεις το εξής μήνυμα λάθους "Write to backup block blob device ... . Device has reached its limit of allowed blocks." και φυσικά μένεις κόκαλο.

Η εξήγηση δίνεται από το documentation των Azure Block Blobs

"Each block in an append blob can be a different size, up to a maximum of 4 MB, and an append blob can include up to 50,000 blocks. The maximum size of an append blob is therefore slightly more than 195 GB (4 MB X 50,000 blocks)."

Για να μπορέσουμε να έχουμε λοιπόν 4 ΜΒ block block size πρέπει να έχουμε στο statement το MAXTRANSFERSIZE = 4194304.

What the BLOCKSIZE option is ?

Τέλος ακόμα μια παράμετρος που πρέπει να υπάρχει στο statement του backup URL είναι το BLOCKSIZE με την οποία ελέγχουμε το να μην έχουμε κάτω από 4 ΜΒ κάποιο block blob.

Καλά backups to URL

//antonch

Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios Chatzipavlis is a highly experienced Data Solutions Consultant and Trainer. He has been working in the IT industry since 1988, holding various roles such as senior developer, IT Manager, Data & AI Solutions Architect and Consultant.

Since 1995, Antonios has focused on modern technologies and software development tools, primarily by Microsoft. He has specialized in Data & AI since 2000, with expertise in Microsoft Data Platform (SQL Server, Azure SQL Databases, Azure Synapse Analytics, Microsoft Fabric, Power BI, AI) and Databricks.

Antonios is also a Microsoft Certified Trainer (MCT) for over 25 years, has been recognized as a Microsoft Most Valuable Professional (MVP) in Data Platform since 2010 and he is in the Data Expert 40 Powerlist 2024 by Boussias. He is the co-founder and visionary behind XLYTiCA, a company dedicated to Data & AI solutions.

Episode

Task Flows in Microsoft Fabric

image

More Episodes...

Tip

Get Certified: Become a Fabric Data Engineer

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-2025 All rights reserved

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