Симптоми
По време на синхронизирането на репликацията чрез обединяване в Microsoft SQL Server 2008 и по-нови версии на SQL Server агентът за обединяване може да е неуспешен. Освен това се извежда следното съобщение за грешка:
Забележка
Агентът за обединяване е неуспешен, след като е открил, че почистването на метаданните, базирано на съхранение, е изтрило метаданните при абоната за промени, които още не са изпратени до издателя. Трябва да инициализирате отново абонамента (без качване). (Източник: MSSQL_REPL, номер на грешка: MSSQL_REPL-2147199401)
Получаване на помощ: http://help/MSSQL_REPL-2147199401
Този проблем може да се дължи на няколко причини. Те включват много причини, които се очакват при определени обстоятелства. За да определите дали не сте се натъкнали неочаквано на тази грешка, прегледайте подробностите за метаданните, които са описани в раздел "Причина".
Причина
Причината за този проблем може да бъде намерена в следните таблици за системата на абоната:
- dbo.sysMergeSubscriptions
- dbo. MsMerge_Genhistory
Уверете се, че агентът за обединяване вече не се синхронизира. След това изпълнете следната заявка и прегледайте резултатите:
select sentgen from SubscriberDB.dbo.sysMergeSubscriptions where pubid = subid and sentgen is not null
Колоната sentgen маркира най-старата група от промени, които абонатът е изпратил на издателя. Ако са върнати множество стойности, прегледайте другите колони в таблицата dbo.sysMergeSubscriptions, за да се уверите, че преглеждате метаданните за правилната публикация. След това използвайте стойността, която тази заявка връща, в следната заявка:
select top 20 * from SubscriberDB.dbo.MSmerge_genhistory where generation >= sentgen_value order by generationРезултатът от заявката трябва да изглежда така:
Може да възникне грешката неочаквано, когато са изпълнени всички изброени по-долу условия:
- Стойността в колоната за генериране в първия ред е малко по-голяма от стойността на sentgen в предишната заявка.
- Стойността в колоната genstatus е 4.
- Стойността в колоната "ChangeCount е 0".
Забележка: Стойността на любимата колона от първия ред обикновено е много по-стара от стойността на тази колона в другите редове.
Решение
За да отстраните проблема, инициализирайте отново абоната, който е произвел грешката.
В някои случаи може да успеете да разрешите този проблем без пълно повторно инициализиране. Свържете се с отдела за поддръжка на клиенти на Microsoft за информация за възможно заобиколно решение.
За да предотвратите бъдещи повторения на този проблем, приложете една от следните корекции в зависимост от вашата версия на SQL Server.
Кумулативна информация за актуализацията
SQL Server 2008
В SQL Server 2008 няма корекция за този проблем.
SQL Server 2008 R2 Service Pack 2
Корекцията за този проблем е издадена за първи път в кумулативна актуализация 3. За допълнителна информация как да получите този сборен пакет за актуализация за SQL Server 2008 R2 Service Pack 2, щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:
2754552 Сборен пакет за актуализация 3 за SQL Server 2008 R2 Service Pack 2
Забележка: Тъй като компилациите са кумулативни, всяка нова корекция съдържа всички актуални поправки и корекции на защитата, които са били включени в предишното издание на корекция за SQL Server 2008 R2 Service Pack 2. Препоръчваме ви да помислите за прилагане на най-новото издание на корекцията, което съдържа тази гореща корекция. За допълнителна информация щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:
2730301 Компилациите на SQL Server 2008 R2, които са издадени след издаването на SQL Server 2008 R2 Service Pack 2
SQL Server 2012
Корекцията за този проблем е издадена за първи път в кумулативна актуализация 4. За допълнителна информация как да получите този сборен пакет за актуализация за SQL Server 2012, щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:
2758687 Сборен пакет за актуализация 4 за SQL Server 2012
Забележка: Тъй като компилациите са кумулативни, всяка нова корекция съдържа всички актуални поправки и корекции на защитата, които са били включени в предишното издание на корекция на SQL Server 2012. Препоръчваме ви да помислите за прилагане на най-новото издание на корекцията, което съдържа тази гореща корекция. За допълнителна информация щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:
2692828 Компилациите на SQL Server 2012, които са издадени след издаването на SQL Server 2012
SQL Server 2008 R2 Service Pack 1
Корекцията за този проблем е издадена за първи път в кумулативна актуализация 8. За повече информация как да получите този сборен пакет за актуализация за SQL Server 2008 R2 Service Pack 1, щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:
2723743 Сборен пакет за актуализация 8 за SQL Server 2008 R2 SP1Note Тъй като компилациите са кумулативни, всяка нова корекция съдържа всички актуални поправки и корекции на защитата, които са включени в предишното издание на корекция за SQL Server 2008 R2 Service Pack 1. Препоръчваме ви да помислите за прилагане на най-новото издание на корекцията, което съдържа тази гореща корекция. За допълнителна информация щракнете върху следния номер на статия, за да прегледате статията в базата знания на Microsoft:
2567616 Компилациите на SQL Server 2008 R2, които са издадени след издаването на SQL Server 2008 R2 SP1