MSSQL sur Windows Always On : Le rôle de réplica de disponibilité a changé

Microsoft.SQLServer.Linux.EventRule.AvailabilityReplica.RoleChanged (Rule)

Cette erreur se produit quand le réplica de disponibilité change de rôle.

Knowledge Base article:

Récapitulatif

Cette erreur se produit quand le réplica de disponibilité change de rôle.

Cet événement est désactivé par défaut dans SQL Server. Il peut être activé via l'instruction TSQL suivante : sp_altermessage 19406, 'with_log', 'true'

Causes

L'état du réplica a changé en raison d'un démarrage, d'un basculement, d'un problème de communication ou d'une erreur de cluster. Consultez l'événement pour plus d'informations.

Résolutions

Si le nouvel état est PRIMARY_PENDING, vérifiez sys.dm_hadr_database_replica_states. Si database_state_desc = RECOVERY_PENDING (synchronization_health_desc sera NOT_HEALTHY), essayez “ALTER DATABASE db SET HADR RESUME;”. S'il s'agit du seul réplica (absence d'un réplica secondaire), (créez d'abord une capture instantanée de la base de données pour la sauvegarder si nécessaire) essayez “ALTER DATABASE db SET HADR OFF;” pour supprimer Always On de façon à récupérer manuellement la base de données avec le service SQL ou redémarrez la base de données (ALTER DATABASE ONLINE).

TSQL : ALTER DATABASE DbName SET HADR RESUME;

TSQL : ALTER DATABASE DbName SET ONLINE;

TSQL : RESTORE DATABASE DbName WITH RECOVERY;

Si le nouvel état est RESOLVING_NORMAL, consultez les autres messages.

Si le nouvel état est PRIMARY_NORMAL / SECONDARY_NORMAL, cela peut indiquer la réussite d'un basculement. Si le basculement ne correspond pas au résultat attendu, consultez les autres messages.

Paramètres remplaçables

Nom

Description

Valeur par défaut

Activé

Active ou désactive le flux de travail.

Oui

Intervalle (en secondes)

Intervalle régulier (en secondes) auquel exécuter le flux de travail.

300

Priorité

Définit la priorité de l'alerte.

1

Gravité

Définit la gravité de l'alerte.

1

Heure de synchronisation

Heure de synchronisation

 

Délai d'expiration (secondes)

Spécifie la durée pendant laquelle le flux de travail est autorisé à s'exécuter avant d'être fermé et marqué comme ayant échoué.

200

Délai d’attente pour la connexion de base de données (secondes)

Le workflow échoue et enregistre un événement s’il ne peut pas accéder à la base de données pendant la période spécifiée.

15

Element properties:

TargetMicrosoft.SQLServer.Linux.AvailabilityReplica
CategoryEventCollection
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL sur Linux : Le rôle de réplica de disponibilité a changé
{0}

Member Modules:

ID Module Type TypeId RunAs 
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ DataSource Microsoft.SQLServer.Linux.DataSource.EventReaderSingleParam Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.Linux.EventRule.AvailabilityReplica.RoleChanged" Target="SqlDiscL!Microsoft.SQLServer.Linux.AvailabilityReplica" Enabled="true" ConfirmDelivery="true" Remotable="true">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Microsoft.SQLServer.Linux.DataSource.EventReaderSingleParam">
<MachineName>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<FilterMsg>The state of the local availability replica</FilterMsg>
<ParamRegex>^The state of the local availability replica in (availability group '.+') has changed from '[^\s']+' to '[^\s']+'\.(?:[^']*)$</ParamRegex>
<TargetKey>availability group '$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.AvailabilityReplica"]/AvailabilityGroupName$'</TargetKey>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="Health!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>1</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.Linux.EventRule.AvailabilityReplica.RoleChanged.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>Event ID: 19406. $Data/Property[@Name='Message']$</AlertParameter3>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>