Определение метода распространения изменений данных в статьях транзакций
Область применения: SQL Server Управляемый экземпляр SQL Azure
В этом разделе описывается, как задать метод распространения для изменений данных в транзакционных статьях в SQL Server с помощью SQL Server Management Studio или Transact-SQL.
По умолчанию репликация транзакций передает изменения подписчикам при помощи набора хранимых процедур для каждой статьи. Эти процедуры можно заменить на пользовательские процедуры. Дополнительные сведения см. в статье Указание способа распространения изменений для статей транзакций.
Подготовка к работе
ограничения
- Необходимо соблюдать осторожность при изменении любого файла моментального снимка, созданного репликацией. Необходимо тестировать и поддерживать пользовательскую логику в пользовательских хранимых процедурах. Корпорация Майкрософт не предоставляет поддержку пользовательской логики.
Использование среды SQL Server Management Studio
Укажите метод распространения на вкладке "Свойства статьи" диалогового окна "Свойства статьи>"<, которое доступно в мастере создания публикаций и в диалоговом окне "Свойства публикации " <Публикация>". Дополнительные сведения об использовании мастера и доступе к этому диалоговому окну см. в статьях Создание публикации и Просмотр и изменение свойств публикации.
Указание метода распространения
На странице "Статьи" мастера создания публикации или диалогового окна "Свойства публикации" <>выберите таблицу и выберите свойства статьи.
Щелкните Указать свойства выделенной статьи таблицы.
На вкладке "Свойства статьи" диалогового окна "Свойства статьи>" <в разделе "Доставка инструкций" укажите метод распространения для каждой операции с помощью формата доставки INSERT, формата доставки UPDATE и меню "Формат доставки DELETE".
Нажмите ОК.
Если вы находитесь в диалоговом окне "Свойства публикации — публикация>"<, нажмите кнопку "ОК", чтобы сохранить и закрыть диалоговое окно.
Создание и использование пользовательских хранимых процедур
На странице "Статьи" мастера создания публикации или диалогового окна "Свойства публикации" <>выберите таблицу и выберите свойства статьи.
Щелкните Указать свойства выделенной статьи таблицы.
На вкладке "Свойства статьи" диалогового окна "Свойства статьи"> <в разделе "Доставка инструкций" выберите синтаксис CALL из соответствующего меню формата доставки (формат доставки INSERT, формат доставки UPDATE или формат доставки DELETE), а затем введите имя процедуры для использования в хранимой процедуре INSERT, DELETE хранимой процедуры или хранимой процедуры UPDATE. Дополнительные сведения о синтаксисе инструкции CALL см. в разделе "Синтаксис вызова для хранимых процедур" статьи Указание способа распространения изменений для статей транзакций.
Нажмите ОК.
Если вы находитесь в диалоговом окне "Свойства публикации — публикация>"<, нажмите кнопку "ОК", чтобы сохранить и закрыть диалоговое окно.
Моментальный снимок, созданный для публикации, включает процедуру, заданную вами на предыдущем шаге. Процедуры будут использовать заданный вами синтаксис инструкции CALL, но при этом будут включать логику по умолчанию, используемую репликацией.
После создания моментального снимка перейдите в папку моментальных снимков, относящуюся к публикации, которой принадлежит данная статья, затем найдите файл с расширением .sch и с таким же именем, что и статья. Откройте этот файл при помощи программы «Блокнот» или другого текстового редактора, найдите команду CREATE PROCEDURE для вставки, обновления или удаления хранимых процедур и измените определение процедуры, чтобы указать пользовательскую логику для распространения изменений данных. Если моментальный снимок восстановлен, создайте заново пользовательскую процедуру.
Использование Transact-SQL
Репликация транзакций позволяет управлять процессом распространения изменений от издателя к подписчику. Метод распространения может быть задан программным путем при создании и последующем изменении статей с помощью хранимых процедур репликации.
Примечание.
Разным операциям DML (вставка, обновление или удаление), выполняемым над строками опубликованных данных, могут быть назначены различные методы распространения.
Дополнительные сведения см. в статье Указание способа распространения изменений для статей транзакций.
Создание статьи, использующей команды Transact-SQL для распространения изменений данных
Выполните процедуру sp_addarticleна издателе в базе данных публикации. В параметре @publicationзадайте имя публикации, которой принадлежит статья, в параметре @article— имя статьи, в параметре @source_object— базу данных, на которой опубликован объект, а для одного из следующих параметров задайте значение SQL .
@ins_cmd — управляет репликацией команд INSERT .
@upd_cmd — управляет репликацией команд UPDATE .
@del_cmd — управляет репликацией команд DELETE .
Примечание.
При указании значения SQL для любого из указанных выше параметров команды этого типа будут реплицироваться на подписчик в соответствии с соответствующей командой Transact-SQL.
Дополнительные сведения см. в статье определить статью.
Создание статьи, не распространяющей изменения данных
Выполните процедуру sp_addarticleна издателе в базе данных публикации. В параметре @publicationукажите имя публикации, которой принадлежит статья, в параметре @article— имя статьи, в параметре @source_object— базу данных, на которой опубликован объект, а для одного из следующих параметров задайте значение NONE .
@ins_cmd — управляет репликацией команд INSERT .
@upd_cmd — управляет репликацией команд UPDATE .
@del_cmd — управляет репликацией команд DELETE .
Примечание.
При указании значения NONE для одного из перечисленных выше параметров репликация команд указанного на подписчик производиться не будет.
Дополнительные сведения см. в статье определить статью.
Создание статьи с изменяемыми пользовательскими хранимыми процедурами
Выполните процедуру sp_addarticleна издателе в базе данных публикации. В параметре @publicationзадайте имя публикации, которой принадлежит статья, в параметре @article— имя статьи, в параметре @source_object— базу данных, на которой опубликован объект, а в параметре @schema_option задайте битовую маску, содержащую значение 0x02 (для включения автоматического режима создания пользовательской хранимой процедуры), и хотя бы один из следующих параметров.
@ins_cmd — укажите значение sp_MSins_ CALL 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 см. в статье Указание способа распространения изменений для статей транзакций.
Дополнительные сведения см. в статье определить статью.
После создания моментального снимка перейдите в папку моментальных снимков, относящуюся к публикации, которой принадлежит данная статья, затем найдите файл с расширением .sch и с таким же именем, что и статья. Откройте этот файл в блокноте, найдите инструкцию CREATE PROCEDURE для хранимой процедуры вставки, обновления или удаления и измените ее определение, задав пользовательскую логику распространения изменений данных. Дополнительные сведения см. в статье Указание способа распространения изменений для статей транзакций.
Создание статьи, использующей пользовательские скрипты в пользовательских хранимых процедурах для распространения изменений данных
Выполните процедуру sp_addarticleна издателе в базе данных публикации. В параметре @publicationзадайте имя публикации, которой принадлежит статья, в параметре @article— имя статьи, в параметре @source_object— базу данных, на которой опубликован объект, а в параметре @schema_option задайте битовую маску, содержащую значение 0x02 (для включения автоматического режима создания пользовательской хранимой процедуры), и хотя бы один из следующих параметров.
@ins_cmd — укажите значение sp_MSins_ CALL 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 см. в статье Указание способа распространения изменений для статей транзакций.
Дополнительные сведения см. в статье определить статью.
В базе данных публикации на издателе при помощи инструкции ALTER PROCEDURE измените хранимую процедуру sp_scriptpublicationcustomprocs таким образом, чтобы она возвращала скрипт CREATE PROCEDURE пользовательских хранимых процедур для вставки, обновления и удаления. Дополнительные сведения см. в статье Указание способа распространения изменений для статей транзакций.
Изменение метода распространения изменений для существующей статьи
Выполните процедуру sp_changearticleна издателе в базе данных публикации. Задайте значения параметров @publicationи @article, укажите в параметре @propertyзначение ins_cmd, upd_cmd или del_cmd, а в параметре @value— необходимый метод распространения.
Повторите шаг 1 для каждого изменяемого метода распространения.