Surveiller la réplication par programme

S’applique à :SQL ServerAzure SQL Managed Instance

Le moniteur de réplication est un outil graphique permettant d'analyser une topologie de réplication. Vous pouvez accéder aux mêmes données de surveillance par programmation à l’aide de procédures stockées de réplication Transact-SQL ou d’objets de gestion de réplication (RMO). Ces objets permettent de programmer les tâches suivantes :

  • Analyser l'état des serveurs de publication, des publications et des abonnements.

  • Analyser les sessions de l'Agent de fusion sur un ou plusieurs Abonnés.

  • Analyser les commandes transactionnelles en attente d'application sur un ou plusieurs Abonnés.

  • Définir la métrique de seuil qui détermine quand une publication nécessite une intervention.

  • Analyser l'état des jetons de suivi.

Dans cette rubrique :

Transact-SQL

Objets RMO (Replication Management Objects)

Transact-SQL

Analyser les serveurs de publication, les publications et les abonnements du serveur de distribution.

  1. Sur le serveur de distribution de la base de données de distribution, exécutez sp_replmonitorhelppublisher. Les informations d'analyse pour tous les serveurs de publication utilisant ce serveur de distribution sont ainsi retournées. Pour limiter le jeu de résultats à un seul serveur de publication, spécifiez @publisher.

  2. Sur le serveur de distribution de la base de données de distribution, exécutez sp_replmonitorhelppublication. Les informations d'analyse pour tous les serveurs de publication utilisant ce serveur de distribution sont ainsi retournées. Pour limiter le jeu de résultats à un serveur de publication, une publication ou une base de données publiée, spécifiez respectivement @publisher, @publicationou @publisher_db.

  3. Sur le serveur de distribution de la base de données de distribution, exécutez sp_replmonitorhelpsubscription. Les informations d'analyse pour tous les abonnements utilisant ce serveur de distribution sont ainsi retournées. Pour limiter le jeu de résultats aux abonnements appartenant à un serveur de publication, une publication ou une base de données publiée, spécifiez respectivement @publisher, @publicationou @publisher_db.

Pour analyser les commandes transactionnelles en attente d'application sur l'Abonné

  1. Sur le serveur de distribution de la base de données de distribution, exécutez sp_replmonitorsubscriptionpendingcmds. Les informations d'analyse pour toutes les commandes en attente de tous les abonnements utilisant ce serveur de distribution sont ainsi retournées. Pour limiter le jeu de résultats aux commandes en attente pour les abonnements appartenant à un serveur de publication, un Abonné, une publication ou une base de données publiée, spécifiez respectivement @publisher, @subscriber, @publication, or @publisher_db.

Pour analyser les modifications de fusion en attente de chargement ou de téléchargement

  1. Dans la base de données de publication du serveur de publication, exécutez sp_showpendingchanges. Retourne un jeu de résultats affichant des informations sur les modifications en attente de réplication sur les Abonnés. Pour limiter le jeu de résultats aux modifications qui appartiennent à une publication ou un article unique, spécifiez respectivement @publication ou @article.

  2. Sur un Abonné de la base de données d'abonnement, exécutez sp_showpendingchanges. Retourne un jeu de résultats affichant des informations sur les modifications en attente de réplication sur le serveur de publication. Pour limiter le jeu de résultats aux modifications qui appartiennent à une publication ou un article unique, spécifiez respectivement @publication ou @article.

Pour analyser les sessions de l'Agent de fusion

  1. Sur le serveur de distribution de la base de données de distribution, exécutez sp_replmonitorhelpmergesession. Cela retourne les informations d'analyse, y compris Session_id, sur toutes les sessions de l'Agent de fusion pour tous les abonnements utilisant ce serveur de distribution. Vous pouvez également obtenir Session_id en interrogeant la table système MSmerge_sessions .

  2. Sur le serveur de distribution de la base de données de distribution, exécutez sp_replmonitorhelpmergesessiondetail. Spécifiez une valeur Session_id de l'étape 1 pour @session_id. Les informations d'analyse détaillées sur la session sont ainsi affichées.

  3. Répétez l'étape 2 pour chaque session digne d'intérêt.

