État des abonnements pour le serveur de publication

Microsoft.SQLServer.2014.Replication.Monitor.PublisherSubscriptionsMonitor (UnitMonitor)

Ce moniteur vérifie s'il existe des abonnements inactifs pour des publications.

Knowledge Base article:

Résumé

Des abonnements peuvent expirer ou être désactivés s'ils ne sont pas synchronisés durant une période de rétention spécifiée. L'action qui se produit dépend du type de réplication et de la période de rétention qui est dépassée.

Causes

L'abonnement ne s'est pas synchronisé correctement durant la période de rétention.

! FACTICE ! Transactionnel :

Si un abonnement n'est pas synchronisé durant la période de rétention maximale (par défaut, 72 heures), et si des modifications intervenues dans la base de données de distribution n'ont pas été livrées à l'Abonné, l'abonnement est marqué comme désactivé par le travail de nettoyage de distribution qui s'exécute sur le serveur de distribution. L'abonnement doit être réinitialisé.

! FACTICE ! Fusion :

Si une publication a une période de rétention de 14 jours, un abonnement peut expirer s'il ne s'est pas synchronisé au bout de 14 jours. Si le serveur de publication exécute SQL Server 2005 ou version ultérieure, et que l'Agent de l'abonnement provient de SQL Server 2005 ou version ultérieure, un abonnement expire uniquement s'il n'y a pas eu de modification de données dans la partition de cet abonnement. Par exemple, supposons qu'un abonné ne reçoive des données client que pour des clients basés en Allemagne. Si la période de rétention est définie sur 14 jours, l'abonnement n'expire le quatorzième jour que si des modifications ont été apportées aux données des clients allemands au cours des 14 derniers jours.

Résolutions

Vérifiez si l'Agent de distribution ou de fusion a échoué avec un message d'erreur. Vérifiez l'historique des travaux pour obtenir plus de détails.

Pour les abonnements devenus inactifs, vérifiez la table Msrepl_errors de la base de données de distribution pour voir si elle contient des erreurs. Corrigez les erreurs, puis réinitialisez l'abonnement.

S'il n'y a pas d'erreur de réplication transactionnelle, vérifiez la table MSdistribution_history pour déterminer la raison pour laquelle l'abonnement et devenu inactif. S'il n'y a pas d'erreur de réplication de fusion, vérifiez la table msmerge_history pour déterminer la raison pour laquelle l'abonnement et devenu inactif.

Paramètres remplaçables

Nom

Description

Valeur par défaut

Activé

Active ou désactive le flux de travail

Oui

Génère des alertes

Définit si le flux de travail génère une alerte

Oui

Intervalle (secondes)

Intervalle de temps récurrent en secondes, pendant lequel le workflow est exécuté.

900

Délai d'attente (secondes)

Délai d'attente (secondes)

300

Heure de synchronisation

Heure de synchronisation

 

Element properties:

TargetMicrosoft.SQLServer.2014.Replication.Publisher
Parent MonitorSystem.Health.ConfigurationState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.Replication.MonitorType.PublisherSubscriptionsMonitor
RemotableTrue
AccessibilityPublic
Alert Message
Réplication MSSQL 2014 : un ou plusieurs abonnements inactifs détectés pour le serveur de publication.
Le serveur de publication (Nom : « {0} », Serveur : « {1} ») a détecté des abonnements inactifs.
Informations :
{2}
RunAsMicrosoft.SQLServer.Replication.Monitoring.RunAs.Monitor

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2014.Replication.Monitor.PublisherSubscriptionsMonitor" Accessibility="Public" Enabled="true" Target="MS2RD!Microsoft.SQLServer.2014.Replication.Publisher" ParentMonitorID="Health!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2014.Replication.MonitorType.PublisherSubscriptionsMonitor" ConfirmDelivery="false" RunAs="MSRL!Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.Replication.Monitor.PublisherSubscriptions.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericPublisher']/InstanceName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericPublisher']/ConnectionString$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='Message']$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Health" MonitorTypeStateID="Health" HealthState="Success"/>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<SqlTimeout>300</SqlTimeout>
<ConnectionString>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericPublisher']/Distributor$</ConnectionString>
<DistributorDbName>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericPublisher']/DistributorDatabaseName$</DistributorDbName>
<PublisherServerName>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericPublisher']/ConnectionString$</PublisherServerName>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
</Configuration>
</UnitMonitor>