Gerepliceerde gegevens valideren
van toepassing op:SQL Server
Azure SQL Database-
In dit onderwerp wordt beschreven hoe u gegevens kunt valideren bij de abonnee in SQL Server met behulp van SQL Server Management Studio, Transact-SQL of RMO (Replication Management Objects).
Met transactionele replicatie en samenvoeging kunt u valideren dat de gegevens bij de abonnee overeenkomen met gegevens in Publisher. Validatie kan worden uitgevoerd voor specifieke abonnementen of voor alle abonnementen op een publicatie. Geef een van de volgende validatietypen op en de distributieagent of samenvoegagent valideert de gegevens de volgende keer dat deze wordt uitgevoerd:
- Alleen het aantal rijen. Hiermee wordt gevalideerd of de tabel bij de abonnee hetzelfde aantal rijen heeft als de tabel in Publisher, maar niet of de inhoud van de rijen overeenkomt. Validatie van het aantal rijen biedt een lichtgewicht methode voor validatie waarmee u op de hoogte kunt zijn van problemen met uw gegevens.
- aantal rijen en binaire controlesom. Naast het tellen van de rijen bij de Publisher en Subscriber, wordt een controlesom van alle gegevens berekend met behulp van het controlesom-algoritme. Als het tellen van het aantal rijen mislukt, wordt de controlesom niet uitgevoerd.
Naast het valideren dat de gegevens bij de Subscriber en Publisher overeenkomen, biedt samenvoegreplicatie ook de mogelijkheid te verifiëren dat de gegevens correct zijn gepartitioneerd voor elke Subscriber. Voor meer informatie, zie Partitiegegevens valideren voor een samenvoegabonnee.
Notitie
Azure SQL Managed Instance kan een uitgever, distributeur en abonnee zijn voor momentopname en transactionele replicatie. Databases in Azure SQL Database kunnen alleen pushabonnees zijn voor momentopname en transactionele replicatie. Zie Transactionele replicatie met Azure SQL Database en Azure SQL Managed Instancevoor meer informatie.
Hoe gegevensvalidatie werkt
SQL Server valideert gegevens door een aantal rijen of een controlesom te berekenen bij Publisher en deze waarden vervolgens te vergelijken met het aantal rijen of controlesom dat is berekend bij de abonnee. Eén waarde wordt berekend voor de hele publicatietabel en één waarde wordt berekend voor de hele abonnementstabel, maar gegevens in tekst, ntextof afbeelding kolommen worden niet opgenomen in de berekeningen.
Terwijl de berekeningen worden uitgevoerd, worden gedeelde vergrendelingen tijdelijk op tabellen geplaatst waarvoor rijaantallen of controlesommen worden uitgevoerd, maar de berekeningen worden snel voltooid en worden de gedeelde vergrendelingen verwijderd, meestal in een paar seconden.
Wanneer binaire controlesommen worden gebruikt, wordt een 32-bits redundantieberekening (CRC) uitgevoerd per kolom in plaats van een CRC op de fysieke rij op de gegevenspagina. Hierdoor kunnen de kolommen met de tabel fysiek op de gegevenspagina in elke volgorde staan, maar nog steeds worden berekend op dezelfde CRC voor de rij. Validatie van binaire controlesom kan worden gebruikt wanneer de publicatie rij- of kolomfilters bevat.
Het valideren van gegevens is een driedelige procedure:
Eén abonnement of alle abonnementen op een publicatie worden gemarkeerd als voor validatie. Markeer abonnementen voor validatie in de dialoogvensters Abonnement valideren, Abonnementen validerenen dialoogvensters Alle abonnementen valideren, die beschikbaar zijn in de map Lokale publicaties en de map Lokale abonnementen in Microsoft SQL Server Management Studio. U kunt abonnementen ook markeren op het tabblad Alle abonnementen, het tabblad Abonnementsoverzicht en het knooppunt Publicaties in Replication Monitor. Zie De replicatiemonitor startenvoor meer informatie over het starten van replicatiecontrole.
Een abonnement wordt gevalideerd wanneer het de volgende keer wordt gesynchroniseerd door de distributieagent (voor transactionele replicatie) of de samenvoegagent (voor samenvoegreplicatie). De distributieagent wordt doorgaans continu uitgevoerd, in welk geval de validatie onmiddellijk plaatsvindt; de samenvoegagent wordt doorgaans op aanvraag uitgevoerd. In dat geval vindt validatie plaats nadat u de agent hebt uitgevoerd.
Bekijk de validatieresultaten:
- In de detailvensters in Replicatiecontrole: op het tabblad Distributor to Subscriber History tabblad voor transactionele replicatie en het tabblad Synchronisatiegeschiedenis tabblad voor samenvoegreplicatie.
- In het dialoogvenster Synchronisatiestatus weergeven in Management Studio.
Overwegingen en beperkingen
Houd rekening met de volgende problemen bij het valideren van gegevens:
- U moet alle updateactiviteiten bij Abonnees stoppen voordat u gegevens valideert (het is niet nodig om de activiteit bij publisher te stoppen wanneer de validatie plaatsvindt).
- Omdat controlesommen en binaire controlesommen grote hoeveelheden processorresources kunnen vereisen bij het valideren van een grote gegevensset, moet u de validatie plannen wanneer er de minste activiteit is op de servers die in replicatie worden gebruikt.
- Replicatie valideert alleen tabellen; hiermee wordt niet gevalideerd of alleen artikelen met schema's (zoals opgeslagen procedures) hetzelfde zijn bij publisher en abonnee.
- Binaire controlesom kan worden gebruikt voor elke gepubliceerde tabel. Controlesom kan geen tabellen valideren met kolomfilters of logische tabelstructuren waarbij kolomverschuivingen verschillen (vanwege ALTER TABLE-instructies die kolommen verwijderen of toevoegen).
- Replicatievalidatie maakt gebruik van de controlesom en binary_checksum functies. Zie CHECKSUM (Transact-SQL) en BINARY_CHECKSUM (Transact-SQL)voor informatie over hun gedrag.
- Validatie met behulp van een binaire controle of checksum kan onterecht een fout rapporteren als de gegevenstypen verschillen bij de Abonnee vergeleken met de Uitgever. Dit kan gebeuren als u een van de volgende handelingen uitvoert:
- Stel schemaopties expliciet in om gegevenstypen toe te wijzen voor eerdere versies van SQL Server.
- Stel het compatibiliteitsniveau van de publicatie voor een samenvoegpublicatie in op een eerdere versie van SQL Server en gepubliceerde tabellen bevatten een of meer gegevenstypen die moeten worden toegewezen voor deze versie.
- Initieer een abonnement handmatig en gebruik verschillende gegevenstypen bij de abonnee.
- Binaire controlesom- en controlesomvalidaties worden niet ondersteund voor transformeerbare abonnementen voor transactionele replicatie.
- Validatie wordt niet ondersteund voor gegevens die worden gerepliceerd naar niet-SQL Server-abonnees.
- De procedures voor Replicatiecontrole zijn alleen bedoeld voor pushabonnementen omdat pull-abonnementen niet kunnen worden gesynchroniseerd in Replication Monitor. U kunt echter een abonnement markeren voor validatie en validatieresultaten weergeven voor pull-abonnementen in Replication Monitor.
- De validatieresultaten geven aan of de validatie is geslaagd of mislukt, maar geef niet op welke rijen de validatie is mislukt als er een fout is opgetreden. Gebruik het tablediff-hulpprogramma om gegevens bij de uitgever en abonnee te vergelijken. Zie voor meer informatie over het gebruik van dit hulpprogramma met gerepliceerde gegevens
Gerepliceerde tabellen vergelijken voor verschillen (replicatieprogrammering).
Resultaten van gegevensvalidatie
Wanneer de validatie is voltooid, registreert de distributieagent of samenvoegagent berichten met betrekking tot slagen of mislukken (replicatie rapporteert niet welke rijen zijn mislukt). Deze berichten kunnen worden weergegeven in SQL Server Management Studio, Replication Monitor en replicatiesysteemtabellen. In het bovenstaande procedureonderwerp ziet u hoe u validatie uitvoert en de resultaten weergeeft.
Als u validatiefouten wilt afhandelen, moet u rekening houden met het volgende:
Configureer de replicatiewaarschuwing met de naam Replication: De abonnee heeft de gegevensvalidatie mislukt, zodat u op de hoogte wordt gesteld van de fout. Zie Vooraf gedefinieerde replicatiewaarschuwingen (SQL Server Management Studio) configurerenvoor meer informatie.
Is het een probleem voor uw toepassing dat de validatie is mislukt? Als de validatiefout een probleem is, werkt u de gegevens handmatig bij zodat deze worden gesynchroniseerd of initialiseert u het abonnement:
Gegevens kunnen worden bijgewerkt met behulp van het tablediff-hulpprogramma . Zie Gerepliceerde tabellen vergelijken voor verschillen (replicatieprogrammering)voor meer informatie over het gebruik van dit hulpprogramma.
Zie Abonnementen opnieuw initialiserenvoor meer informatie over herinitialisatie.
Artikelen in Transactionele Replicatie
SQL Server Management Studio gebruiken
- Maak verbinding met publisher in SQL Server Management Studio en vouw vervolgens het serverknooppunt uit.
- Vouw de map Replication uit en vouw vervolgens de map Local Publications uit.
- Klik met de rechtermuisknop op de publicatie waarvoor u abonnementen wilt valideren en klik vervolgens op Abonnementen valideren.
- Selecteer in het dialoogvenster Abonnementen valideren welke abonnementen u wilt valideren:
- Selecteer Alle SQL Server-abonnementen valideren.
- Selecteer Valideer de volgende abonnementen, en selecteer dan een of meer abonnementen.
- Als u het type validatie wilt opgeven dat moet worden uitgevoerd (aantal rijen of aantal rijen en controlesom) klikt u op validatieoptiesen geeft u opties op in het dialoogvenster Opties voor abonnementsvalidatie.
- Kies OK -.
- Validatieresultaten weergeven in Replicatiecontrole of de Synchronisatiestatus weergeven dialoogvenster. Voor elk abonnement:
- Vouw de publicatie uit, klik met de rechtermuisknop op het abonnement en klik vervolgens op Synchronisatiestatus weergeven.
- Als de agent niet wordt uitgevoerd, klikt u op Start in het dialoogvenster Synchronisatiestatus weergeven. In het dialoogvenster worden informatieve berichten met betrekking tot validatie weergegeven.
Als er geen berichten met betrekking tot validatie worden weergegeven, heeft de agent al een volgend bericht geregistreerd. In dit geval bekijkt u de validatieresultaten in Replication Monitor. Raadpleeg de procedures voor het gebruik van de replicatiemonitor in dit onderwerp voor meer informatie.
Transact-SQL gebruiken
Alle artikelen
Voer sp_publication_validation (Transact-SQL)uit in de publicatiedatabase bij de Publisher. Geef
@publication
en een van de volgende waarden op voor@rowcount_only
:- 1 - alleen het aantal rijen controleren (de standaardinstelling)
- 2 : aantal rijen en binaire controlesom.
Notitie
Wanneer u sp_publication_validation (Transact-SQL)uitvoert, wordt sp_article_validation (Transact-SQL) uitgevoerd voor elk artikel in de publicatie. Als u sp_publication_validation (Transact-SQL)wilt uitvoeren, moet u SELECT-rechten hebben voor alle kolommen in de gepubliceerde basistabellen.
(Optioneel) Start de distributieagent voor elk abonnement als deze nog niet wordt uitgevoerd. Zie Een pull-abonnement synchroniseren en een pushabonnement synchroniserenvoor meer informatie.
Controleer de uitvoer van de agent op het resultaat van de validatie.
Eén artikel
Voer in Publisher in de publicatiedatabase sp_article_validation (Transact-SQL)uit. Geef
@publication
, de naam van het artikel voor@article
en een van de volgende waarden voor@rowcount_only
op:- 1 - Alleen controle voor rijaantal (de standaardinstelling)
- 2 - Aantal rijen en binaire controlesom.
Notitie
Als u sp_article_validation (Transact-SQL)wilt uitvoeren, moet u SELECT-machtigingen hebben voor alle kolommen in de gepubliceerde basistabel.
(Optioneel) Start de distributieagent voor elk abonnement als deze nog niet wordt uitgevoerd. Zie Een pull-abonnement synchroniseren en een pushabonnement synchroniserenvoor meer informatie.
Controleer de uitvoer van de agent op het resultaat van de validatie.
Eén abonnee
Bij de uitgever, open op de publicatiedatabase een expliciete transactie met behulp van BEGIN TRANSACTION (Transact-SQL).
Bij de Publisher op de publicatiedatabase, voer sp_marksubscriptionvalidation (Transact-SQL)uit. Geef de publicatie op voor
@publication
, de naam van de abonnee voor@subscriber
en de naam van de abonnementsdatabase voor@destination_db
.(Optioneel) Herhaal stap 2 voor elk abonnement dat wordt gevalideerd.
In Publisher, voer in de publicatiedatabase sp_article_validation (Transact-SQL)uit. Geef
@publication
, de naam van het artikel voor@article
en een van de volgende waarden voor@rowcount_only
op:- 1 - Alleen controle voor aantal rijen (de standaardinstelling)
- 2 - Aantal rijen en binaire controlesom.
Notitie
Als u sp_article_validation (Transact-SQL)wilt uitvoeren, moet u SELECT-machtigingen hebben voor alle kolommen in de gepubliceerde basistabel.
Voer bij Publisher in de publicatiedatabase de transactie door met COMMIT TRANSACTION (Transact-SQL).
(Optioneel) Herhaal stap 1 tot en met 5 voor elk artikel dat wordt gevalideerd.
(Optioneel) Start de Distributie-agent als deze nog niet actief is. Zie Een pull-abonnement synchroniseren en een pushabonnement synchroniserenvoor meer informatie.
Controleer de uitvoer van de agent op het resultaat van de validatie. Voor meer informatie, zie Gegevens valideren op abonnee.
Alle pushabonnementen naar een transactionele publicatie
Replicatiemonitor gebruiken
Vouw in Replication Monitor een Publisher-groep uit in het linkerdeelvenster en vouw vervolgens een Uitgever uit.
Klik met de rechtermuisknop op de publicatie waarvoor u abonnementen wilt valideren en klik vervolgens op Abonnementen valideren.
Selecteer in het dialoogvenster Abonnementen valideren welke abonnementen u wilt valideren:
- Selecteer Valideer alle SQL Server-abonnementen.
- Selecteer Valideer de volgende abonnementenen selecteer vervolgens een of meer abonnementen.
Als u het type validatie wilt opgeven dat moet worden uitgevoerd (aantal rijen of aantal rijen en controlesom) klikt u op validatieoptiesen geeft u opties op in het dialoogvenster Opties voor abonnementsvalidatie.
Selecteer OK-.
Klik op het tabblad Alle abonnementen.
Validatieresultaten weergeven. Voor elk pushabonnement:
- Als de agent niet actief is, klikt u met de rechtermuisknop op het abonnement en klikt u vervolgens op Synchronisatie starten.
- Klik met de rechtermuisknop op het abonnement en klik vervolgens op Details weergeven.
- Bekijk informatie over het tabblad Distributor to Subscriber History in het tekstgebied Acties in de geselecteerde sessie.
Eén abonnement op een samenvoegpublicatie
SQL Server Management Studio gebruiken
Maak verbinding met publisher in SQL Server Management Studio en vouw vervolgens het serverknooppunt uit.
Vouw de map Replication uit en vouw vervolgens de map Local Publications uit.
Vouw de publicatie uit waarvoor u abonnementen wilt valideren, klik met de rechtermuisknop op het abonnement en klik vervolgens op Abonnement valideren.
Selecteer in het dialoogvenster Abonnement validerenDit abonnement valideren.
Als u het type validatie wilt opgeven dat moet worden uitgevoerd (aantal rijen of aantal rijen en controlesom) klikt u op Optiesen geeft u vervolgens opties op in het dialoogvenster Opties voor abonnementsvalidatie.
Selecteer OK-.
Validatieresultaten weergeven in Replicatiecontrole of de Synchronisatiestatus weergeven dialoogvenster:
- Vouw de publicatie uit, klik met de rechtermuisknop op het abonnement en klik vervolgens op Synchronisatiestatus weergeven.
- Als de agent niet draait, klikt u op Start in het dialoogvenster Synchronisatiestatus weergeven. In het dialoogvenster worden informatieve berichten met betrekking tot validatie weergegeven.
Als er geen berichten met betrekking tot validatie worden weergegeven, heeft de agent al een volgend bericht geregistreerd. In dit geval bekijkt u de validatieresultaten in Replication Monitor. Voor meer informatie, zie de instructies voor de Replicatiemonitor in dit onderwerp.
Voor alle abonnementen op een Merge-publicatie
SQL Server Management Studio gebruiken
Maak verbinding met publisher in SQL Server Management Studio en vouw vervolgens het serverknooppunt uit.
Vouw de map Replication uit en vouw vervolgens de map Local Publications uit.
Klik met de rechtermuisknop op de publicatie waarvoor u abonnementen wilt valideren en klik vervolgens op Alle abonnementen valideren.
Geef in het dialoogvenster Alle abonnementen valideren het type validatie op dat moet worden uitgevoerd (aantal rijen of aantal rijen en controlesom).
Selecteer OK-.
Bekijk validatieresultaten in Replicatiecontrole of in het dialoogvenster voor het weergeven van de synchronisatiestatus. Voor elk abonnement:
- Vouw de publicatie uit, klik met de rechtermuisknop op het abonnement en klik vervolgens op Synchronisatiestatus weergeven.
- Als de agent niet actief is, klikt u op Start in het dialoogvenster Synchronisatiestatus weergeven. In het dialoogvenster worden informatieve berichten met betrekking tot validatie weergegeven.
Als er geen berichten met betrekking tot validatie worden weergegeven, heeft de agent al een volgend bericht geregistreerd. In dit geval bekijkt u de validatieresultaten in Replication Monitor. Voor meer informatie, zie de procedures voor de replicatiemonitor in dit onderwerp.
Eén pushabonnement op een samenvoegpublicatie
Replicatiemonitor gebruiken
- Vouw in Replicatiecontrole een Publisher-groep uit in het linkerdeelvenster, vouw een Uitgever uit en klik vervolgens op een publicatie.
- Klik op het tabblad Alle abonnementen.
- Klik met de rechtermuisknop op het abonnement dat u wilt valideren en klik vervolgens op Abonnement valideren.
- Selecteer in het dialoogvenster Abonnement validerenDit abonnement valideren.
- Als u het type validatie wilt opgeven dat moet worden uitgevoerd (aantal rijen of aantal rijen en controlesom) klikt u op Optiesen geeft u vervolgens opties op in het dialoogvenster Opties voor abonnementsvalidatie.
- Selecteer OK-.
- Klik op het tabblad Alle abonnementen.
- Validatieresultaten weergeven:
- Als de agent niet wordt uitgevoerd, klikt u met de rechtermuisknop op het abonnement en klikt u vervolgens op Synchronisatie starten.
- Klik met de rechtermuisknop op het abonnement en klik vervolgens op Details weergeven.
- Bekijk op het tabblad Synchronisatiegeschiedenis informatie in het tekstvak Laatste bericht van de geselecteerde sessie.
Transact-SQL gebruiken
Voer in de publicatiedatabase bij Publisher sp_validatemergesubscription (Transact-SQL)uit. Geef
@publication
op, de naam van de abonnee voor@subscriber
, de naam van de abonnementsdatabase voor@subscriber_db
en een van de volgende waarden voor@level
:- 1 - Alleen validatie van rijen aantal.
- 3 - binaire controlesomvalidatie voor rijaantal.
Hiermee wordt het geselecteerde abonnement gemarkeerd voor validatie.
Start de samenvoegagent voor iedere abonnementsdienst. Zie Een pull-abonnement synchroniseren en een pushabonnement synchroniserenvoor meer informatie.
Controleer de uitvoer van de agent op het resultaat van de validatie.
Herhaal stap 1 tot en met 3 voor elk abonnement dat wordt gevalideerd.
Notitie
Een abonnement op een samenvoegpublicatie kan ook worden gevalideerd aan het einde van een synchronisatie door de parameter -Validate op te geven bij het uitvoeren van de Replicatiesamenvoegagent.
Voor alle pushabonnementen voor een samenvoegpublicatie
Replicatiemonitor gebruiken
- Vouw in Replication Monitor een Publisher-groep uit in het linkerdeelvenster en vouw vervolgens een Uitgever uit.
- Klik met de rechtermuisknop op de publicatie waarvoor u abonnementen wilt valideren en klik vervolgens op Alle abonnementen valideren.
- Geef in het dialoogvenster Alle abonnementen valideren het type validatie op dat moet worden uitgevoerd (aantal rijen of aantal rijen en controlesom).
- Selecteer de optie OK -.
- Klik op het tabblad Alle abonnementen.
- Validatieresultaten weergeven. Voor elk pushabonnement:
- Als de agent niet actief is, klik met de rechtermuisknop op het abonnement en klik vervolgens op Synchronisatie starten.
- Klik met de rechtermuisknop op het abonnement en klik vervolgens op Details weergeven.
- Bekijk de informatie in het tekstvak Laatste bericht van de geselecteerde sessie op het tabblad Synchronisatiegeschiedenis.
Transact-SQL gebruiken
Voer in Publisher in de publicatiedatabase sp_validatemergepublication (Transact-SQL)uit. Geef
@publication
en een van de volgende waarden op voor@level
:- 1 - alleen-rijaantalvalidatie.
- 3 - binaire controlesomvalidatie voor aantal rijen.
Hiermee worden alle abonnementen gemarkeerd voor validatie.
Start de samenvoegagent voor elk abonnement. Zie Een pull-abonnement synchroniseren en een pushabonnement synchroniserenvoor meer informatie.
Controleer de uitvoer van de agent op het resultaat van de validatie. Zie Gegevens valideren op de abonneevoor meer informatie.
Gegevens valideren met parameters van Merge Agent
Start de Merge Agent bij de abonnee (pull-abonnement) of bij de distributeur (pushabonnement) vanaf de opdrachtprompt op een van de volgende manieren.
- Het opgeven van een waarde van 1 (rijaantal) of 3 (rijaantal en binaire controlesom) voor de parameter -Validate.
- Voor de parameter -ProfileName het specificeren van de validatie van rijaantal of rijaantal en controlesomvalidatie.
Zie Een pull-abonnement synchroniseren of een pushabonnement synchroniserenvoor meer informatie.
Replicatiebeheerobjecten (RMO) gebruiken
Met replicatie kunt u replicatiebeheerobjecten (RMO) gebruiken om programmatisch te valideren dat de gegevens bij de abonnee overeenkomen met gegevens van de Uitgever. De objecten die u gebruikt, zijn afhankelijk van het type replicatietopologie. Transactionele replicatie vereist validatie van alle abonnementen voor een publicatie.
Notitie
Zie voorbeeldvoorbeeld (RMO)verderop in deze sectie voor een voorbeeld.
Gegevens valideren voor alle artikelen in een transactionele publicatie
Maak een verbinding met publisher met behulp van de klasse ServerConnection.
Maak een exemplaar van de TransPublication-klasse. Stel de eigenschappen Name en DatabaseName voor de publicatie in. Stel de eigenschap ConnectionContext in op de verbinding die u in stap 1 hebt gemaakt.
Roep de methode LoadProperties aan om de resterende eigenschappen van het object op te halen. Als deze methode onwaarretourneert, zijn de publicatie-eigenschappen in stap 2 onjuist gedefinieerd of bestaat de publicatie niet.
Roep de methode ValidatePublication aan. Geef het volgende door:
Een Booleaanse waarde die aangeeft of de distributieagent moet worden gestopt nadat de validatie is voltooid.
Hiermee worden de artikelen gemarkeerd voor validatie.
Als deze nog niet wordt uitgevoerd, start u de distributieagent om elk abonnement te synchroniseren. Zie Een pushabonnement synchroniseren of een pull-abonnement synchroniserenvoor meer informatie. Het resultaat van de validatiebewerking wordt naar de agentgeschiedenis geschreven. Zie Replicatie bewakenvoor meer informatie.
Gegevens in alle abonnementen valideren voor een samenvoegpublicatie
Maak een verbinding met publisher met behulp van de klasse ServerConnection.
Maak een exemplaar van de MergePublication-klasse. Stel de eigenschappen Name en DatabaseName voor de publicatie in. Stel de eigenschap ConnectionContext in op de verbinding die u in stap 1 hebt gemaakt.
Roep de methode LoadProperties aan om de resterende eigenschappen van het object op te halen. Als deze methode onwaarretourneert, zijn de publicatie-eigenschappen in stap 2 onjuist gedefinieerd of bestaat de publicatie niet.
Roep de methode ValidatePublication aan. Geef de gewenste ValidationOptiondoor.
Voer de Merge Agent uit voor elk abonnement om de validatie te starten of wacht tot de volgende geplande uitvoering van de agent. Zie Een pull-abonnement synchroniseren en een pushabonnement synchroniserenvoor meer informatie. Het resultaat van de validatiebewerking wordt geschreven naar de agentgeschiedenis, die u bekijkt met behulp van Replication Monitor. Zie Replicatie bewakenvoor meer informatie.
Gegevens in één abonnement valideren voor een samenvoegpublicatie
Maak een verbinding met publisher met behulp van de klasse ServerConnection.
Maak een exemplaar van de MergePublication-klasse. Stel de eigenschappen Name en DatabaseName voor de publicatie in. Stel de eigenschap ConnectionContext in op de verbinding die u in stap 1 hebt gemaakt.
Roep de methode LoadProperties aan om de resterende eigenschappen van het object op te halen. Als deze methode onwaarretourneert, zijn de publicatie-eigenschappen in stap 2 onjuist gedefinieerd of bestaat de publicatie niet.
Roep de methode ValidateSubscription aan. Geef de naam door van de abonnee- en abonnementsdatabase die wordt gevalideerd en de gewenste ValidationOption.
Voer de Merge Agent uit voor de abonnementssessie om de validatie te starten, of wacht tot de volgende geplande agentsessie wordt uitgevoerd. Zie Een pull-abonnement synchroniseren en een pushabonnement synchroniserenvoor meer informatie. Het resultaat van de validatiebewerking wordt geschreven naar de agentgeschiedenis, die u bekijkt met behulp van Replication Monitor. Zie Replicatie bewakenvoor meer informatie.
Voorbeeld (RMO)
In dit voorbeeld worden alle abonnementen gemarkeerd voor een transactionele publicatie voor validatie van rijenaantal.
// 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
In dit voorbeeld wordt een specifiek abonnement gemarkeerd voor een samenvoegpublicatie voor validatie van rowcount.
// 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