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