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


Задание метода распространения изменений данных в транзакционные статьи

В этом разделе описывается настройка метода распространения изменений данных в транзакционных статьях в SQL Server 2014 с помощью SQL Server Management Studio или Transact-SQL.

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

В этом разделе

Перед началом

Ограничения

  • Необходимо соблюдать осторожность при изменении любого файла моментального снимка, созданного репликацией. Необходимо тестировать и поддерживать пользовательскую логику в пользовательских хранимых процедурах. Корпорация Майкрософт не предоставляет поддержку пользовательской логики.

Использование среды SQL Server Management Studio

Укажите метод распространения на вкладке Свойства диалогового окна Свойства статьи — <статья> , которое доступно в мастере создания публикаций и в диалоговом окне Свойства публикации — <публикация> . Дополнительные сведения об использовании мастера и доступе к этому диалоговому окну см. в статьях Создание публикации и Просмотр и изменение свойств публикации.

Указание метода распространения

  1. На странице Статьи мастера создания публикаций или диалогового окна Свойства публикации — <публикация> выберите таблицу и щелкните Свойства статьи.

  2. Щелкните Указать свойства выделенной статьи таблицы.

  3. На вкладке Свойства диалогового окна Свойства статьи — <статья> в разделе Доставка инструкций укажите метод распространения для каждой операции с помощью меню Формат доставки INSERT, Формат доставки UPDATE и Формат доставки DELETE .

  4. Нажмите кнопку ОК.

  5. Если вы находитесь в диалоговом окне Свойства публикации — <публикация> , нажмите кнопку ОК , чтобы сохранить и закрыть диалоговое окно.

Создание и использование пользовательских хранимых процедур

  1. На странице Статьи мастера создания публикаций или диалогового окна Свойства публикации — <публикация> выберите таблицу и щелкните Свойства статьи.

  2. Щелкните Указать свойства выделенной статьи таблицы.

    На вкладке Свойства диалогового окна Свойства статьи — <статья> в разделе Доставка инструкций выберите синтаксис CALL в соответствующем меню формат доставки (формат доставки INSERT, формат доставки UPDATE или формат доставки DELETE), а затем введите имя процедуры, используемой в хранимой процедуре INSERT, хранимой процедуре DELETE или хранимой процедуре UPDATE. Дополнительные сведения о синтаксисе инструкции CALL см. в разделе "Синтаксис вызова для хранимых процедур" статьи Указание способа распространения изменений для статей транзакций.

  3. Нажмите кнопку ОК.

  4. Если вы находитесь в диалоговом окне Свойства публикации — <публикация> , нажмите кнопку ОК , чтобы сохранить и закрыть диалоговое окно.

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

    После создания моментального снимка перейдите в папку моментальных снимков, относящуюся к публикации, которой принадлежит данная статья, затем найдите файл с расширением .sch и с таким же именем, что и статья. Откройте этот файл при помощи программы «Блокнот» или другого текстового редактора, найдите команду CREATE PROCEDURE для вставки, обновления или удаления хранимых процедур и измените определение процедуры, чтобы указать пользовательскую логику для распространения изменений данных. Если моментальный снимок восстановлен, создайте заново пользовательскую процедуру.

Использование Transact-SQL

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

Примечание

Разным операциям DML (вставка, обновление или удаление), выполняемым над строками опубликованных данных, могут быть назначены различные методы распространения.

Дополнительные сведения см. в статье Указание способа распространения изменений для статей транзакций.

Создание статьи, использующей команды Transact-SQL для распространения изменений данных

  1. Выполните процедуру sp_addarticleна издателе в базе данных публикации. Укажите имя публикации, к которой принадлежит статья, в @publication, имя статьи для @article, публикуемый объект базы данных для @source_object и значение SQL по крайней мере для одного из следующих параметров:

    • @ins_cmd — управляет репликацией команд INSERT .

    • @upd_cmd — управляет репликацией команд UPDATE .

    • @del_cmd — управляет репликацией команд DELETE .

    Примечание

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

    Дополнительные сведения см. в статье определить статью.

