BUG #: 171429 (Content Maintenance)

Ознаки

Під час синхронізації злиття реплікації Microsoft SQL Server 2008 і пізніших версіях SQL Server, агент злиття може не вдатися. Крім того, з'являється таке повідомлення про помилку:

Не вдалося виконати злиття агента, після виявлення, що на основі збереження метаданих очищення видалених метаданих у абонента, щоб зміни ще не надіслано до видавця. Ви повинні повторно ініціалізувати підписку (без завантаження). (Джерело: MSSQL_REPL, номер помилки: MSSQL_REPL-2147199401) Отримати довідку: http://help/MSSQL_REPL-2147199401

Ця проблема може виникати з кількох причин. До них відносяться багато причин, які очікують за певних обставин. Щоб визначити, чи сталася ця помилка несподівано, перегляньте відомості про метадані, описані в розділі "причина".

Причина

Причину цієї проблеми можна знайти в наступних системних таблицях абонента:

  • dbo.sysMergeSubscriptions

  • dbo.MsMerge_Genhistory

Переконайтеся, що агент злиття більше не синхронізується. Запустіть такий запит і перевірте результати:

Виберіть сенген від DBO. sysMergeSubscriptions, де pubid = підідентифікатор і сенген не Null Query results Стовпець " сенген " позначає найстарішу групу змін, які абонент надіслав видавцеві. Якщо повернуто кілька значень, перевірте інші стовпці в таблиці DBO. sysMergeSubscriptions, щоб переконатися, що ви переглядаєте метадані для правильної публікації. Потім використайте значення, яке повертає цей запит у такому запиті:

Виберіть Top 20 * від Підписdbo. MSmerge_genhistory, де покоління > = sentgen_value порядку за поколіннямВивід запиту має виглядати так:Query result by generation під час виконання всіх нижченаведених умов може виникнути помилка.

  • Значення в стовпці " генерація " у першому рядку трохи більше, ніж значення " сенген " у попередньому запиті.

  • Значення стовпця genstatus4.

  • Значення в стовпці changecount - 0.

Зверніть увагу Значення стовпця coldate першого рядка також зазвичай набагато старіший, ніж значення цього стовпця в інших рядках.

Спосіб вирішення

Щоб вирішити цю проблему, Переініціалізуйте абонента, який випустив помилку. У деяких випадках ви можете вирішити цю проблему без повного переініціалізаціі. Зверніться до служби підтримки Microsoft, щоб отримати відомості про можливий обхід. Щоб запобігти майбутнім входжень цієї проблеми, застосуйте одне з таких виправлень, залежно від вашої версії SQL Server.

Сукупне оновлення інформації

SQL Server 2008

Існує немає виправлення для цієї проблеми у SQL Server 2008.

SQL Server 2008 R2 з пакетом оновлень 2

Виправлення для цієї проблеми була вперше випущена у накопичувальне оновлення 3. Щоб отримати додаткові відомості про отримання цього сукупного оновлення пакета для SQL Server 2008 R2 пакет оновлень 2, клацніть номер статті в базі знань Microsoft Knowledge Base:

2754552 сукупного оновлення пакета 3, для SQL Server 2008 R2 з пакетом оновлень 2Зверніть увагу Оскільки ці збірки сукупні, кожен новий виправити реліз, містить усі поточні виправлення, і всі виправлення безпеки, що входили до складу попередніх SQL Server 2008 R2 пакет оновлень 2, виправити реліз. Корпорація Майкрософт рекомендує, що ви вважаєте, що застосування останнього випуску виправити, що містить це виправлення. Щоб отримати додаткові відомості клацніть цей номер статті, щоб переглянути її в базі знань Microsoft Knowledge Base:

2730301 на sql Server 2008 R2 збірки, які були випущені після випуску SQL Server 2008 R2 пакет оновлень 2

SQL Server 2012

Виправлення для цієї проблеми була вперше випущена у накопичувальне оновлення 4. Щоб отримати додаткові відомості про отримання цього сукупного оновлення пакета для SQL Server 2012 клацніть номер статті в базі знань Microsoft Knowledge Base:

2758687 сукупного оновлення пакета 4, для SQL Server 2012Зверніть увагу Оскільки ці збірки сукупні, кожен новий виправити реліз, містить усі поточні виправлення, і всі виправлення безпеки, що входили до складу попередніх SQL Server 2012 виправити реліз. Корпорація Майкрософт рекомендує, що ви вважаєте, що застосування останнього випуску виправити, що містить це виправлення. Щоб отримати додаткові відомості клацніть цей номер статті, щоб переглянути її в базі знань Microsoft Knowledge Base:

2692828 на sql Server 2012 будує, які були випущені після випуску SQL Server 2012

SQL Server 2008 R2 з пакетом оновлень 1

Виправлення для цієї проблеми спочатку було випущено Сукупне оновлення-8. Щоб отримати додаткові відомості про отримання цього сукупного оновлення пакета для SQL Server 2008 R2 пакет оновлень 1 клацніть номер статті в базі знань Microsoft Knowledge Base:

2723743 сукупного оновлення пакета 8, для SQL Server 2008 R2 пакетом оновлень 1Зверніть увагу Оскільки ці збірки сукупні, кожен новий виправити реліз, містить усі поточні виправлення, і всі виправлення безпеки, що входили до складу попередніх SQL Server 2008 R2 пакет оновлень 1, виправити реліз. Корпорація Майкрософт рекомендує, що ви вважаєте, що застосування останнього випуску виправити, що містить це виправлення. Щоб отримати додаткові відомості клацніть цей номер статті, щоб переглянути її в базі знань Microsoft Knowledge Base:

2567616 на sql Server 2008 R2 збірки, які були випущені після випуску SQL Server 2008 R2 пакетом оновлень 1

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

Потрібна додаткова довідка?

Отримуйте нові функції раніше за інших
Приєднатися до Microsoft оцінювачів

Чи були ці відомості корисні?

Наскільки ви задоволені якістю перекладу?
Що вплинуло на ваші враження?

Дякуємо за ваш відгук!

×