Πώς μπορούμε να εκτελούμε backups και λοιπά Agent jobs σε Always On Availability Group του SQL Server
- Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle - 1 Νοέμβριος 2024
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
- Τι είναι η PostgreSQL και πως κάνουμε μία πλήρης εγκατάσταση - 2 Σεπτέμβριος 2024
Σε αυτό το άρθρο θα δούμε πώς γίνεται να παίρνουμε backup και να τρέχουμε jobs σε όποιον server έχει τον Primary ρόλο ή είναι Preferred Backup Replica σε ένα Always On Availability Group του SQL Server.
Κατά την εγκατάσταση ενός standard Availability Group σε Enterprise SQL Server, μας ζητάει που θέλουμε να παίρνει τα database backups. Ως default τιμή έχει την επιλογή Prefer Secondary. Όμως υπάρχει ένα πρόβλημα. Στην secondary replica επιτρέπει μόνο την εκτέλεση COPY_ONLY
Full backup και καθόλου Differential backup:
Για να το λύσουμε αυτό το πρόβλημα και να είναι η εγκατάσταση μας λιγότερο πολύπλοκη, θα ορίσουμε να εκτελούνται όλα τα backup και λοιπά jobs για maintenance και όχι μόνο, σε όποια replica της βάσης δεδομένων είναι Preffered Backup Replica ή Primary Replica άνα περίπτωση.
Τα βήματα
Για τα Database Backup
Πάμε στον Object Explorer του SSMS και επιλέγουμε Always On High Availability, Availability Groups και κάνουνουμε δεξί κλικ Properties στο group:
Με το που εμφανιστεί ο Wizard στα Backup Preferences επιλέγουμε Primary και OK:
Ο παρακάτω κώδικάς ελέγχει αν είναι η Preffered Backup Replica και αν δεν είναι εμφανίζει σφάλμα. Η default συμπεριφορά του SQL Server Agent, είναι να σταματάει το job αν κάποιο step εμφανίσει σφάλμα:
DECLARE @preferredReplica int SET @preferredReplica = (SELECT max(cast(sys.fn_hadr_backup_is_preferred_replica (database_name) as int)) AS IsPreferredBackupReplicaNow FROM sys.availability_databases_cluster) IF (@preferredReplica = 0) BEGIN RAISERROR ('No backup produced as this server, is not the preferred replica for backups. Please run the job again from the preferred replica.', 16, 1) END;
Τον κώδικα τον προσθέτουμε στο SQL Server Agent job που θέλουμε. Για να γίνει αυτό επιλέγουμε το Job, Steps(1), New…(2) , προσθέτουμε τον κώδικα(3), ορίζουμε να είναι Start Step(4) και πρώτο στο Job step list(5) :
Οπότε έχοντας φτιάξει το το SQL Server Agent Job σε όλα τα nodes/servers του Availability Group αυτό θα εκτελέστεί μόνο σε όποιο είναι Primary αυτή τη στιγμή.
Μπορούμε φυσικά να το κάνουμε λίγο πιο πολύπλοκο και να έχουμε τον κωδικά του Backup και τον έλεγχο του Preferred Replica στο ίδιο step:
DECLARE @preferredReplica int SET @preferredReplica = (SELECT max(cast(sys.fn_hadr_backup_is_preferred_replica (database_name) as int)) AS IsPreferredBackupReplicaNow FROM sys.availability_databases_cluster) IF (@preferredReplica = 0) RAISERROR ('No backup produced as this server, is not the preferred replica for backups. Please run the job again from the preferred replica.', 16, 1) ELSE EXEC msdb.dbo.sp_start_job N'DatabaseBackup - USER_DATABASES - FULL';
Για Database Integrity Check
Κάπου εδώ θα πρέπει να αναφέρουμε ότι η ίδια διαδικασία μπορεί να λειτουργήσει και για το Database Integrity Check καθώς το Availability Group μας επιτρέπει να κάνουμε αυτό τον έλεγχο σε secondary replica.
Για Index Optimize (Index Rebuild) και λοιπά jobs
Αντίστοιχα για SQL Server Agent Jobs που θέλουμε να τρέχουνε μόνο στην Primary Replica κάνουμε την ίδια διαδικασία και προσθέτουμε Step στο Job με τον παρακάτω κώδικα που κάνει τον έλεγχο αυτό:
DECLARE @Role int SET @Role = (select role from sys.dm_hadr_availability_replica_states where is_local=1) IF (@Role != 1 ) -- if is not primary BEGIN RAISERROR ('Job did not run, is not the Primary replica. Please run on Primary Replica.', 16, 1); END;
Μπορούμε και σε αυτή την περίπτωση αν θέλουμε να προσθέσουμε τον έλεγχο στο ίδιο step με τον κώδικα:
DECLARE @Role int SET @Role = (select role from sys.dm_hadr_availability_replica_states where is_local=1) IF (@Role != 1 ) -- if is not primary RAISERROR ('Job did not run, is not the Primary replica. Please run on Primary Replica.', 16, 1); ELSE EXEC msdb.dbo.sp_start_job N'IndexOptimize';
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: