Koppla agenten kan misslyckas under Sammanslagningsreplikering synkronisering i SQL Server

BUG #: 171429 (Content Maintenance)

Symptom

Vid synkronisering av Sammanslagningsreplikering i Microsoft SQL Server 2008 och senare versioner av SQL Server misslyckas kopplingen agenten. Dessutom visas följande felmeddelande:

Kopplingen agent misslyckades efter att identifiera att bevarande-baserade metadata rensning har tagit bort metadata hos prenumeranten för ändringar som ännu inte skickats till utgivaren. Du måste initiera prenumerationen igen (utan uppladdning). (Källa: MSSQL_REPL, fel nummer: MSSQL_REPL-2147199401) Få hjälp: http://help/MSSQL_REPL-2147199401

Det här problemet kan bero på flera orsaker. Dessa inkluderar många orsaker som förväntas under vissa omständigheter. Kontrollera metadatainformation som beskrivs i avsnittet "orsak" för att avgöra om du har stött på det här felet oväntat.

Orsak

Orsaken till detta problem finns i följande systemtabeller på abonnenten:

  • dbo.sysMergeSubscriptions

  • dbo.MsMerge_Genhistory

Kontrollera att koppla agenten inte längre synkroniseras. Kör sedan följande fråga och granska resultaten:

Välj sentgen från SubscriberDB. dbo. sysMergeSubscriptions där pubid = subid och sentgen inte är nullQuery results Kolumnen sentgen markerar den äldsta grupp av ändringar som prenumeranten skickade till utgivaren. Om flera värden returneras, undersöker du de andra kolumnerna i tabellen dbo. sysMergeSubscriptions för att se till att du visar metadata för rätt publikation. Använd sedan det värde som den här frågan returnerar i följande fråga:

Välj topp 20 * från SubscriberDB. dbo. MSmerge_genhistory där generation > = sentgen_value ordning efter generationUtdata från frågan bör likna följande:Query result by generation du kan stöta på felet oväntat när alla följande villkor är uppfyllda:

  • Värdet i kolumnen generation i den första raden är något större än värdet sentgen i föregående fråga.

  • Värdet i kolumnen genstatus är 4.

  • Värdet i kolumnen changecount är 0.

Notera Värdet för kolumnen coldate i den första raden är också vanligtvis mycket äldre än värdet för den kolumnen i de andra raderna.

Lösning

Lös problemet genom att initiera prenumeranten som producerade felet. I vissa fall kan du kanske lösa problemet utan en fullständig ominitiering. Kontakta Microsoft Customer Support Services om du vill ha information om en möjlig lösning. Använd någon av följande korrigeringar, beroende på din version av SQL Server för att förhindra framtida förekomster av det här problemet.

Information om kumulativ uppdatering

SQL Server 2008

Det finns ingen korrigering för det här problemet i SQL Server 2008.

SQL Server 2008 R2 Service Pack 2

Korrigeringsfil för problemet gavs först ut i kumulativ uppdatering 3. Mer information om hur du skaffar den kumulativa uppdateringspaket för SQL Server 2008 R2 Service Pack 2 klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

2754552 Kumulativt uppdateringspaket 3 för SQL Server 2008 R2 Service Pack 2Notera Eftersom byggen är kumulativa, varje ny version av korrigeringsfilen innehåller alla snabbkorrigeringar och alla säkerhetskorrigeringar som ingår i den tidigare SQL Server 2008 R2 Service Pack 2 fix release. Vi rekommenderar att du använder den senaste utgåvan av korrigering som innehåller den här snabbkorrigeringen. Om du vill veta mer klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

2730301 sql Server 2008 R2-versioner som har getts ut efter sql Server 2008 R2 Service Pack 2

SQL Server 2012

Korrigeringsfil för problemet gavs först ut i kumulativ uppdatering 4. Mer information om hur du skaffar den kumulativa uppdateringspaket för SQL Server 2012 klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

2758687 kumulativ uppdateringspaket 4 för SQL Server 2012Notera Eftersom byggen är kumulativa, varje ny version av korrigeringsfilen innehåller alla snabbkorrigeringar och alla säkerhetskorrigeringar som ingår i föregående SQL Server 2012 fix release. Vi rekommenderar att du använder den senaste utgåvan av korrigering som innehåller den här snabbkorrigeringen. Om du vill veta mer klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

2692828 sql Server 2012-versioner som har getts ut efter sql Server 2012

SQL Server 2008 R2 Service Pack 1

Korrigeringsfil för problemet gavs först ut i kumulativ uppdatering 8. Mer information om hur du skaffar den kumulativa uppdateringspaket för SQL Server 2008 R2 Service Pack 1 klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

2723743 kumulativ uppdateringspaket 8 för SQL Server 2008 R2 SP1Notera Eftersom byggen är kumulativa, varje ny version av korrigeringsfilen innehåller alla snabbkorrigeringar och alla säkerhetskorrigeringar som ingår i den tidigare SQL Server 2008 R2 Service Pack 1 fix release. Vi rekommenderar att du använder den senaste utgåvan av korrigering som innehåller den här snabbkorrigeringen. Om du vill veta mer klickar du på följande artikelnummer och visar artikeln i Microsoft Knowledge Base:

2567616 sql Server 2008 R2-versioner som har getts ut efter sql Server 2008 R2 SP1

Workaround

To work around this issue and recover from the merge agent failure, update the cleanedup_unsent_changes column and the genstatus column in the tables that you previously queried. To perform the updates, use queries such as the following:

update SubscriberDB.dbo.sysMergeSubscriptions set cleanedup_unsent_changes = 0 where sentgen = sentgen

update SubscriberDB.dbo.MSmerge_genhistory set genstatus = 2 where generation = first row from other queryFrom these example queries, the value of the sentgen placeholder would be 7253913 and the value of the first row from other query placeholder would be 7253914. Your values will be different.

After the tables are updated, restart the merge agent, and wait for synchronization to be complete. When synchronization is complete, run the following query again, and see whether the sentgen value increased:

select sentgen from SubscriberDB.dbo.sysMergeSubscriptions where pubid = subid and sentgen is not nullIf the agent is successful, and if the sentgen value increased, you successfully worked around the failure.

Author: jonclark
Writer: v-thomr
Tech Review: jonclark; ramakoni
Editor: v-anwale,v-rhowar

Behöver du mer hjälp?

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Microsoft Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×