sp_mergecleanupmetadata (Transact-SQL)

Область применения: SQL Server

Следует использовать только в топологиях репликации, включающих серверы под управлением версий SQL Server до SQL Server 2000 (8.x) с пакетом обновления 1 (SP1). sp_mergecleanupmetadata позволяет администраторам очищать метаданные в MSmerge_genhistoryтаблицах , MSmerge_contentsа также MSmerge_tombstone системных таблиц. Эта хранимая процедура выполняется на издателе в базе данных публикации.

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_mergecleanupmetadata
    [ [ @publication = ] N'publication' ]
    [ , [ @reinitialize_subscriber = ] N'reinitialize_subscriber' ]
[ ; ]

Аргументы

[ @publication = ] N'publication'

Имя публикации. @publication — sysname, с значением по умолчанию%, которое очищает метаданные для всех публикаций. При явном указании публикации она должна существовать.

[ @reinitialize_subscriber = ] N'reinitialize_subscriber'

Указывает, необходимо ли повторно инициализировать подписчик. @reinitialize_subscriber — nvarchar(5) с значением по умолчаниюtrue.

  • Если trueподписки помечены для повторной инициализации.
  • Если falseподписки не помечены для повторной инициализации.

Значения кода возврата

0 (успешно) или 1 (сбой).

Замечания

sp_mergecleanupmetadata следует использовать только в топологиях репликации, включающих серверы с версиями SQL Server до SQL Server 2000 (8.x) с пакетом обновления 1 (SP1). Топологии, включающие только SQL Server 2000 (8.x) с пакетом обновления 1 или более поздней версии, должны использовать автоматическую очистку метаданных на основе хранения. При выполнении этой хранимой процедуры следует помнить о необходимом и, возможно, значительном увеличении файла журнала на компьютере, на котором выполняется хранимая процедура.

После sp_mergecleanupmetadata выполнения по умолчанию все подписки на подписчиках публикаций с метаданными, хранящимися в MSmerge_genhistory, MSmerge_contents и MSmerge_tombstone помечены для повторной инициализации, все ожидающие изменения на подписчике теряются, а текущий моментальный снимок помечается устаревшим.

При наличии нескольких публикаций в базе данных, а любой из этих публикаций использует бесконечный период хранения публикации (@retention ), 0выполнение sp_mergecleanupmetadata не очищает метаданные отслеживания изменений репликации слиянием для базы данных. По этой причине, при использовании неограниченного срока хранения публикации необходимо помнить об осторожности.

При выполнении этой хранимой процедуры можно выбрать, следует ли повторно инициализировать подписчиков, задав параметр @reinitialize_subscriber значение true (по умолчанию) или false. Если sp_mergecleanupmetadata задан параметр @reinitialize_subscriber , trueмоментальный снимок повторно применяется на подписчике, даже если подписка была создана без первоначального моментального снимка (например, если данные моментального снимка и схемы были применены вручную или уже существуют на подписчике). Если публикация false не будет повторно инициализирована, необходимо убедиться, что данные на издателе и подписчике синхронизированы.

Независимо от значения @reinitialize_subscriber, происходит сбой, sp_mergecleanupmetadata если в момент вызова хранимой процедуры выполняются непрерывные процессы слияния, которые пытаются передать изменения издателю или повторной публикации подписчика.

Выполнение sp_mergecleanupmetadata с @reinitialize_subscriber помощью = N'true'

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

  2. Выполните слияние с помощью агента слияния. Рекомендуется использовать параметр командной строки агента -Validate на каждом подписчике при запуске агент слияния. Если вы выполняете слияние непрерывного режима, ознакомьтесь со специальными рекомендациями по слиянию в непрерывном режиме далее в этом разделе.

  3. После завершения всех слияний выполните команду sp_mergecleanupmetadata.

  4. Выполните все sp_reinitmergepullsubscription подписчики, используя именованную или анонимную подписку на вытягивание, чтобы обеспечить конвергенцию данных.

  5. Если вы выполняете слияние непрерывного режима, ознакомьтесь со специальными рекомендациями по слиянию в непрерывном режиме далее в этом разделе.

  6. Восстановите файлы моментального снимка для всех публикаций слиянием, используемым на всех уровнях. При попытке слияния без предварительного повторного формирования моментального снимка будет предложено повторно сформировать моментальный снимок.

  7. Выполните резервное копирование базы данных публикации. Невыполнение этого требования может вызвать сбой слияния после восстановления базы данных публикации.

Выполнение sp_mergecleanupmetadata с @reinitialize_subscriber = N'false'

  1. Остановите все обновления для баз данных публикации и подписки.

  2. Выполните слияние с помощью агента слияния. Мы рекомендуем использовать параметр командной -Validate строки агента на каждом подписчике при запуске агент слияния. Если вы выполняете слияние непрерывного режима, ознакомьтесь со специальными рекомендациями по слиянию в непрерывном режиме далее в этой статье.

  3. После завершения всех слияний выполните команду sp_mergecleanupmetadata.

  4. Если вы выполняете слияние непрерывного режима, ознакомьтесь со специальными рекомендациями по слиянию в непрерывном режиме далее в этом разделе.

  5. Восстановите файлы моментального снимка для всех публикаций слиянием, используемым на всех уровнях. При попытке слияния без предварительного повторного формирования моментального снимка будет предложено повторно сформировать моментальный снимок.

  6. Выполните резервное копирование базы данных публикации. Невыполнение этого требования может вызвать сбой слияния после восстановления базы данных публикации.

Особые рекомендации по слиянию непрерывных режимов

Если выполняется слияние непрерывного режима, необходимо выполнить следующие действия:

  • Остановите агент слияния, а затем выполните другое слияние без указанного -Continuous параметра.

  • Отключите публикацию, sp_changemergepublication чтобы убедиться, что все слияния в непрерывном режиме, которые опрашивают состояние публикации, завершаются сбоем.

    EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'inactive';
    

Завершив шаг 3 выполнения sp_mergecleanupmetadata, возобновляйте слияние непрерывного режима в зависимости от того, как они остановлены. Любое из следующих:

  • Добавьте параметр -Continuous для агент слияния.

  • Повторно активируйте публикацию с sp_changemergepublicationпомощью .

    EXEC central..sp_changemergepublication @publication = 'dynpart_pubn', @property = 'status', @value = 'active'
    

Разрешения

Могут выполняться только члены предопределенных ролей сервера sysadmin или db_owner предопределенных ролей базы данных.sp_mergecleanupmetadata

Чтобы использовать эту хранимую процедуру, издателю необходимо запустить SQL Server 2000 (8.x). Подписчики должны работать под управлением SQL Server 2000 (8.x) или SQL Server 7.0 с пакетом обновления 2 (SP2).