Создание статьи, не распространяющей изменения данных

  1. Выполните процедуру sp_addarticleна издателе в базе данных публикации. Укажите имя публикации, к которой принадлежит статья, для @publication, имя статьи для @article, публикуемый объект базы данных для @source_object и значение NONE по крайней мере для одного из следующих параметров:

    • @ins_cmd — управляет репликацией команд INSERT .

    • @upd_cmd — управляет репликацией команд UPDATE .

    • @del_cmd — управляет репликацией команд DELETE .

    Примечание

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

    Дополнительные сведения см. в статье определить статью.

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

  1. Выполните процедуру sp_addarticleна издателе в базе данных публикации. Укажите имя публикации, к которой относится статья, в @publication, имя статьи для @article, публикуемый объект базы данных для @source_object, значение @schema_option битовой маски, содержащей значение 0x02 (включает автоматическое создание пользовательских хранимых процедур), и хотя бы один из следующих параметров:

    • @ins_cmd — укажите значение call sp_MSins_article_name, где article_name — это значение, указанное для @article.

    • @del_cmd — укажите значение CALL sp_MSdel_article_name или XCALL sp_MSdel_article_name где article_name — это значение, указанное для _*@article**.

    • @upd_cmd — укажите значение SCALL sp_MSupd_article_name, CALL sp_MSupd_article_name, XCALL sp_MSupd__article_name* или MCALL sp_MSupd_article_name, где article_name — это значение, указанное для @article.

    Примечание

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

    Примечание

    Подробные сведения о синтаксисе инструкций CALL, SCALL, XCALL и MCALL см. в статье Указание способа распространения изменений для статей транзакций.

    Дополнительные сведения см. в статье определить статью.

  2. После создания моментального снимка перейдите в папку моментальных снимков, относящуюся к публикации, которой принадлежит данная статья, затем найдите файл с расширением .sch и с таким же именем, что и статья. Откройте этот файл в блокноте, найдите инструкцию CREATE PROCEDURE для хранимой процедуры вставки, обновления или удаления и измените ее определение, задав пользовательскую логику распространения изменений данных. Дополнительные сведения см. в статье Указание способа распространения изменений для статей транзакций.

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

  1. Выполните процедуру sp_addarticleна издателе в базе данных публикации. Укажите имя публикации, к которой относится статья, в @publication, имя статьи для @article, публикуемый объект базы данных для @source_object, значение @schema_option битовой маски, содержащей значение 0x02 (включает автоматическое создание пользовательских хранимых процедур), и хотя бы один из следующих параметров:

    • @ins_cmd — укажите значение call sp_MSins_article_name, где article_name — это значение, указанное для @article.

    • @del_cmd — укажите значение CALL sp_MSdel_article_name или XCALL sp_MSdel_article_name где article_name — это значение, указанное для @article.

    • @upd_cmd . Укажите значения SCALL sp_MSupd_article_name, CALL sp_MSupd_article_name, XCALL sp_MSupd_article_name, MCALL sp_MSupd_article_name, где article_name — это значение, указанное для @article.

    Примечание

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

    Примечание

    Подробные сведения о синтаксисе инструкций CALL, SCALL, XCALL и MCALL см. в статье Указание способа распространения изменений для статей транзакций.

    Дополнительные сведения см. в статье определить статью.

  2. В базе данных публикации на издателе при помощи инструкции ALTER PROCEDURE измените хранимую процедуру sp_scriptpublicationcustomprocs таким образом, чтобы она возвращала скрипт CREATE PROCEDURE пользовательских хранимых процедур для вставки, обновления и удаления. Дополнительные сведения см. в статье Указание способа распространения изменений для статей транзакций.

Изменение метода распространения изменений для существующей статьи

  1. Выполните процедуру sp_changearticleна издателе в базе данных публикации. Укажите @publication, @article, значение ins_cmd, upd_cmd или del_cmd для @property и соответствующий метод распространения для @value.

  2. Повторите шаг 1 для каждого изменяемого метода распространения.

См. также:

Указание способа распространения изменений для статей транзакций
Создание публикации