gebeurtenis
31 mrt, 23 - 2 apr, 23
De grootste SQL-, Fabric- en Power BI-leerevenement. 31 maart – 2 april. Gebruik code FABINSIDER om $ 400 te besparen.
Zorg dat u zich vandaag nog registreertDeze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
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:
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.
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:
Houd rekening met de volgende problemen bij het valideren van gegevens:
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.
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
:
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.
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:
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.
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:
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.
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:
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:
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:
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.
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:
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.
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
:
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.
Voer in Publisher in de publicatiedatabase sp_validatemergepublication (Transact-SQL)uit. Geef @publication
en een van de volgende waarden op voor @level
:
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.
Start de Merge Agent bij de abonnee (pull-abonnement) of bij de distributeur (pushabonnement) vanaf de opdrachtprompt op een van de volgende manieren.
Zie Een pull-abonnement synchroniseren of een pushabonnement synchroniserenvoor meer informatie.
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.
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.
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.
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.
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
gebeurtenis
31 mrt, 23 - 2 apr, 23
De grootste SQL-, Fabric- en Power BI-leerevenement. 31 maart – 2 april. Gebruik code FABINSIDER om $ 400 te besparen.
Zorg dat u zich vandaag nog registreert