Поделиться через


Как репликация слиянием управляет сроком действия подписки и очисткой метаданных

Срок подписки на публикацию слиянием истекает, если она не была синхронизирована с издателем в течение срока хранения публикации. Срок хранения по умолчанию равен 14 дням; он устанавливается с помощью параметров @retention и @retention_period_unit хранимой процедуры sp_addmergepublication (Transact-SQL). Параметр @retention_period_unit требует, чтобы уровень совместимости публикации составлял не менее 90RTM. Для подписчиков, использующих предыдущие версии MicrosoftSQL Server, параметру @retention_period_unit всегда присваивается значение «day» (день). Дополнительные сведения об уровне совместимости см. в подразделе «Уровень совместимости для публикаций слиянием» раздела Использование нескольких версий SQL Server в топологии репликации.

Когда срок подписки истекает, ее следует повторно инициализировать, поскольку метаданные для этой подписки удаляются (дополнительные сведения см. в подразделе «Очистка метаданных» этого раздела). Подписки, которые не были повторно инициализированы, удаляются заданием «Очистка истекших подписок», выполняемым на издателе. По умолчанию это задание запускается ежедневно. Оно удаляет все принудительные подписки, которые не были синхронизированы для удвоения длительности срока хранения публикации. Например:

  • Допустим, срок хранения публикации равен 14 дням, тогда действие подписки может истечь, если она не будет синхронизирована в течение 14 дней.

    Если на издателе выполняется SQL Server 2005 или более поздняя версия, и агент подписки входит в состав SQL Server 2005 или более поздней версии, тогда действие подписки истечет, только если будут внесены изменения в данные секции этой подписки. Например, предположим, что подписчик получает пользовательские данные только для клиентов в Германии. Если срок хранения задан равным 14 дням, срок действия подписки истечет на 14-й день, только если за последние 14 дней не вносились изменения в данные немецких клиентов.

  • В интервале от 14 до 27 дней после последней синхронизации подписка может быть инициализирована повторно.

  • Когда истекает 28 дней после последней синхронизации, задание «Очистка истекших подписок» удаляет подписку. Если истекает срок действия принудительной подписки, она полностью удаляется, а подписки по запросу не удаляются. Подписки по запросу должны удаляться на подписчике. Дополнительные сведения см. в разделе Как удалить подписку по запросу (программирование репликации на языке Transact-SQL).

Вопросы задания срока хранения публикации

При задании срока хранения публикации слиянием следует учитывать следующее:

  • Очистка метаданных репликации слиянием зависит от срока хранения публикации:

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

    • Можно указать бесконечный срок действия подписок (значение «0» параметра @retention), однако настоятельно рекомендуется не использовать это значение, потому что в этом случае метаданные невозможно будет очистить.

  • Срок хранения, устанавливаемый для переиздающего подписчика, не должен превышать срока хранения, заданного для исходного издателя. Если используются альтернативные участники синхронизации, для них и для издателей следует использовать одни и те же значения сроков хранения публикаций. Использование разных значений может привести к несогласованности данных. Если необходимо изменить значение срока хранения, выполните повторную инициализацию подписчика, чтобы избежать несогласованности данных.

  • Если после очистки срок хранения публикации увеличен и выполняется попытка объединения подписки с издателем (на котором уже удалены метаданные), срок действия подписки не истечет, поскольку было увеличено значение срока хранения. Однако издатель не имеет достаточно метаданных для загрузки изменений на подписчик, что ведет к несогласованности данных.

Очистка метаданных

Очистка метаданных в публикациях слиянием осуществляется хранимой процедурой sp_mergemetadataretentioncleanup (Transact-SQL); время очистки определяется в зависимости от срока хранения публикаций. При каждом запуске агента слияния для подписки вызывается процедура очистки. Эта процедура удаляет метаданные, срок хранения которых превышает срок хранения публикации, из следующих системных таблиц:

Все публикации в базе данных публикации используют эти таблицы; если имеется несколько публикаций, для определения времени удаления метаданных всегда используется наибольший срок хранения публикации.