Πώς αυτοματοποιούμε τη διαδικασία backup των βάσεων δεδομένων σε SQL Server χωρίς την χρήση maintenance plan

- Πώς μπορούμε να αυξήσουμε την απόδοση στο target Replicat του Oracle GoldenGate με παραλληλία - 19 Μάρτιος 2025
- Πώς φτιάχνουμε χρήστες σε βάσεις δεδομένων που ανήκουν σε Always On Availability Group του SQL Server - 10 Φεβρουάριος 2025
- Πώς φτιάχνουμε Logon Trigger για να ελέγχουμε τους χρήστες που επιτρέπουμε να συνδεθούν σε Oracle Database - 13 Ιανουάριος 2025
Σε αυτό το άρθρο θα δούμε τον πιο εύκολο και αποδοτικό τρόπο ώστε να πάρουμε backup όλες τις βάσεις δεδομένων του instance. Αυτό θα το κάνουμε με τη χρήση της procedure DatabaseBackup που έχει φτιάξει ο Ola Hallengren.
Φυσικά αυτή η εργασία γίνεται και με την χρήση T-SQL (π.χ. backup database) ή maintance plans που έχει build-in ο SQL Server, αλλά τα παραπάνω έχουν κάποιους περιορισμούς.
Τι παραπάνω προσφέρει
Η procedure DatabaseBackup μπορεί να πραγματοποιεί ξεχωριστά backup σε user ή system databases, να σβήνει παλία αρχεία backup με το ίδιο job και πολλά άλλα με τις διάφορες παραμέτρους που δέχεται.
Η εγκατάσταση
Κατεβάσουμε από εδώ το πακέτο με τις procedure που θα χρειαστούμε:
ή απευθείας από το site του δημιουργού εδώ.
Αφού κατέβει εκτελούμε όλο το script στη βάση που θέλουμε να καλούντε από αυτήν π.χ σε μία custom βάση δεδομένων που έχουμε φτιάξει για monitoring ή στην συστημική master database.
Στη συνέχεια για να ξεκινήσει η διαδικασία, απλά εκτελούμε την procedure με τις παραμέτρους όπως παρακάτω:
EXECUTE dbo.DatabaseBackup @Databases = 'ALL_DATABASES', --@Directory = 'C:\backup', --comment for default backup folder @BackupType = 'FULL', @Verify = 'Y', @Compress = 'Y', @CheckSum = 'Y', @CleanupTime = 360
Τι ακριβώς ορίζει η κάθε παράμετρος:
- @Databases ορίζουμε αν θα τρέξει η διαδικασία σε όλες τις βάσεις, στις συστημικές ή σε αυτές που έχουμε φτιάξει.
- @Directory την συγκεκριμένη παράμετρο την ορίζουμε όταν δεν θέλουμε να πάρει το backup στο default directory αλλά σε κάποιο άλλο.
- @BackupType ορίζουμε αν θα πάρει FULL / DIFFERENTIAL / LOG backup.
- @Verify ορίζουμε αν θα κάνει verify το backup.
- @Compress ορίζουμε αν θα κάνει compress το backup.
- @CheckSum ορίζουμε αν θα ενεργοποιηθεί το CheckSum.
- @CleanupTime ορίζουμε μετά από πόσες ώρες θα σβήνονται τα backup.
Υπάρχουν αναλυτικά οι οδηγίες για την κάθε παράμετρο στον ιστότοπο του δημιουργού εδώ.
Πώς αυτοματοποιούμαι τη διαδικασία
Μπορούμε να προσθέσουμε την εκτέλεση της procedure σε ένα SQL Server Agent Job.
Για να το κάνουμε αυτό πάμε στον Objects Explorer, SQL Server Agent, δεξί κλικ στο Jobs, New Job…
Στο παράθυρο που εμφανίζεται πάμε στην καρτέλα Steps και επιλέγουμε New.
Εκεί διαλέγουμε τη βάση master που είχαμε εγκαταστήσει την procedure και προσθέτουμε το script της procedure:

Στην καρτέλα Schedules μπορούμε να ορίσουμε την συχνότητα που θα εκτελείτε η εργασία. Καλό θα είναι να διαλέξουμε μια χρονική στιγμή που δεν έχει μεγάλο φόρτο εργασίας με προσπέλαση στα δεδομένα στο instance:

Για να δούμε αναλυτικά το κάθε action που έχει κάνει η procedure και πότε το έκανε
Απλά κάνουμε ένα select στον πίνακα commandlog:
select * from master..commandlog;
Bonus
Με το παρακάτω script που έχω φτιάξει, με μόνο ένα κλικ, κάνει εγκατάσταση το MaintenanceSolution του Ola Hallengren μαζί με έτοιμα παραμετροποιημένα jobs για Backup ,Database Integrity και Index Optimize με τις βέλτιστες παραμέτρους και χρονοδιάγραμμα.
Τα Backup jobs δημιουργούνται disabled καθώς μπορεί να έχουμε άλλη λύση για backup με 3rd party tool. Επίσης κάνει έλεγχο για Availability Group ώστε να τρέχουν μόνο αν είναι η Preffered Backup Replica (για backup / database integrity) και αν είναι Primary Replica (για Index Optimize).
Το μόνο που χρειάζεται να κάνουμε, είναι να εκτελέσουμε το παρακάτω script στο κάθε SQL Server Instance: