Проблема
Во время синхронизации репликации слияния в 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)