Pour analyser les sessions de l'Agent de fusion pour les abonnements par extraction de l'Abonné

  1. Sur l'Abonné de la base de données d'abonnement, exécutez sp_replmonitorhelpmergesession. Pour un abonnement donné, spécifiez @publisher, @publicationet le nom de la base de données de publication pour @publisher_db. Cela retourne des informations d'analyse sur les cinq dernières sessions de l'Agent de fusion pour cet abonnement. Notez la valeur de la colonne Session_id pour toutes les sessions dignes d'intérêt dans le jeu de résultats.

  2. Sur l'Abonné de la base de données d'abonnement, exécutez sp_replmonitorhelpmergesessiondetail. Spécifiez une valeur Session_id de l'étape 1 pour @session_id. Les informations d'analyse détaillées sur la session sont ainsi affichées.

  3. Répétez l'étape 2 pour chaque session digne d'intérêt.

Pour afficher et modifier la métrique du seuil d'analyse pour une publication

  1. Sur le serveur de distribution de la base de données de distribution, exécutez sp_replmonitorhelppublicationthresholds. Les seuils d'analyse définis pour toutes les publications utilisant ce serveur de distribution sont ainsi retournées. Pour limiter le jeu de résultats aux seuils d'analyse des publications appartenant à un serveur de publication, une publication ou une base de données publiée, spécifiez respectivement @publisher, @publisher_dbou @publication. Notez la valeur de Metric_id pour les seuils qui doivent être changés. Pour plus d’informations, voir Set Thresholds and Warnings in Replication Monitor.

  2. Sur le serveur de distribution de la base de données de distribution, exécutez sp_replmonitorchangepublicationthreshold. Spécifiez les éléments suivants si nécessaire :

    • La valeur Metric_id obtenue dans l'étape 1 pour @metric_id.

    • Une nouvelle valeur pour le métrique du seuil d'analyse pour @value.

    • Une valeur de 1 pour @shouldalert pour une alerte à enregistrer lorsque ce seuil est atteint, ou une valeur de 0 si une alerte n'est pas nécessaire.

    • Valeur de 1 pour @mode afin d'activer la métrique du seuil d'analyse ou valeur de 2 pour la désactiver.

Objets RMO (Replication Management Objects)

Pour surveiller un abonnement à une publication de fusion sur l'Abonné

  1. Créez une connexion à l'Abonné en utilisant la classe ServerConnection .

  2. Créez une instance de la classe MergeSubscriberMonitor et définissez les propriétés Publisher, Publication, PublisherDB, SubscriberDB de l'abonnement, puis attribuez à la propriété ConnectionContext la valeur ServerConnection créée dans l'étape 1.

  3. Appelez l'une des méthodes suivantes pour retourner les informations sur les sessions de l'Agent de fusion de cet abonnement :

    • GetSessionsSummary - retourne un tableau d'objets MergeSessionSummary avec des informations sur les cinq dernières sessions au plus de l'Agent de fusion. Notez la valeur SessionId pour toutes les sessions dignes d'intérêt.

    • GetSessionsSummary - retourne un tableau d'objets MergeSessionSummary avec les informations sur les sessions de l'Agent de fusion qui se sont produites pendant le nombre passé d'heures transmis comme paramètre hours (jusqu'aux cinq dernières sessions au plus). Notez la valeur SessionId pour toutes les sessions dignes d'intérêt.

    • GetLastSessionSummary - retourne un objet MergeSessionSummary avec les informations sur la dernière session de l'Agent de fusion. Notez la valeur SessionId de cette session.

    • GetSessionsSummaryDataSet - retourne un objet DataSet avec les informations sur les cinq dernières sessions au plus de l'Agent de fusion, une session par ligne. Notez la valeur de la colonne Session_id pour toutes les sessions dignes d'intérêt.

    • GetLastSessionSummaryDataRow - retourne un objet DataRow avec les informations sur la dernière session de l'Agent de fusion. Notez la valeur de la colonne Session_id pour cette session.

  4. (Facultatif) Appelez RefreshSessionSummary pour actualiser les données de l'objet MergeSessionSummary transmis comme mss, ou appelez RefreshSessionSummary pour actualiser les données de l'objet DataRow transmis comme drRefresh.

  5. À l'aide de l'ID de session obtenu à l'étape 3, appelez l'une des méthodes suivantes pour retourner les informations sur les détails d'une session particulière :

