Vous êtes ici :
Sur l’édition standard où nous n’avons pas la possibilité d’avoir plusieurs bases dans un groupe de disponibilité, on peut vouloir que lorsqu’un groupe bascule, tous les autres aussi.
Ce script vérifie si des groupes sont secondaires sur le noeud actif et les bascule.
Pour l’automatiser, le plus simple est de le mettre dans un job sur chaque noeud et de déclencher le job sur une alerte, par l’erreur 1480 (changement de rôle), en la filtrant pour qu’elle ne se déclenche que lorqu’un groupe devient primaire : « RESOLVING » en « PRIMARY » dans le message d’erreur en français.
Transact-SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
WAITFOR DELAY '00:00:05'; IF EXISTS ( SELECT * FROM sys.dm_hadr_availability_group_states hags WHERE UPPER(primary_replica) = UPPER(@@SERVERNAME) ) AND EXISTS ( SELECT * FROM sys.dm_hadr_availability_group_states hags WHERE UPPER(primary_replica) <> UPPER(@@SERVERNAME) ) -- Il y a des primaires et des secondaires sur ce noeud BEGIN -- failover all secondary groups SELECT ag.name FROM sys.dm_hadr_availability_group_states hags INNER JOIN sys.availability_groups ag ON ag.group_id = hags.group_id WHERE UPPER(hags.primary_replica) <> UPPER(@@SERVERNAME); IF @@ROWCOUNT > 0 BEGIN DECLARE @SQLCmd NVARCHAR(MAX) = N''; SELECT @SQLCmd = @SQLCmd + N'ALTER AVAILABILITY GROUP ' + ag.name + N' FAILOVER; WAITFOR DELAY ''00:00:01''; ' FROM sys.dm_hadr_availability_group_states hags INNER JOIN sys.availability_groups ag ON ag.group_id = hags.group_id WHERE UPPER(hags.primary_replica) <> UPPER(@@SERVERNAME); PRINT @SQLCmd; EXEC (@SQLCmd); END; |
Table of Contents