KB2733630 — агент слияния может дать сбой во время синхронизации репликации слияния в SQL Server

Применяется к
SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Express SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Parallel Data Warehouse SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2008 Standard SQL Server 2008 Web SQL Server 2008 Workgroup SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Web - duplicate (do not use)

Проблема

Во время синхронизации репликации слияния в Microsoft SQL Server 2008 и более поздних версиях SQL Server агент слияния может завершиться сбоем. Кроме того, появляется следующее сообщение об ошибке:

Примечание

Агент слияния завершил работу со сбоем после того, как обнаружил, что очистка метаданных на основе хранения удалила метаданные подписчика для изменений, еще не отправленных издателю. Необходимо повторно инициализировать подписку (без отправки). (Источник: MSSQL_REPL, номер ошибки: MSSQL_REPL-2147199401)

Справка: http://help/MSSQL_REPL-2147199401

Эта проблема может возникать по нескольким причинам. К ним относится множество причин, которые ожидаются при определенных обстоятельствах. Чтобы определить, возникла ли эта ошибка неожиданно, изучите сведения о метаданных, описанные в разделе «Причина».

Причина

Причину этой проблемы можно найти в следующих системных таблицах на абоненте:

  • dbo.sysMergeSubscriptions
  • ДБО. MsMerge_Genhistory

Убедитесь, что агент слияния больше не синхронизируется. Затем выполните следующий запрос и изучите результаты:

выберите sentgen из SubscriberDB.dbo.sysMergeSubscriptions, где pubid = subid и sentgen не равно null

Результаты запроса

В столбце sentgen отмечена самая старая группа изменений, которые подписчик отправил издателю. Если возвращается несколько значений, проверьте другие столбцы в таблице dbo.sysMergeSubscriptions, чтобы убедиться в том, что вы просматриваете метаданные для правильной публикации. Затем используйте значение, возвращаемое этим запросом, в следующем запросе:

Выберите Первые 20 * из SubscriberDB.dbo.MSmerge_genhistory где поколение >= sentgen_value порядок по поколениюВыходные данные запроса должны выглядеть примерно так:

Результаты запроса по поколениям

Ошибка может возникать неожиданно, если выполняются все следующие условия:

  • Значение в столбце generation в первой строке немного больше, чем значение sentgen в предыдущем запросе.
  • Значение в столбце genstatus равно 4.
  • Значение в столбце changecount равно 0.

Примечание: Значение столбца coldate в первой строке также обычно намного старше, чем значение этого столбца в других строках.

Решение

Чтобы устранить эту проблему, повторно инициализируйте подписчика, создавшего ошибку.

В некоторых случаях эту проблему можно решить без полной повторной инициализации. Обратитесь в службу поддержки пользователей Майкрософт для получения сведений о возможном временном решении.

Чтобы предотвратить возникновение этой проблемы в будущем, примените одно из следующих исправлений в зависимости от используемой версии SQL Server.

Сведения о накопительном пакете обновления

SQL Server 2008

В SQL Server 2008 эта проблема не исправлена.

SQL Server 2008 R2 с пакетом обновления 2 (SP2)

Исправление для этой проблемы впервые выпущено в накопительном пакете обновления 3. Для получения дополнительной информации о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2 с пакетом обновления 2, откройте статью со следующим номером в базе знаний Майкрософт:

2754552 Накопительный пакет обновления 3 для SQL Server 2008 R2 с пакетом обновления 2
 Примечание. Поскольку сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008 R2 с пакетом обновления 2 (SP2). Рекомендуется рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

2730301 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2 с пакетом обновления 2

SQL Server 2012

Исправление для этой проблемы впервые выпущено в накопительном пакете обновления 4. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2012, откройте статью со следующим номером в базе знаний Майкрософт:

2758687 Накопительный пакет обновления 4 для SQL Server 2012
 Примечание. Поскольку сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2012. Рекомендуется рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

2692828 Сборки SQL Server 2012 г., выпущенные после SQL Server 2012 г.

SQL Server 2008 R2 с пакетом обновления 1 (SP1)

Исправление для этой проблемы впервые было выпущено в накопительном пакете обновления 8. Для получения дополнительной информации о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2 с пакетом обновления 1, щелкните по следующему номеру статьи в базе знаний Майкрософт:

2723743 Накопительный пакет обновления 8 для SQL Server 2008 R2 с пакетом обновления 1 (SP1Note) Поскольку сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008 R2 с пакетом обновления 1. Рекомендуется рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

2567616 Сборки SQL Server 2008 R2, выпущенные после выпуска SQL Server 2008 R2 с пакетом обновления 1 (SP1)