sp_addmergepublication (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

Создает новую публикацию слиянием. Эта хранимая процедура выполняется на издателе в публикуемой базе данных.

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_addmergepublication
    [ @publication = ] N'publication'
    [ , [ @description = ] N'description' ]
    [ , [ @retention = ] retention ]
    [ , [ @sync_mode = ] N'sync_mode' ]
    [ , [ @allow_push = ] N'allow_push' ]
    [ , [ @allow_pull = ] N'allow_pull' ]
    [ , [ @allow_anonymous = ] N'allow_anonymous' ]
    [ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
    [ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
    [ , [ @dynamic_filters = ] N'dynamic_filters' ]
    [ , [ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder' ]
    [ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
    [ , [ @pre_snapshot_script = ] N'pre_snapshot_script' ]
    [ , [ @post_snapshot_script = ] N'post_snapshot_script' ]
    [ , [ @compress_snapshot = ] N'compress_snapshot' ]
    [ , [ @ftp_address = ] N'ftp_address' ]
    [ , [ @ftp_port = ] ftp_port ]
    [ , [ @ftp_subdirectory = ] N'ftp_subdirectory' ]
    [ , [ @ftp_login = ] N'ftp_login' ]
    [ , [ @ftp_password = ] N'ftp_password' ]
    [ , [ @conflict_retention = ] conflict_retention ]
    [ , [ @keep_partition_changes = ] N'keep_partition_changes' ]
    [ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
    [ , [ @allow_synctoalternate = ] N'allow_synctoalternate' ]
    [ , [ @validate_subscriber_info = ] N'validate_subscriber_info' ]
    [ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
    [ , [ @max_concurrent_merge = ] max_concurrent_merge ]
    [ , [ @max_concurrent_dynamic_snapshots = ] max_concurrent_dynamic_snapshots ]
    [ , [ @use_partition_groups = ] N'use_partition_groups' ]
    [ , [ @publication_compatibility_level = ] N'publication_compatibility_level' ]
    [ , [ @replicate_ddl = ] replicate_ddl ]
    [ , [ @allow_subscriber_initiated_snapshot = ] N'allow_subscriber_initiated_snapshot' ]
    [ , [ @allow_web_synchronization = ] N'allow_web_synchronization' ]
    [ , [ @web_synchronization_url = ] N'web_synchronization_url' ]
    [ , [ @allow_partition_realignment = ] N'allow_partition_realignment' ]
    [ , [ @retention_period_unit = ] N'retention_period_unit' ]
    [ , [ @generation_leveling_threshold = ] generation_leveling_threshold ]
    [ , [ @automatic_reinitialization_policy = ] automatic_reinitialization_policy ]
    [ , [ @conflict_logging = ] N'conflict_logging' ]
[ ; ]

Аргументы

[ @publication = ] N'publication'

Имя создаваемой публикации слияния. @publication является sysname, без значения по умолчанию и не должен быть ключевым словомALL. Имя публикации в пределах базы данных должно быть уникальным.

[ @description = ] N'description'

Описание публикации. @description имеет значение nvarchar(255) с значением по умолчаниюNULL.

[ @retention = ] хранение

Период хранения в единицах хранения, для которых необходимо сохранить изменения для заданного @publication. @retention имеет значение int с значением по умолчанию14. Единицы периода хранения определяются @retention_period_unit. Если подписка не синхронизирована в течение срока хранения, и ожидающие изменения, полученные им, удаляются операцией очистки на распространителе, срок действия подписки истекает и должен быть повторно инициализирован. Максимальный допустимый срок хранения равен числу дней между 31 декабря 9999 года и текущей датой.

Примечание.

Срок хранения для публикаций слиянием содержит 24-часовой льготный период для размещения подписчиков в разных часовых поясах. Например, если установить срок хранения продолжительностью в один день, то действительный срок хранения будет равен 48 часам.

[ @sync_mode = ] N'sync_mode'

Режим начальной синхронизации подписчиков с публикацией. @sync_mode — nvarchar(10) и может быть одним из следующих значений.

значение Описание
native (по умолчанию) Производит выходные данные программы массового копирования всех таблиц.
character Производит выходные данные программы массового копирования всех таблиц в символьном режиме. Требуется для поддержки подписчиков SQL Server Compact и не SQL Server.

[ @allow_push = ] N'allow_push'

Указывает, можно ли создать принудительные подписки для конкретной публикации. @allow_push — nvarchar(5), с значением по умолчанию, что позволяет отправлять подписки на публикациюtrue.

[ @allow_pull = ] N'allow_pull'

Указывает, можно ли создать подписки по запросу для конкретной публикации. @allow_pull — nvarchar(5), с значением по умолчанию, что позволяет извлекать подписки на публикациюtrue. Необходимо указать значение true для поддержки подписчиков SQL Server Compact.

[ @allow_anonymous = ] N'allow_anonymous'

Указывает, можно ли создать анонимные подписки для конкретной публикации. @allow_anonymous — nvarchar(5) с значением по умолчаниюtrue, что позволяет анонимным подпискам на публикацию. Для поддержки подписчиков SQL Server Compact необходимо указать true.

[ @enabled_for_internet = ] N'enabled_for_internet'

Указывает, разрешена ли публикация через Интернет и можно ли использовать протокол FTP для передачи подписчику файлов моментальных снимков. @enabled_for_internet — nvarchar(5) с значением по умолчаниюfalse. Если trueфайлы синхронизации для публикации помещаются в C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp каталог. Пользователь должен создать каталог Ftp. Если falseпубликация не включена для доступа к Интернету.

[ @centralized_conflicts = ] N'centralized_conflicts'

Этот параметр устарел и поддерживается для обратной совместимости скриптов. Используйте @conflict_logging , чтобы указать расположение, в котором хранятся записи конфликтов.

[ @dynamic_filters = ] N'dynamic_filters'

Разрешает использование параметризованных фильтров строк для публикации слиянием. @dynamic_filters — nvarchar(5) с значением по умолчаниюfalse.

Примечание.

Этот параметр не следует указывать, но вместо этого разрешить SQL Server автоматически определять, используются ли параметризованные фильтры строк. Если указать значение true для @dynamic_filters, необходимо определить параметризованный фильтр строк для статьи. Дополнительные сведения см. в статье Определение и изменение параметризованного фильтра строк для статьи публикации слиянием.

[ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder'

Указывает, хранятся ли файлы моментальных снимков в папке по умолчанию. @snapshot_in_defaultfolder — nvarchar(5) с значением по умолчаниюtrue. Если trueфайлы моментальных снимков можно найти в папке по умолчанию. Если falseфайлы моментальных снимков хранятся в альтернативном расположении, указанном @alternate_snapshot_folder. Альтернативные расположения могут находиться на другом сервере, на сетевом диске или на съемных носителях (например, съемных дисках). Файлы моментальных снимков могут также сохраняться с помощью протокола передачи файлов на FTP-сайте, чтобы подписчик мог извлечь эти файлы позже. Этот параметр может иметь значение true и по-прежнему иметь расположение, указанное @alt_snapshot_folder. Это сочетание указывает, что файлы моментальных снимков хранятся как в стандартных, так и в альтернативных расположениях.

[ @alt_snapshot_folder = ] N'alt_snapshot_folder'

Указывает местоположение альтернативной папки для моментального снимка. @alt_snapshot_folder — nvarchar(255) с значением по умолчаниюNULL.

[ @pre_snapshot_script = ] N'pre_snapshot_script'

Указывает указатель на .sql расположение файла. @pre_snapshot_script — nvarchar(255) с значением по умолчаниюNULL. Агент слияния запускает скрипт предварительного моментального снимка перед любым из реплицированных скриптов объектов при применении моментального снимка на подписчике. Скрипт выполняется в контексте безопасности, используемом агентом слияния при подключении к базе данных подписки. Скрипты предварительного моментального снимка не выполняются в подписчиках SQL Server Compact.

[ @post_snapshot_script = ] N'post_snapshot_script'

Указывает указатель на .sql расположение файла. @post_snapshot_script — nvarchar(255) с значением по умолчаниюNULL. Агент слияния выполняет скрипт после моментального снимка после того, как во время начальной синхронизации будут применены скрипты и данные всех других объектов репликации. Скрипт выполняется в контексте безопасности, используемом агентом слияния при подключении к базе данных подписки. Скрипты моментальных снимков после создания моментальных снимков не выполняются в подписчиках SQL Server Compact.

[ @compress_snapshot = ] N'compress_snapshot'

Указывает, что моментальный снимок, записанный в расположение @alt_snapshot_folder , будет сжиматься в формате CAB Майкрософт. @compress_snapshot — nvarchar(5) с значением по умолчаниюfalse.

  • false указывает, что моментальный снимок не сжимается.

  • true указывает, что моментальный снимок будет сжатым.

Файлы моментальных снимков размером более 2 ГБ не могут быть сжаты. Сжатые файлы моментальных снимков распаковываются в том месте, в котором выполняется агент слияния; подписки по запросу обычно используются со сжатыми моментальными снимками, так что соответствующие файлы распаковываются на подписчике. Моментальный снимок в папке по умолчанию не может быть сжатым. Для поддержки подписчиков SQL Server Compact необходимо указать false.

[ @ftp_address = ] N'ftp_address'

Сетевой адрес службы FTP для распространителя. @ftp_address — sysname с значением по умолчаниюNULL. Указывается расположение файлов моментальных снимков публикаций, откуда их выбирает агент слияния подписчика. Так как это свойство хранится для каждой публикации, каждая публикация может иметь разные @ftp_address. Публикация должна поддерживать распространение моментальных снимков с помощью протокола FTP.

[ @ftp_port = ] ftp_port

Номер порта службы FTP для распространителя. @ftp_port имеет значение int с значением по умолчанию21. Указывается расположение файлов моментальных снимков публикаций, откуда их выбирает агент слияния подписчика. Так как это свойство хранится для каждой публикации, каждая публикация может иметь собственные @ftp_port.

[ @ftp_subdirectory = ] N'ftp_subdirectory'

Указывает, где файлы моментальных снимков доступны для агент слияния подписчика, чтобы забрать, если публикация поддерживает распространение моментальных снимков с помощью FTP. @ftp_subdirectory — nvarchar(255) с значением по умолчаниюftp. Так как это свойство хранится для каждой публикации, каждая публикация может иметь собственные @ftp_subdirctory или не иметь подкаталога, указанного со значением NULL .

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

<alternate_snapshot_folder>\ftp\<publisher_publicationDB_publication>\<partitionID>.

Примечание.

Значения в предыдущем примере (в угловых скобках) зависят от специфики публикации и секции подписчика.

[ @ftp_login = ] N'ftp_login'

Имя пользователя для подключения к службе FTP. @ftp_login — sysname с значением по умолчаниюanonymous.

[ @ftp_password = ] N'ftp_password'

Пароль пользователя для подключения к службе FTP. @ftp_password — sysname с значением по умолчаниюNULL.

Внимание

Не используйте пустой пароль. Используйте надежный пароль.

[ @conflict_retention = ] conflict_retention

Указывает срок хранения конфликтных записей (в сутках). @conflict_retention является int, с значением по умолчанию 14 до очистки строки конфликта из таблицы конфликтов.

[ @keep_partition_changes = ] N'keep_partition_changes'

Указывает, следует ли включить оптимизацию изменений секций при неисполненной компиляции секций. @keep_partition_changes — nvarchar(5) с значением по умолчаниюtrue.

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

  • true означает, что изменения секции оптимизированы, и затрагиваются только подписчики, имеющие строки в измененных секциях.

При использовании предварительно вычисляемых секций задайте для @use_partition_groups true значение и задайте для @keep_partition_changes значение false. Дополнительные сведения см. в разделе "Параметризованные фильтры" — оптимизация для предварительно подготовленных секций.

Примечание.

Если указать значение true для @keep_partition_changes, укажите значение 1 параметра агент моментальных снимков-MaxNetworkOptimization. Дополнительные сведения об этом параметре см. в агент моментальных снимков репликации. Сведения об указании параметров агента см. в разделе "Администрирование агента репликации".

При использовании подписчиков SQL Server Compact необходимо задать @keep_partition_changes , чтобы true обеспечить правильное распространение удаленных данных. Если задано значение false, подписчик может иметь больше строк, чем ожидалось.

[ @allow_subscription_copy = ] N'allow_subscription_copy'

Разрешает или запрещает возможность копирования баз данных подписки, подписанных на эту публикацию. @allow_subscription_copy — nvarchar(5) с значением по умолчаниюfalse. Размер копируемых баз данных подписки должен быть меньше 2 ГБ.

[ @allow_synctoalternate = ] N'allow_synctoalternate'

Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.

[ @validate_subscriber_info = ] N'validate_subscriber_info'

Перечисляет функции, которые применяются для определения секции подписчика опубликованных данных, при использовании параметризованных фильтров строк. @validate_subscriber_info — nvarchar(500) с значением по умолчаниюNULL. Эти данные используются агентом слияния для проверки секций подписчиков. Например, если SUSER_SNAME используется в параметризованном фильтре строк, параметр должен быть @validate_subscriber_info=N'SUSER_SNAME().

Примечание.

Этот параметр не следует указывать, но вместо этого разрешить SQL Server автоматически определять критерий фильтрации.

[ @add_to_active_directory = ] N'add_to_active_directory'

Этот параметр устарел и поддерживается для обратной совместимости скриптов. Вы больше не можете добавлять сведения о публикации в Microsoft Active Directory.

[ @max_concurrent_merge = ] max_concurrent_merge

Максимальное число одновременно выполняющихся процессов слияния. @max_concurrent_merge имеет значение int с значением по умолчанию0. Значение 0 для означает, что количество параллельных процессов слияния, выполняемых в любое время, не ограничено.

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

[ @max_concurrent_dynamic_snapshots = ] max_concurrent_dynamic_snapshots

Максимальное количество сеансов агента моментальных снимков, которые могут одновременно выполняться для формирования моментальных снимков отфильтрованных данных для секций подписчиков. @max_concurrent_dynamic_snapshots имеет значение int с значением по умолчанию0. Если 0число сеансов моментальных снимков не ограничено. Если есть больше процессов моментальных снимков, запланированных одновременно, чем значение, разрешенное для выполнения, то избыточные задания помещаются в очередь и ожидают завершения текущего процесса моментального снимка.

[ @use_partition_groups = ] N'use_partition_groups'

Указывает, что для оптимизации процесса синхронизации должны использоваться предварительно вычисляемые секции. @use_partition_groups — nvarchar(5) и может быть одним из следующих значений:

значение Описание
true Публикация использует предварительно вычисляемые секции.
false Публикация не использует предварительно компилированные секции.
NULL (по умолчанию) Стратегию секционирования выбирает система.

По умолчанию используются предварительно вычисляемые секции. Чтобы избежать использования предварительно вычисляемых секций, @use_partition_groups необходимо задать для false. Когда NULLсистема решает, можно ли использовать предварительно вычисляемые секции. Если предварительно компилируемые секции нельзя использовать, это значение эффективно становится false без создания ошибок. В таких случаях @keep_partition_changes можно задать для true обеспечения некоторой оптимизации. Дополнительные сведения см. в разделе Параметризованные фильтры — параметризованные фильтры строк и параметризованные фильтры — оптимизация для предварительно вычисляемых секций.

[ @publication_compatibility_level = ] N'publication_compatibility_level'

Указывает обратную совместимость публикации. @publication_compatibility_level имеет значение nvarchar(6) и может быть одним из следующих значений:

Значение Версия
90RTM SQL Server 2005 (9.x)
100RTM SQL Server 2008 (10.0.x)

[ @replicate_ddl = ] replicate_ddl

Указывает, поддерживается ли для публикации репликация схемы. @replicate_ddl имеет значение int с значением по умолчаниюNULL. 1 указывает, что операторы языка определения данных (DDL), выполняемые на издателе, реплицируются и 0 указывают, что инструкции DDL не реплицируются. Дополнительные сведения см. в статье Внесение изменений в схемы баз данных публикации.

Параметр @replicate_ddl учитывается при добавлении столбца инструкцией DDL. Параметр @replicate_ddl игнорируется при изменении или удалении столбца в соответствии со следующими причинами.

  • При удалении столбца необходимо обновить, sysarticlecolumns чтобы предотвратить включение новых операторов DML, которые привели бы к сбою агента распространителя. Параметр @replicate_ddl игнорируется, так как репликация всегда должна реплицировать изменение схемы.

  • При изменении столбца исходный тип данных или возможность null может измениться, что приводит к тому, что инструкции DML содержат значение, которое может быть несовместимо с таблицей на подписчике. Такие инструкции DML могут привести к тому, что работа агента распространителя завершится ошибкой. Параметр @replicate_ddl игнорируется, так как репликация всегда должна реплицировать изменение схемы.

  • Если инструкция DDL добавляет новый столбец, sysarticlecolumns он не включает новый столбец. Инструкции DML не пытаются реплицировать данные для нового столбца. Этот параметр учитывается потому, что допустимо как выполнение, так и не выполнение репликации DDL.

[ @allow_subscriber_initiated_snapshot = ] N'allow_subscriber_initiated_snapshot'

Указывает, могут ли подписчики на данную публикацию инициировать процесс моментального снимка для создания отфильтрованного моментального снимка своих секций данных. @allow_subscriber_initiated_snapshot — nvarchar(5) с значением по умолчаниюfalse. true указывает, что подписчики могут инициировать процесс моментального снимка.

[ @allow_web_synchronization = ] N'allow_web_synchronization'

Указывает, включена ли для публикации веб-синхронизация. @allow_web_synchronization — nvarchar(5) с значением по умолчаниюfalse. true указывает, что подписки на эту публикацию можно синхронизировать по протоколу HTTPS. Дополнительные сведения см. в статье Web Synchronization for Merge Replication. Для поддержки подписчиков SQL Server Compact необходимо указать true.

[ @web_synchronization_url = ] N'web_synchronization_url'

Значение URL-адреса по умолчанию, применяемое для веб-синхронизации. @web_synchronization_url — nvarchar(500) с значением по умолчаниюNULL. Определяет URL-адрес Интернета по умолчанию, если он не задан явным образом при выполнении sp_addmergepullsubscription_agent .

[ @allow_partition_realignment = ] N'allow_partition_realignment'

Определяет, посылаются ли операции удаления подписчику, если в результате изменения строки на издателе изменяется его секция. @allow_partition_realignment — nvarchar(5) с значением по умолчаниюtrue.

  • true отправляет удаление подписчику, чтобы отразить результаты изменения секции, удалив данные, которые больше не являются частью секции подписчика.

  • false Оставляет данные из старой секции на подписчике, где изменения, внесенные в эти данные издателя, не реплицируются на этот подписчик, но изменения, внесенные на подписчик реплицируется на издателя.

Установка @allow_partition_realignment false используется для хранения данных в подписке из старой секции, когда данные должны быть доступны для исторических целей.

Примечание.

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

[ @retention_period_unit = ] N'retention_period_unit'

Задает единицы для периода хранения, заданного @retention. @retention_period_unit — nvarchar(10) и может быть одним из следующих значений.

Значение Версия
day (по умолчанию) Срок хранения указан в днях.
week Срок хранения указан в неделях.
month Срок хранения указан в месяцах.
year Срок хранения указан в годах.

[ @generation_leveling_threshold = ] generation_leveling_threshold

Задает число изменений, которые содержатся в поколении. Поколение — это набор изменений, переданных издателю или подписчику. @generation_leveling_threshold имеет значение int с значением по умолчанию1000.

[ @automatic_reinitialization_policy = ] automatic_reinitialization_policy

Указывает, отправляются ли изменения с подписчика до автоматической повторной инициализации, необходимой для изменения публикации, где было указано значение 1 для @force_reinit_subscription. @automatic_reinitialization_policy бит с значением по умолчанию0.

1 означает, что изменения передаются с подписчика до автоматической повторной инициализации.

Внимание

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

[ @conflict_logging = ] N'conflict_logging'

Определяет место хранения записей конфликта. @conflict_logging — nvarchar(15) и может быть одним из следующих значений:

значение Описание
publisher Конфликтующие записи хранятся на издателе.
subscriber Конфликтующие записи хранятся на подписчике, вызвавшем конфликт. Не поддерживается для подписчиков SQL Server Compact.
both Конфликтующие записи хранятся одновременно на издателе и на подписчике.
NULL (по умолчанию) Репликация автоматически задает значение @conflict_logging, если значение @publication_compatibility_level both и 90RTM publisher в других случаях.

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

0 (успешно) или 1 (сбой).

Замечания

sp_addmergepublication используется в репликации слиянием.

Чтобы перечислить объекты публикации в Active Directory с помощью параметра @add_to_active_directory , объект SQL Server должен быть уже создан в Active Directory.

Если существует несколько публикаций, которые публикуют один и тот же объект базы данных, только публикации с @replicate_ddl значением 1 репликацииALTER TABLE, ALTER VIEW, ALTER PROCEDUREи ALTER FUNCTIONALTER TRIGGER DDL. ALTER TABLE DROP COLUMN Однако инструкция DDL будет реплицироваться всеми публикациями, публикующими удаленный столбец.

Для подписчиков SQL Server Compact значение @alternate_snapshot_folder используется только в том случае, если значение false@snapshot_in_default_folder.

При включенной репликации DDL (@replicate_ddl = 1) для публикации для внесения изменений DDL без репликации в публикацию необходимо сначала выполнить sp_changemergepublication, чтобы задать значение @replicate_ddl0. После выдачи инструкций DDL без репликации можно снова запустить, sp_changemergepublication чтобы снова включить репликацию DDL.

Примеры

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

--Declarations for adding a merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022'; 
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @login = $(Login);
SET @password = $(Password);

-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption 
  @dbname=@publicationDB, 
  @optname=N'merge publish',
  @value = N'true' 

-- Create a new merge publication, explicitly setting the defaults. 
USE [AdventureWorks2022]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks2022.',
  @publication_compatibility_level  = N'120RTM';

-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = @login, 
  @job_password = @password;
GO

Разрешения

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