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


Повторное создание пользовательских процедур транзакций для отражения изменений схем

По умолчанию репликация транзакций выполняет изменение всех данных подписчика через хранимые процедуры, сформированные внутренними процедурами для каждой табличной статьи в публикации. Эти три процедуры (по одной для вставок, обновлений и удалений) копируются на подписчик и выполняются при репликации вставки, обновления или удаления на подписчик. Если изменение схемы вносится в таблицу на издателе SQL Server, репликация автоматически заново формирует эти процедуры, вызывая тот же набор внутренних процедур сценария, чтобы новые процедуры соответствовали новой схеме (репликация изменений схемы не поддерживается для издателей Oracle).

Также можно задать пользовательские процедуры для замены одной или нескольких процедур по умолчанию. Пользовательские процедуры должны изменяться, если на них влияет изменение схемы. Например если процедура ссылается на столбец, удаленный при изменении схемы, то ссылки на этот столбец должны быть удалены из пользовательской процедуры. Имеется два способа, которыми репликация может передавать новую пользовательскую процедуру подписчикам:

  • Первый — это использовать пользовательскую процедуру сценария для замены процедур репликации.

    1. При выполнении sp_addarticle (Transact-SQL) убедитесь, что параметр @schema_option 0x02 бит равен true.

    2. Выполните Процедура sp_register_custom_scripting (Transact-SQL) и укажите значение 'insert', 'update' или 'delete' для параметра @type, а также имя пользовательской процедуры сценария для параметра @value.

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

  • Второй способ состоит в использовании сценария, содержащего определение новой пользовательской процедуры:

    1. При выполнении sp_addarticle (Transact-SQL) присвойте параметру @schema_option 0x02 бит значение false, чтобы репликация автоматически не формировала пользовательские процедуры у подписчика.

    2. Перед каждым изменением схемы создайте новый файл сценария и зарегистрируйте сценарий в репликации, выполнив Процедура sp_register_custom_scripting (Transact-SQL). Укажите значение 'custom_script' для параметра @type и путь к этому сценарию у издателя для параметра @value.

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