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


sp_mergecleanupmetadata (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

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

Аргументы

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

  • [ @reinitialize_subscriber = ] 'subscriber'
    Указывает, необходимо ли повторно инициализировать подписчик. Аргумент subscriber имеет тип nvarchar(5) и может иметь значение TRUE или FALSE; значение, по умолчанию, TRUE. Подписки помечаются для повторной инициализации указания значения TRUE. При указании значения FALSE подписки не помечаются для повторной инициализации.

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

0 (успешное завершение) или 1 (неуспешное завершение)

Замечания

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

ПредупреждениеВнимание!

После выполнения хранимой процедуры 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 = TRUE:

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

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

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

  4. Для обеспечения сходимости данных выполните процедуру sp_reinitmergepullsubscription на всех подписчиках при помощи именованных или анонимных подписок по запросу.

  5. При выполнении слияния в непрерывном режиме ознакомьтесь с приводимым далее разделом Специальные рассуждения о непрерывном режиме слияния.

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

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

Выполнение процедуры sp_mergecleanupmetadata с параметром @reinitialize_subscriber = 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'
    

Разрешения

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

Для использования данной хранимой процедуры на издателе должен использоваться SQL Server 2000. На подписчиках должен работать SQL Server 2000 или Microsoft SQL Server 7.0, с пакетом обновления 2 (SP2).