Pour surveiller les propriétés de réplication de toutes les publications sur un serveur de distribution

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection .

  2. Créez une instance de la classe ReplicationMonitor.

  3. Définissez la propriété ConnectionContext avec le ServerConnection créé au cours de l'étape 1.

  4. Appelez la méthode LoadProperties pour obtenir les propriétés de l'objet.

  5. Exécutez une ou plusieurs des méthodes suivantes pour retourner les informations de réplication de tous les serveurs de publication qui utilisent ce serveur de distribution.

    • EnumDistributionAgents - retourne un objet DataSet qui contient des informations sur tous les Agents de distribution de ce serveur de distribution.

    • EnumErrorRecords - retourne un objet DataSet qui contient des informations sur les erreurs stockées sur le serveur de distribution.

    • EnumLogReaderAgents - retourne un objet DataSet qui contient des informations sur tous les Agents de lecture du journal de ce serveur de distribution.

    • EnumMergeAgents - retourne un objet DataSet qui contient des informations sur tous les Agents de fusion de ce serveur de distribution.

    • EnumMiscellaneousAgents - retourne un objet DataSet qui contient des informations sur tous les autres agents de réplication de ce serveur de distribution.

    • EnumPublishers - retourne un objet DataSet qui contient des informations sur tous les serveurs de publication de ce serveur de distribution.

    • EnumPublishers2 - retourne un objet DataSet qui contient les serveurs de publication qui utilisent ce serveur de distribution.

    • EnumQueueReaderAgents - retourne un objet DataSet qui contient des informations sur tous les Agents de lecture de la file d'attente de ce serveur de distribution.

    • EnumQueueReaderAgentSessionDetails - retourne un objet DataSet qui contient des détails sur l'Agent de lecture de la file d'attente et la session spécifiés.

    • EnumQueueReaderAgentSessions - retourne un objet DataSet qui contient des informations de session sur l'Agent de lecture de la file d'attente spécifié.

    • EnumSnapshotAgents - retourne un objet DataSet qui contient des informations sur tous les Agents d'instantané de ce serveur de distribution.

Pour analyser les propriétés de publication d'un serveur de publication spécifique d'un serveur de distribution

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection .

  2. Récupérez un objet PublisherMonitor par l'un ou l'autre de ces moyens.

  3. Exécutez une ou plusieurs des méthodes suivantes pour retourner les informations de réplication de toutes les publications qui appartiennent à ce serveur de publication.

Pour analyser les propriétés d'une publication spécifique du serveur de distribution

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection .

  2. Récupérez un objet PublicationMonitor par l'un ou l'autre de ces moyens.

  3. Exécutez une ou plusieurs des méthodes suivantes pour retourner des informations sur cette publication.

Pour analyser les commandes transactionnelles en attente d'application sur l'Abonné

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection .

  2. Récupérez un objet PublicationMonitor par l'un ou l'autre de ces moyens.

  3. Exécutez la méthode TransPendingCommandInfo , qui retourne un objet PendingCommandInfo .

  4. Utilisez les propriétés de cet objet PendingCommandInfo pour déterminer le nombre estimé de commandes en attente et la durée nécessaire à la remise complète de ces commandes.

Pour définir les seuils d'avertissement du moniteur pour une publication

  1. Créez une connexion au serveur de distribution en utilisant la classe ServerConnection .

  2. Récupérez un objet PublicationMonitor par l'un ou l'autre de ces moyens.

  3. Exécutez la méthode EnumMonitorThresholds . Notez les paramètres de seuil en cours dans le ArrayList retourné des objets MonitorThreshold .

  4. Exécutez la méthode ChangeMonitorThreshold . Transmettez les paramètres suivants :

    • metricID - une valeur Int32 qui représente le seuil d'analyse métrique de la table suivante :

      Valeur Description
      1 expiration : contrôle l'expiration imminente des abonnements aux publications transactionnelles.
      2 latency : contrôle les performances des abonnements aux publications transactionnelles.
      4 mergeexpiration : contrôle l'expiration imminente des abonnements aux publications de fusion.
      5 mergeslowrunduration : contrôle la durée des synchronisations de fusion sur les connexions à faible bande passante (accès à distance).
      6 mergefastrunduration : contrôle la durée des synchronisations de fusion sur les connexions haut débit (LAN).
      7 mergefastrunspeed - supervise le taux de synchronisation des synchronisations de fusion sur des connexions à bande passante élevée (LAN).
      8 mergeslowrunspeed : contrôle la vitesse de synchronisation des synchronisations de fusion sur les connexions lentes (accès distant).
    • enable - Boolean qui indique si le métrique est activé pour la publication.

    • thresholdValue - valeur entière qui définit le seuil.

    • shouldAlert - entier qui indique si ce seuil doit générer une alerte.