Valider des données répliquées
S’applique à :SQL ServerAzure SQL Database
Cette rubrique explique comment valider les données sur l’abonné dans SQL Server à l’aide de SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO).
La réplication transactionnelle et de fusion vous permet de vérifier que les données sur l'Abonné correspondent aux données sur le serveur de publication. La validation peut être réalisée pour des abonnements spécifiques ou pour tous les abonnements à une publication. Spécifiez un des types de validation suivants et l'Agent de distribution ou l'Agent de fusion validera les données lors de sa prochaine exécution :
- Calculer uniquement le nombre de lignes. Ceci vérifie si la table sur l'Abonné a le même nombre de lignes que la table sur le serveur de publication, mais ne vérifie pas que le contenu des lignes correspond. La validation du nombre de lignes fournit une approche allégée de la validation qui vous permet de savoir qu'il existe des problèmes au niveau des données.
- Calculer le nombre de lignes et comparer les sommes de contrôle binaires. Outre le comptage des lignes sur le serveur de publication et sur l'Abonné, une somme de contrôle de toutes les données est calculée à l'aide de l'algorithme de somme de contrôle. Si le nombre de lignes est erroné, la somme de contrôle n'est pas effectuée.
En plus de vérifier que les données sur l'Abonné et sur le serveur de publication correspondent, la réplication de fusion donne la possibilité de vérifier que les données sont partitionnées correctement pour chaque Abonné. Pour plus d’informations, consultez Valider des informations de partition pour un Abonné de fusion.
Remarque
Azure SQL Managed Instance peut être un serveur de publication, un serveur de distribution et un abonné pour la réplication transactionnelle et d’instantané. Les bases de données dans Azure SQL Database peuvent uniquement être des abonnés de type push pour la réplication transactionnelle et d’instantané. Pour plus d’informations, consultez Réplication transactionnelle avec Azure SQL Database et Réplication transactionnelle avec Azure SQL Managed Instance.
Fonctionnement de la validation des données
SQL Server valide les données en calculant un nombre de lignes et/ou une somme de contrôle sur le serveur de publication, puis en comparant ces valeurs au nombre de lignes et/ou à la somme de contrôle calculé sur l’abonné. Une valeur est calculée pour l'ensemble de la table de publication et une autre est calculée pour l'ensemble de la table d'abonnement, mais les données des colonnes text, ntextou image ne sont pas prises en compte dans les calculs.
Pendant l'exécution des calculs, des verrous partagés sont temporairement placés sur les tables pour lesquelles le nombre de lignes ou la somme de contrôle est calculé. Ces calculs sont cependant effectués rapidement et les verrous partagés sont généralement retirés au bout de quelques secondes.
Lors de l'utilisation des sommes de contrôle binaires, le contrôle de redondance cyclique (CRC) 32 bits est effectué colonne par colonne, et non pas sur la ligne physique de la page de données. Ainsi, quel que soit l'ordre physique des colonnes de la table dans la page de données, elles participent au même calcul de CRC de ligne. La validation par somme de contrôle binaire peut être utilisée lorsque des filtres de lignes ou de colonnes sont appliqués à la publication.
La validation des données est en processus comptant trois parties :
Un abonnement unique ou tous les abonnements à une publication sont marqués pour la validation. Marquez des abonnements pour validation dans les boîtes de dialogue Valider l’abonnement, Valider les abonnements et Valider tous les abonnements, disponibles dans les dossiers Publications locales et Abonnements locaux de Microsoft SQL Server Management Studio. Vous pouvez aussi marquer des abonnements à partir de l'onglet Tous les abonnements , de l'onglet Liste de suivi des abonnements et du nœud des publications dans le Moniteur de réplication. Pour plus d’informations sur le démarrage du Moniteur de réplication, consultez Démarrer le Moniteur de réplication.
Un abonnement est validé lors de sa prochaine synchronisation par l'Agent de distribution (réplication transactionnelle) ou l'Agent de fusion (réplication de fusion). L'Agent de distribution s'exécute généralement en continu, auquel cas la validation se produit immédiatement ; l'Agent de fusion s'exécute généralement à la demande, auquel cas la validation se produit après l'exécution de l'agent.
Affichez les résultats de la validation :
- dans la fenêtre détaillée du moniteur de réplication : sous l'onglet Historique du serveur de distribution vers l'Abonné pour la réplication transactionnelle et l'onglet Historique de synchronisation pour la réplication de fusion ;
- Dans la boîte de dialogue Afficher l’état de synchronisation de Management Studio.
Considérations et restrictions
Prenez en compte les problèmes suivants lors de la validation des données :
- Vous devez arrêter toutes les activités de mise à jour sur les Abonnés avant de valider les données (il n'est pas nécessaire d'arrêter les activités sur le serveur de publication pendant la validation).
- Dans la mesure où les sommes de contrôle et les sommes de contrôle binaires peuvent nécessiter des ressources processeur importantes lors de la validation d'un jeu de données de grande taille, il est préférable de planifier la validation au moment où l'activité est la plus faible sur les serveurs utilisés dans la réplication.
- La réplication valide seulement des tables ; elle ne vérifie pas si des articles de schéma uniquement (tels que des procédures stockées) sont identiques sur le serveur de publication et sur l'Abonné.
- La somme de contrôle binaire peut être utilisée avec toutes les tables publiées. La somme de contrôle valide les tables avec des filtres de colonnes, ou des structures de table logique où les décalages des colonnes diffèrent (à cause d'instructions ALTER TABLE qui suppriment ou ajoutent des colonnes).
- La validation de réplication utilise les fonctions checksum et binary_checksum . Pour plus d’informations sur leur comportement, consultez CHECKSUM (Transact-SQL) et BINARY_CHECKSUM (Transact-SQL).
- Une validation utilisant la somme de contrôle binaire ou la somme de contrôle peut signaler de façon incorrecte un échec si les types de données sont différents entre l'Abonné et le serveur de publication. Cela peut se produire si vous effectuez l’une des opérations suivantes :
- Vous définissez explicitement les options de schéma pour qu’elles correspondent aux types de données des versions antérieures de SQL Server.
- Vous définissez le niveau de compatibilité de la publication pour une publication de fusion sur une version antérieure de SQL Server, et les tables publiées contiennent un ou plusieurs types de données qui doivent être mappés pour cette version.
- Vous initialisez manuellement un abonnement et utilisez différents types de données sur l'Abonné.
- Les validations de somme de contrôle binaire et de somme de contrôle ne sont pas prises en charge pour les abonnements transformables dans le cadre de la réplication transactionnelle.
- La validation n’est pas prise en charge pour les données répliquées vers des abonnés qui ne sont pas abonnés à SQL Server.
- Les procédures du moniteur de réplication concernent uniquement les abonnements par envoi de données (push) car ce type d'abonnement ne peut pas être synchronisé dans le moniteur de réplication. Vous pouvez toutefois marquer un abonnement pour validation et afficher les résultats de la validation pour les abonnements par extraction de données (pull) dans le moniteur de réplication.
- Les résultats de la validation indiquent si la validation a échoué ou a raté, mais ne précisent pas les lignes défectueuses en cas d'échec. Pour comparer des données sur le serveur de publication et sur l'Abonné, utilisez l' tablediff Utility. Pour plus d’informations sur cet utilitaire, consultez Comparer des tables répliquées pour identifier les différences (Programmation de la réplication).
Résultats de la validation des données
Quand la validation est terminée, l'Agent de distribution ou l'Agent de fusion consigne des messages relatifs au succès ou à l'échec (la réplication ne rapporte pas quelles lignes ont échoué). Ces messages peuvent être affichés dans SQL Server Management Studio, dans le moniteur de réplication et dans les tables système de réplication. La rubrique de procédure ci-dessus montre comment exécuter une validation et afficher les résultats.
Pour gérer les échecs de validation, considérez les points suivants :
Configurez l'alerte de réplication nommée Réplication : l'Abonné n'a pas réussi la validation des données pour recevoir une notification de l'échec. Pour plus d’informations, consultez Configurer des alertes de réplication prédéfinies (SQL Server Management Studio).
Le fait que la validation a échoué est-il un problème pour votre application ? Si l'échec de la validation constitue un problème, mettez à jour manuellement les données pour qu'elles soient synchronisées, ou bien réinitialisez l'abonnement :
Les données peuvent être mises à jour à l'aide de l' utilitaire tablediff. Pour plus d’informations sur l’utilisation de cet utilitaire, consultez Comparer des tables répliquées pour identifier les différences (Programmation de la réplication).
Pour plus d’informations sur la réinitialisation, consultez Réinitialiser les abonnements.
Articles de la réplication transactionnelle
Utilisation de SQL Server Management Studio
- Connectez-vous au serveur de publication dans SQL Server Management Studio, puis développez le nœud du serveur.
- Développez le dossier Réplication , puis développez le dossier Publications locales .
- Cliquez avec le bouton droit sur la publication dont vous souhaitez valider les abonnements, puis cliquez sur Valider les abonnements.
- Dans la boîte de dialogue Valider les abonnements, sélectionnez les abonnements à valider :
- Sélectionnez Valider tous les abonnements SQL Server.
- Sélectionnez Valider les abonnements suivants, puis sélectionnez un ou plusieurs abonnements.
- Pour spécifier le type de validation à effectuer (nombre de lignes, ou nombre de lignes et somme de contrôle), cliquez sur Options de validation, puis spécifiez les options dans la boîte de dialogue Options de validation d'abonnement .
- Cliquez sur OK.
- Affichez les résultats de la validation dans le moniteur de réplication ou dans la boîte de dialogue Afficher l'état de synchronisation . Pour chaque abonnement :
- Développez la publication, cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Afficher l'état de synchronisation.
- Si l'agent n'est pas en cours d'exécution, cliquez sur Démarrer dans la boîte de dialogue Afficher l'état de synchronisation . La boîte de dialogue affiche des messages d'information concernant la validation.
Si aucun message concernant la validation ne s'affiche, l'agent a déjà consigné un message à ce sujet dans le journal. Dans ce cas, affichez les résultats de la validation dans le moniteur de réplication. Pour plus d'informations, consultez les procédures du moniteur de réplication dans cette rubrique.
Utilisation de Transact-SQL
Tous les articles
Dans la base de données de publication sur le serveur de publication, exécutez sp_publication_validation (Transact-SQL). Spécifiez
@publication
et l’une des valeurs suivantes pour@rowcount_only
:- 1 - contrôle du nombre de lignes uniquement (par défaut)
- 2 - nombre de lignes et somme de contrôle binaire.
Remarque
Lorsque vous exécutez sp_publication_validation (Transact-SQL), sp_article_validation (Transact-SQL) est exécuté pour chaque article de la publication. Pour exécuter sp_publication_validation (Transact-SQL) avec succès, vous devez avoir les autorisations SELECT sur toutes les colonnes des tables de la base publiée.
(Facultatif) Démarrez l'Agent de distribution pour chaque abonnement s'il n'est pas déjà en cours d'exécution. Pour plus d'informations, consultez Synchronize a Pull Subscription et Synchronize a Push Subscription.
Vérifiez la sortie de l'agent pour le résultat de la validation.
Article unique
Dans la base de données de publication sur le serveur de publication, exécutez sp_article_validation (Transact-SQL). Spécifiez
@publication
, le nom de l’article pour@article
, et l’une des valeurs suivantes pour@rowcount_only
:- 1 - contrôle du nombre de lignes uniquement (par défaut)
- 2 - nombre de lignes et somme de contrôle binaire.
Remarque
Pour exécuter sp_article_validation (Transact-SQL) avec succès, vous devez avoir les autorisations SELECT sur toutes les colonnes des tables de la base publiée.
(Facultatif) Démarrez l'Agent de distribution pour chaque abonnement s'il n'est pas déjà en cours d'exécution. Pour plus d'informations, consultez Synchronize a Pull Subscription et Synchronize a Push Subscription.
Vérifiez la sortie de l'agent pour le résultat de la validation.
Abonné unique
Dans la base de données de publication sur le serveur de publication, ouvrez une transaction explicite en utilisant BEGIN TRANSACTION (Transact-SQL).
Dans la base de données de publication du serveur de publication, exécutez sp_marksubscriptionvalidation (Transact-SQL). Spécifiez la publication pour
@publication
, le nom de l’Abonné pour@subscriber
et le nom de la base de données d’abonnement pour@destination_db
.(Facultatif) Répétez l'étape 2 pour chaque abonnement en cours de validation.
Dans la base de données de publication sur le serveur de publication, exécutez sp_article_validation (Transact-SQL). Spécifiez
@publication
, le nom de l’article pour@article
, et l’une des valeurs suivantes pour@rowcount_only
:- 1 - contrôle du nombre de lignes uniquement (par défaut)
- 2 - nombre de lignes et somme de contrôle binaire.
Remarque
Pour exécuter sp_article_validation (Transact-SQL) avec succès, vous devez avoir les autorisations SELECT sur toutes les colonnes des tables de la base publiée.
Dans la base de données de publication sur le serveur de publication, validez la transaction en utilisant COMMIT TRANSACTION (Transact-SQL).
(Facultatif) Répétez les étapes 1 à 5 pour chaque article en cours de validation.
(Facultatif) Démarrez l'Agent de distribution s'il n'est pas déjà en cours d'exécution. Pour plus d'informations, consultez Synchronize a Pull Subscription et Synchronize a Push Subscription.
Vérifiez la sortie de l'agent pour le résultat de la validation. Pour plus d'informations, voir Validate Data at the Subscriber.
Tous les abonnements par émission de données à une publication transactionnelle
Utilisation du moniteur de réplication
Dans le moniteur de réplication, développez un groupe de serveurs de publication dans le volet gauche, puis développez un serveur de publication.
Cliquez avec le bouton droit sur la publication dont vous souhaitez valider les abonnements, puis cliquez sur Valider les abonnements.
Dans la boîte de dialogue Valider les abonnements , sélectionnez les abonnements à valider :
- Sélectionnez Valider tous les abonnements SQL Server.
- Sélectionnez Valider les abonnements suivants, puis sélectionnez un ou plusieurs abonnements.
Pour spécifier le type de validation à effectuer (nombre de lignes, ou nombre de lignes et somme de contrôle), cliquez sur Options de validation, puis spécifiez les options dans la boîte de dialogue Options de validation d'abonnement .
Cliquez sur OK.
Cliquez sur l'onglet Tous les abonnements .
Affichez les résultats de la validation. Pour chaque abonnement par envoi de données :
- Si l'agent n'est pas en cours d'exécution, cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Démarrer la synchronisation.
- Cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Afficher les détails.
- Affichez les informations dans l'onglet Historique du serveur de distribution vers l'Abonné de la zone de texte Actions dans la session sélectionnée .
Pour un abonnement unique à une publication de fusion
Utilisation de SQL Server Management Studio
Connectez-vous au serveur de publication dans SQL Server Management Studio, puis développez le nœud du serveur.
Développez le dossier Réplication , puis développez le dossier Publications locales .
Développez la publication dont vous souhaitez valider les abonnements, cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Valider l'abonnement.
Dans la boîte de dialogue Valider l'abonnement , sélectionnez Valider cet abonnement.
Pour spécifier le type de validation à effectuer (nombre de lignes, ou nombre de lignes et somme de contrôle), cliquez sur Options, puis spécifiez les options dans la boîte de dialogue Options de validation d'abonnement .
Cliquez sur OK.
Affichez les résultats de la validation dans le moniteur de réplication ou dans la boîte de dialogue Afficher l'état de synchronisation :
- Développez la publication, cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Afficher l'état de synchronisation.
- Si l'agent n'est pas en cours d'exécution, cliquez sur Démarrer dans la boîte de dialogue Afficher l'état de synchronisation . La boîte de dialogue affiche des messages d'information concernant la validation.
Si aucun message concernant la validation ne s'affiche, l'agent a déjà consigné un message à ce sujet dans le journal. Dans ce cas, affichez les résultats de la validation dans le moniteur de réplication. Pour plus d'informations, consultez les procédures du moniteur de réplication dans cette rubrique.
Pour tous les abonnements à une publication de fusion
Utilisation de SQL Server Management Studio
Connectez-vous au serveur de publication dans SQL Server Management Studio, puis développez le nœud du serveur.
Développez le dossier Réplication , puis développez le dossier Publications locales .
Cliquez avec le bouton droit sur la publication dont vous souhaitez valider les abonnements, puis cliquez sur Valider tous les abonnements.
Dans la boîte de dialogue Valider tous les abonnements , spécifiez le type de validation à effectuer (nombre de lignes, ou nombre de lignes et total de contrôle).
Cliquez sur OK.
Affichez les résultats de la validation dans le moniteur de réplication ou dans la boîte de dialogue Afficher l'état de synchronisation . Pour chaque abonnement :
- Développez la publication, cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Afficher l'état de synchronisation.
- Si l'agent n'est pas en cours d'exécution, cliquez sur Démarrer dans la boîte de dialogue Afficher l'état de synchronisation . La boîte de dialogue affiche des messages d'information concernant la validation.
Si aucun message concernant la validation ne s'affiche, l'agent a déjà consigné un message à ce sujet dans le journal. Dans ce cas, affichez les résultats de la validation dans le moniteur de réplication. Pour plus d'informations, consultez les procédures du moniteur de réplication dans cette rubrique.
Pour un abonnement par émission de données unique à une publication de fusion
Utilisation du moniteur de réplication
- Dans le moniteur de réplication, développez un groupe de serveurs de publication dans le volet gauche, développez un serveur de publication, puis cliquez sur une publication.
- Cliquez sur l'onglet Tous les abonnements .
- Cliquez avec le bouton droit sur l'abonnement que vous souhaitez valider, puis cliquez sur Valider l'abonnement.
- Dans la boîte de dialogue Valider l'abonnement , sélectionnez Valider cet abonnement.
- Pour spécifier le type de validation à effectuer (nombre de lignes, ou nombre de lignes et somme de contrôle), cliquez sur Options, puis spécifiez les options dans la boîte de dialogue Options de validation d'abonnement .
- Cliquez sur OK.
- Cliquez sur l'onglet Tous les abonnements .
- Affichez les résultats de la validation :
- Si l'agent n'est pas en cours d'exécution, cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Démarrer la synchronisation.
- Cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Afficher les détails.
- Affichez les informations dans l'onglet Historique de synchronisation de la zone de texte Dernier message de la session sélectionnée .
Utilisation de Transact-SQL
Dans la base de données de publication sur le serveur de publication, exécutez sp_validatemergesubscription (Transact-SQL). Spécifiez
@publication
, le nom de l’Abonné pour@subscriber
, le nom de la base de données d’abonnement pour@subscriber_db
, et l’une des valeurs suivantes pour@level
:- 1 - validation du nombre de lignes uniquement.
- 3 - validation de la somme de contrôle binaire du nombre de lignes.
Les abonnements sélectionnés sont ainsi marqués pour la validation.
Démarrez l'agent de fusion pour chaque abonnement. Pour plus d'informations, consultez Synchronize a Pull Subscription et Synchronize a Push Subscription.
Vérifiez la sortie de l'agent pour le résultat de la validation.
Répétez les étapes 1 à 3 pour chaque abonnement en cours de validation.
Remarque
Un abonnement à une publication de fusion peut également être validé à la fin d'une synchronisation en spécifiant le paramètre -Validate lors de l'exécution de l' Replication Merge Agent.
Pour tous les abonnements par émission de données à une publication de fusion
Utilisation du moniteur de réplication
- Dans le moniteur de réplication, développez un groupe de serveurs de publication dans le volet gauche, puis développez un serveur de publication.
- Cliquez avec le bouton droit sur la publication dont vous souhaitez valider les abonnements, puis cliquez sur Valider tous les abonnements.
- Dans la boîte de dialogue Valider tous les abonnements , spécifiez le type de validation à effectuer (nombre de lignes, ou nombre de lignes et total de contrôle).
- Cliquez sur OK.
- Cliquez sur l'onglet Tous les abonnements .
- Affichez les résultats de la validation. Pour chaque abonnement par envoi de données :
- Si l'agent n'est pas en cours d'exécution, cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Démarrer la synchronisation.
- Cliquez avec le bouton droit sur l'abonnement, puis cliquez sur Afficher les détails.
- Affichez les informations dans l'onglet Historique de synchronisation de la zone de texte Dernier message de la session sélectionnée .
Utilisation de Transact-SQL
Dans la base de données de publication sur le serveur de publication, exécutez sp_validatemergepublication (Transact-SQL). Spécifiez
@publication
et l’une des valeurs suivantes pour@level
:- 1 - validation du nombre de lignes uniquement.
- 3 - validation de la somme de contrôle binaire du nombre de lignes.
Tous les abonnements sont ainsi marqués pour la validation.
Démarrez l'agent de fusion pour chaque abonnement. Pour plus d'informations, consultez Synchronize a Pull Subscription et Synchronize a Push Subscription.
Vérifiez la sortie de l'agent pour le résultat de la validation. Pour plus d'informations, voir Validate Data at the Subscriber.
Valider des données à l’aide des paramètres de l’Agent de fusion
Démarrez l'Agent de fusion sur l'Abonné (abonnement par extraction) ou sur le serveur de distribution (abonnement par émission de données) à partir de l'invite de commandes de l'une des façons suivantes.
- Spécifiez une valeur de 1 (nombre de lignes) ou 3 (nombre de lignes et somme de contrôle de binaire) pour le paramètre -Validate .
- Spécifiez la validation du nombre de lignes ou le nombre de lignes et la validation de la somme de contrôle pour le paramètre -ProfileName .
Pour plus d'informations, consultez Synchronize a Pull Subscription ou Synchronize a Push Subscription.
Utilisation d'objets RMO (Replication Management Objects)
La réplication permet d'utiliser les objets RMO (Replication Management Objects) pour vérifier par programmation que les données de l'Abonné correspondent à celles du serveur de publication. Les objets que vous utilisez dépendent du type de topologie de réplication. La réplication transactionnelle requiert la validation de tous les abonnements à une publication.
Remarque
Consultez l' Exemple (RMO)plus loin dans cette rubrique.
Pour valider les données de tous les articles d'une publication transactionnelle
Créez une connexion au serveur de publication en utilisant la classe ServerConnection .
Créez une instance de la classe TransPublication. Définissez les propriétés Name et DatabaseName de la publication. Définissez la propriété ConnectionContext en spécifiant la connexion créée à l'étape 1.
Appelez la méthode LoadProperties pour obtenir les propriétés restantes de l'objet. Si cette méthode retourne false, soit les propriétés de la publication ont été définies de manière incorrecte à l'étape 2, soit la publication n'existe pas.
Appelez la méthode ValidatePublication . Passez les éléments suivants :
Une valeur booléenne qui indique s'il faut arrêter l'Agent de distribution une fois la validation terminée.
Cela marque les articles pour la validation.
S'il n'est pas déjà en cours d'exécution, démarrez l'Agent de distribution pour synchroniser chaque abonnement. Pour plus d'informations, consultez Synchronize a Push Subscription ou Synchronize a Pull Subscription. Le résultat de l'opération de validation est écrit dans l'historique de l'agent. Pour plus d'informations, voir Monitoring Replication.
Pour valider les données de tous les abonnements à une publication de fusion
Créez une connexion au serveur de publication en utilisant la classe ServerConnection .
Créez une instance de la classe MergePublication. Définissez les propriétés Name et DatabaseName de la publication. Définissez la propriété ConnectionContext en spécifiant la connexion créée à l'étape 1.
Appelez la méthode LoadProperties pour obtenir les propriétés restantes de l'objet. Si cette méthode retourne false, soit les propriétés de la publication ont été définies de manière incorrecte à l'étape 2, soit la publication n'existe pas.
Appelez la méthode ValidatePublication . Passez le ValidationOptionsouhaité.
Exécutez l'Agent de fusion pour chaque abonnement pour démarrer la validation ou attendez que l'agent planifié suivant ne s'exécute. Pour plus d'informations, consultez Synchronize a Pull Subscription et Synchronize a Push Subscription. Le résultat de l'opération de validation est écrit dans l'historique de l'agent, que vous affichez en utilisant le moniteur de réplication. Pour plus d'informations, voir Monitoring Replication.
Pour valider les données d'un seul abonnement à une publication de fusion
Créez une connexion au serveur de publication en utilisant la classe ServerConnection .
Créez une instance de la classe MergePublication. Définissez les propriétés Name et DatabaseName de la publication. Définissez la propriété ConnectionContext en spécifiant la connexion créée à l'étape 1.
Appelez la méthode LoadProperties pour obtenir les propriétés restantes de l'objet. Si cette méthode retourne false, soit les propriétés de la publication ont été définies de manière incorrecte à l'étape 2, soit la publication n'existe pas.
Appelez la méthode ValidateSubscription . Passez le nom de l'Abonné et de la base de données d'abonnement en cours de validation, ainsi que le ValidationOptionsouhaité.
Exécutez l'Agent de fusion de l'abonnement pour démarrer la validation ou attendez que l'agent planifié suivant ne s'exécute. Pour plus d'informations, consultez Synchronize a Pull Subscription et Synchronize a Push Subscription. Le résultat de l'opération de validation est écrit dans l'historique de l'agent, que vous affichez en utilisant le moniteur de réplication. Pour plus d'informations, voir Monitoring Replication.
Exemple (RMO)
Cet exemple marque tous les abonnements à une publication transactionnelle pour une validation du nombre de lignes.
// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
TransPublication publication;
// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Set the required properties for the publication.
publication = new TransPublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
// If we can't get the properties for this publication,
// throw an application exception.
if (publication.LoadProperties())
{
// Initiate validataion for all subscriptions to this publication.
publication.ValidatePublication(ValidationOption.RowCountOnly,
ValidationMethod.ConditionalFast, false);
// If not already running, start the Distribution Agent at each
// Subscriber to synchronize and validate the subscriptions.
}
else
{
throw new ApplicationException(String.Format(
"Settings could not be retrieved for the publication. " +
"Ensure that the publication {0} exists on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Do error handling here.
throw new ApplicationException(
"Subscription validation could not be initiated.", ex);
}
finally
{
conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"
Dim publication As TransPublication
' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Set the required properties for the publication.
publication = New TransPublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
' If we can't get the properties for this publication,
' throw an application exception.
If publication.LoadProperties() Then
' Initiate validataion for all subscriptions to this publication.
publication.ValidatePublication(ValidationOption.RowCountOnly, _
ValidationMethod.ConditionalFast, False)
' If not already running, start the Distribution Agent at each
' Subscriber to synchronize and validate the subscriptions.
Else
Throw New ApplicationException(String.Format( _
"Settings could not be retrieved for the publication. " + _
"Ensure that the publication {0} exists on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Do error handling here.
Throw New ApplicationException( _
"Subscription validation could not be initiated.", ex)
Finally
conn.Disconnect()
End Try
Cet exemple marque un abonnement spécifique à une publication de fusion pour une validation du nombre de lignes.
// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";
MergePublication publication;
// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);
try
{
// Connect to the Publisher.
conn.Connect();
// Set the required properties for the publication.
publication = new MergePublication();
publication.ConnectionContext = conn;
publication.Name = publicationName;
publication.DatabaseName = publicationDbName;
// If we can't get the properties for this merge publication, then throw an application exception.
if (publication.LoadProperties())
{
// Initiate validation of the specified subscription.
publication.ValidateSubscription(subscriberName,
subscriptionDbName, ValidationOption.RowCountOnly);
// Start the Merge Agent to synchronize and validate the subscription.
}
else
{
throw new ApplicationException(String.Format(
"Settings could not be retrieved for the publication. " +
"Ensure that the publication {0} exists on {1}.",
publicationName, publisherName));
}
}
catch (Exception ex)
{
// Do error handling here.
throw new ApplicationException(String.Format(
"The subscription at {0} to the {1} publication could not " +
"be validated.", subscriberName, publicationName), ex);
}
finally
{
conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2022Replica"
Dim publication As MergePublication
' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)
Try
' Connect to the Publisher.
conn.Connect()
' Set the required properties for the publication.
publication = New MergePublication()
publication.ConnectionContext = conn
publication.Name = publicationName
publication.DatabaseName = publicationDbName
' If we can't get the properties for this merge publication, then throw an application exception.
If publication.LoadProperties() Then
' Initiate validation of the specified subscription.
publication.ValidateSubscription(subscriberName, _
subscriptionDbName, ValidationOption.RowCountOnly)
' Start the Merge Agent to synchronize and validate the subscription.
Else
Throw New ApplicationException(String.Format( _
"Settings could not be retrieved for the publication. " + _
"Ensure that the publication {0} exists on {1}.", _
publicationName, publisherName))
End If
Catch ex As Exception
' Do error handling here.
Throw New ApplicationException(String.Format( _
"The subscription at {0} to the {1} publication could not " + _
"be validated.", subscriberName, publicationName), ex)
Finally
conn.Disconnect()
End Try