Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
Het oplossen van replicatiefouten kan frustrerend zijn zonder basiskennis van de werking van transactionele replicatie. De eerste stap bij het maken van een publicatie is dat de momentopnameagent de momentopname maakt en deze opslaat in de map met momentopnamen. Vervolgens past de distributieagent de momentopname toe op de abonnee.
Met dit proces wordt de publicatie gemaakt en wordt deze in de synchronisatiestatus opgenomen . Synchronisatie werkt in drie fasen:
Transacties vinden plaats op objecten die worden gerepliceerd en worden gemarkeerd als 'voor replicatie' in het transactielogboek.
De logboeklezeragent scant via het transactielogboek en zoekt naar transacties die zijn gemarkeerd als 'voor replicatie'. Deze transacties worden vervolgens opgeslagen in de distributiedatabase.
De distributieagent scant via de distributiedatabase met behulp van de lezerthread. Vervolgens maakt deze agent met behulp van de writer-thread verbinding met de abonnee om deze wijzigingen toe te passen op de abonnee.
Fouten kunnen optreden in elke stap van dit proces. Het vinden van deze fouten kan het lastigste aspect zijn van het oplossen van synchronisatieproblemen. Gelukkig maakt het gebruik van Replication Monitor dit proces eenvoudig.
Opmerking
Het doel van deze gids voor probleemoplossing is het leren van methodologie voor probleemoplossing. Het is ontworpen om uw specifieke fout niet op te lossen, maar om algemene richtlijnen te bieden bij het vinden van fouten met replicatie. Er worden enkele specifieke voorbeelden gegeven, maar de oplossing kan variëren, afhankelijk van de omgeving. De voorbeeldfouten zijn gebaseerd op de zelfstudie: Replicatie configureren tussen twee volledig verbonden servers (transactionele) zelfstudie.
Methodologie voor probleemoplossing
Vragen om te stellen
- Waar in het synchronisatieproces mislukt de replicatie?
- Welke agent ondervindt een fout?
- Wanneer werkte de replicatie voor het laatst? Is er sindsdien iets veranderd?
Te nemen stappen
Gebruik Replication Monitor om te bepalen op welk punt de replicatie de fout ondervindt (welke agent?):
- Als er fouten optreden in de sectie Publisher to Distributor , is het probleem met de logboeklezeragent.
- Als er fouten optreden in de sectie Distributor to Subscriber , is het probleem met de distributieagent.
Bekijk de taakgeschiedenis van die agent in Taakactiviteitsmonitor om details van de fout te identificeren. Als de taakgeschiedenis niet voldoende details weergeeft, kunt u uitgebreide logboekregistratie voor die specifieke agent inschakelen.
Probeer een oplossing voor de fout te bepalen.
Fouten zoeken met de momentopnameagent
De momentopnameagent genereert de momentopname en schrijft deze naar de opgegeven map met momentopnamen.
Bekijk de status van uw momentopnameagent:
Vouw in Objectverkenner het knooppunt Lokale publicatie uit onder Replicatie.
Klik met de rechtermuisknop op de publicatie AdvWorksProductTrans>Status Snapshot Agent weergeven.
Als er een fout wordt gerapporteerd in de status van de momentopnameagent, vindt u meer informatie in de taakgeschiedenis van de momentopnameagent:
Vouw SQL Server Agent uit in Objectverkenner en open Taakactiviteitsmonitor.
Sorteer op categorie en identificeer de momentopnameagent op de categorie REPL-Snapshot.
Klik met de rechtermuisknop op de momentopnameagent en selecteer Geschiedenis weergeven.
Selecteer in de geschiedenis van de momentopnameagent de relevante logboekvermelding. Dit is meestal een regel of twee voordat de vermelding die de fout rapporteert. (Een rode X geeft fouten aan.) Controleer de berichttekst in het vak onder de logboeken:
The replication agent had encountered an exception. Exception Message: Access to path '\\node1\repldata.....' is denied.
Als uw Windows-machtigingen niet juist zijn geconfigureerd voor uw momentopnamemap, ziet u de foutmelding 'Toegang is geweigerd' voor de momentopnameagent. U moet machtigingen controleren voor de map waarin de momentopname is opgeslagen en zorg ervoor dat het account dat wordt gebruikt om de momentopnameagent uit te voeren, machtigingen heeft voor toegang tot de share.
Fouten zoeken met de logboeklezeragent
De logboeklezeragent maakt verbinding met uw uitgeversdatabase en scant het transactielogboek op transacties die zijn gemarkeerd als 'voor replicatie'. Vervolgens worden deze transacties toegevoegd aan de distributiedatabase.
Maak verbinding met de uitgever in SQL Server Management Studio. Vouw het serverknooppunt uit, klik met de rechtermuisknop op de map Replicatie en selecteer Replicatiecontrole starten:
Replicatiemonitor wordt geopend:
De rode X geeft aan dat de publicatie niet wordt gesynchroniseerd. Vouw Mijn uitgevers aan de linkerkant uit en vouw vervolgens de relevante uitgeverserver uit.
Selecteer de publicatie AdvWorksProductTrans aan de linkerkant en zoek de rode X op een van de tabbladen om te bepalen waar het probleem zich bevindt. In dit geval bevindt de rode X zich op het tabblad Agents , zodat een van de agents een fout krijgt:
Selecteer het tabblad Agents om te bepalen welke agent de fout ondervindt:
In deze weergave ziet u twee agents, de momentopnameagent en de logboeklezeragent. Degene die een fout toont, heeft de rode X. In dit geval is het de Log Reader Agent.
Dubbelklik op de regel die de fout rapporteert om de agentgeschiedenis voor de logboeklezeragent te openen. Deze geschiedenis bevat meer informatie over de fout:
Status: 0, code: 20011, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'. The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'. Status: 0, code: 15517, text: 'Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.'. Status: 0, code: 22037, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'.De fout treedt meestal op wanneer de eigenaar van de uitgeverdatabase niet juist is ingesteld. Dit kan gebeuren wanneer een database wordt hersteld. Om dit te verifiëren:
Vouw Databases uit in Objectverkenner.
Klik met de rechtermuisknop op AdventureWorks2022>Properties.
Controleer of er een eigenaar bestaat onder de pagina Bestanden . Als dit vak leeg is, is dit waarschijnlijk de oorzaak van uw probleem.
Als de eigenaar leeg is op de pagina Bestanden, opent u een Nieuw Query-venster in de context van de
AdventureWorks2022database. Voer de volgende T-SQL-code uit:-- set the owner of the database to 'sa' or a specific user account, without the brackets. EXECUTE sp_changedbowner '<useraccount>'; -- example for sa: exec sp_changedbowner 'sa' -- example for user account: exec sp_changedbowner 'sqlrepro\administrator'Mogelijk moet u de logboeklezeragent opnieuw starten:
Vouw het knooppunt SQL Server Agent uit in Objectverkenner en open Taakactiviteit-monitor.
Sorteer op categorie en identificeer de logboeklezeragent op de categorie REPL-LogReader .
Klik met de rechtermuisknop op de Loglezer-agent taak en selecteer Taak starten bij deze stap.
Controleer of uw publicatie nu wordt gesynchroniseerd door Replication Monitor opnieuw te openen. Als deze nog niet is geopend, kunt u deze vinden door met de rechtermuisknop op Replicatie te klikken in Objectverkenner.
Selecteer de publicatie AdvWorksProductTrans , selecteer het tabblad Agents en dubbelklik op de logboeklezeragent om de agentgeschiedenis te openen. U ziet nu dat de logboeklezeragent wordt uitgevoerd en dat er opdrachten worden gerepliceerd of dat er geen gerepliceerde transacties zijn:
Fouten zoeken met de distributieagent
De distributieagent zoekt gegevens in de distributiedatabase en past deze vervolgens toe op de abonnee.
Maak verbinding met de uitgever in SQL Server Management Studio. Vouw het serverknooppunt uit, klik met de rechtermuisknop op de map Replicatie en selecteer Replicatiecontrole starten.
Selecteer in Replication Monitor de publicatie AdvWorksProductTrans en selecteer het tabblad Alle abonnementen . Klik met de rechtermuisknop op het abonnement en selecteer Details weergeven:
Het dialoogvenster Distributor to Subscriber History wordt geopend en verduidelijkt welke fout de agent tegenkomt:
Error messages: Agent 'NODE1\SQL2016-AdventureWorks2022-AdvWorksProductTrans-NODE2\SQL2016-7' is retrying after an error. 89 retries attempted. See agent job history in the Jobs folder for more details.De fout geeft aan dat de distributieagent opnieuw probeert. Raadpleeg de taakgeschiedenis voor de distributieagent voor meer informatie:
Vouw SQL Server Agent uit in objectverkenner >taakactiviteit monitor.
Sorteer de taken op categorie.
Identificeer de distributieagent op de categorie REPL-Distributie. Klik met de rechtermuisknop op de agent en selecteer Geschiedenis weergeven.
Selecteer een van de foutvermeldingen en bekijk de fouttekst onder aan het venster:
Message: Unable to start execution of step 2 (reason: Error authenticating proxy NODE1\repl_distribution, system error: The user name or password is incorrect.)Deze fout geeft aan dat het wachtwoord dat de gebruikte distributieagent onjuist is. U kunt dit oplossen:
Vouw het replicatieknooppunt uit in Objectverkenner.
Klik met de rechtermuisknop op de >.
Selecteer het beletselteken (...) naast agentprocesaccount en wijzig het wachtwoord.
Controleer replicatiecontrole opnieuw door met de rechtermuisknop te klikken op Replicatie in Objectverkenner. Een rode X onder Alle abonnementen geeft aan dat de distributieagent nog steeds een fout krijgt.
Open de geschiedenis van Distributie naar Abonnee door met de rechtermuisknop op het abonnement te klikken in Replication Monitor> en Bekijk Details. Hier is de fout nu anders:
Connecting to Subscriber 'NODE2\SQL2016' Agent message code 20084. The process could not connect to Subscriber 'NODE2\SQL2016'. Number: 18456 Message: Login failed for user 'NODE2\repl_distribution'.Deze fout geeft aan dat de distributieagent geen verbinding kan maken met de abonnee, omdat de aanmelding is mislukt voor gebruiker NODE2\repl_distribution. Als u verder wilt onderzoeken, maakt u verbinding met de abonnee en opent u het huidige SQL Server-foutenlogboek onder het beheerknooppunt in Objectverkenner:
Als u deze fout ziet, ontbreekt de aanmelding bij de abonnee. Zie Beveiligingsrolvereisten voor replicatie om deze fout op te lossen.
Nadat de aanmeldingsfout is opgelost, controleert u replicatiecontrole opnieuw. Als alle problemen zijn opgelost, ziet u een groene pijl naast publicatienaam en de status Wordt uitgevoerd onder Alle abonnementen.
Klik met de rechtermuisknop op het abonnement om de Distributor naar Abonnee geschiedenis opnieuw te openen en te controleren of het succesvol was. Als dit de eerste keer is dat u de Distribution Agent gebruikt, ziet u dat de snapshot in bulk naar de abonnee is gekopieerd.
Fouten zoeken met de samenvoegagent
Het kan lang duren voordat de samenvoegagent wijzigingen repliceert. Als u wilt bepalen welke stap van het synchronisatieproces voor samenvoeging de meeste tijd kost, gebruikt u traceringsvlag 101 samen met logboekregistratie van de samenvoegagent. Gebruik hiervoor de volgende parameters voor de parameters van de samenvoegagent en start de agent opnieuw op:
-T 101
-output
-outputverboselevel
Opmerking
Als u statistieken naar de <distribution-server>..msmerge_history tabel moet schrijven, gebruikt u traceringsvlag 102.
Een voorbeelduitvoer van de samenvoegagent nadat de samenvoegingsreplicatiesynchronisatie is voltooid, is als volgt:
**************************************************************
CONNECTION TIMES --> time took to establish the connection to the servers. Publisher (all connections) 156 msec Subscriber (all connections) 32 msec Distributor 93 msec
**************************************************************
UPLOAD COUNTERS --> upload phase (changes from the Sub to the Pub) stats MakeGeneration Time = 343 msec. InsertGenHistory Time = 31 msec. UpdateGenHistory Time = 0 msec. ProxiedMetadata Time = 0 msec.
**************************************************************
DOWNLOAD COUNTERS --> download phase (changes from the Pub to the Sub) stats MakeGeneration Time = 219 msec. InsertGenHistory Time = 0 msec. UpdateGenHistory Time = 0 msec.
**************************************************************
RETENTION-BASED CLEANUP STATISTICS --> sp_mergemetadataretentioncleanup proc stats Publisher: Cleanup Time 281 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_tombstone rows cleaned up 0 Subscriber: Cleanup Time 187 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_rowtrack rows cleaned up 0 MSmerge_tombstone rows cleaned up 0
**************************************************************
RETRY STATISTICS Retry Time (Upload) 0 msec. Retry Time (Download) 0 msec. Total changes retried 0 Number of Iterations through rows needing retry 0 Total number of changes that failed despite retry 0
**************************************************************
PROXY METADATA QUEUE COUNTERS Queue Full: Number of Waits: 0, Total Wait Time: 0 msec
**************************************************************
Distributor-side History Logging Time = 219 msec. Number of Distributor-side History Messages Logged = 11 Subscriber-side History Logging Time = 295 msec. Number of Subscriber-side History Messages Logged = 11
**************************************************************
2013-05-28 17:24:11.820 OLE DB Subscriber '<SQL Server name>\sql2008r2': DBCC SQLPERF (NETSTATS) 2013-05-28 17:24:11.822 OLE DB Publisher '<SQL Server name>\SQL2008R2': DBCC SQLPERF (NETSTATS) 2013-05-28 17:24:11.824 OLE DB Distributor '<SQL Server name>\SQL2008R2': DBCC SQLPERF (NETSTATS) NETWORK STATISTICS Server Reads Writes Bytes Read Bytes Written Publisher 74 74 19112 37526 Subscriber 73 73 19032 36931 Distributor 75 75 19192 38121
**************************************************************
NETWORK STATUS Network Connection: The computer has one or more LAN cards that are active. Network link speed: Destination Incoming Outgoing Publisher Unreachable Unreachable Subscriber Unreachable Unreachable Distributor Unreachable Unreachable
**************************************************************
Uitgebreide logboekregistratie inschakelen voor elke agent
U kunt uitgebreide logboekregistratie gebruiken om gedetailleerdere informatie te bekijken over fouten die optreden met elke agent in de replicatietopologie. De stappen zijn voor elke agent hetzelfde. Zorg ervoor dat u de juiste agent selecteert in Taakactiviteitsmonitor.
Opmerking
De agenten kunnen zich op de uitgever of abonnee bevinden, afhankelijk van of het een pull- of pushabonnement is. Als de agent niet beschikbaar is op de server die u onderzoekt, controleert u de andere server.
Bepaal waar u de uitgebreide logboekregistratie wilt opslaan en zorg ervoor dat de map bestaat. In dit voorbeeld wordt c:\temp gebruikt.
Vouw het knooppunt SQL Server Agent uit in Objectverkenner en open Taakactiviteit-monitor.
Sorteer op categorie en identificeer de gewenste agent. In dit voorbeeld wordt de logboeklezeragent gebruikt. Klik met de rechtermuisknop op de gewenste agent >Eigenschappen.
Selecteer de pagina Stappen en markeer vervolgens de stap Agent uitvoeren . Kies Bewerken.
Start in het opdrachtvak een nieuwe regel, voer de volgende tekst in en selecteer OK:
-Output C:\Temp\OUTPUTFILE.txt -Outputverboselevel 3U kunt de locatie en het uitgebreidheidsniveau wijzigen op basis van uw voorkeur.
Wanneer u de uitgebreide uitvoerparameter toevoegt, kunnen de volgende problemen ertoe leiden dat de agent mislukt of dat het outfile-bestand ontbreekt:
Er is een opmaakprobleem waarbij het streepje een koppelteken werd.
De locatie bestaat niet op schijf of het account waarop de agent wordt uitgevoerd, beschikt niet over machtigingen om naar de opgegeven locatie te schrijven.
Er ontbreekt een spatie tussen de laatste parameter en de
-Outputparameter.Verschillende agents ondersteunen verschillende niveaus van spraakzaamheid. Als u uitgebreide logboekregistratie inschakelt, maar de agent niet kan starten, probeert u het opgegeven verbaaliteitsniveau met 1 te verlagen.
Start de logboeklezeragent opnieuw door met de rechtermuisknop op de agent te klikken >Stop taak bij stap. Vernieuwen door het pictogram Vernieuwen te selecteren op de werkbalk. Klik met de rechtermuisknop op de agent >Start taak bij stap.
Controleer de uitvoer op schijf.
Als u uitgebreide logboekregistratie wilt uitschakelen, volgt u dezelfde stappen als eerder om de hele
-Outputregel te verwijderen die u eerder hebt toegevoegd.
Verwante inhoud
Hulp krijgen
- Ideeën voor SQL: Hebt u suggesties voor het verbeteren van SQL Server?
- Microsoft Q & A (SQL Server)
- DBA Stack Exchange (tag sql-server): Vragen stellen over SQL Server
- Stack Overflow (tag sql-server): antwoorden op vragen over SQL-ontwikkeling
- Licentievoorwaarden en -informatie voor Microsoft SQL Server
- Ondersteuningsopties voor zakelijke gebruikers
- Aanvullende hulp en feedback voor SQL Server
Bijdragen aan SQL-documentatie
Wist u dat u zelf SQL-inhoud kunt bewerken? Door dit te doen helpt u niet alleen onze documentatie te verbeteren, maar krijgt u ook erkenning als bijdrager aan de pagina.
Zie Microsoft Learn-documentatie bewerken voor meer informatie.