обновить скрипты репликации (программирование репликации на языке Transact-SQL)

Файлы скриптов Transact-SQL можно использовать для программной настройки топологии репликации. Дополнительные сведения см. в статье Основные понятия системных хранимых процедур репликации.

Важно!

Хотя обновление скриптов, выполняемых членами роли sysadmin, не является обязательным, рекомендуется внести в существующие скрипты изменения, описанные в настоящем разделе. Для всех агентов репликации следует указывать учетные записи, наделенные минимальным числом разрешений, как это описано в подразделе «Разрешения, необходимые для агентов» раздела Replication Agent Security Model.

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

  • sp_addpublication_snapshot:

    Теперь необходимо указать учетные данные Windows в виде @job_login и @job_password при выполнении sp_addpublication_snapshot (Transact-SQL), чтобы создать задание, под которым агент моментальных снимков выполняется на распространитетеле.

  • sp_addpushsubscription_agent:

    Теперь необходимо выполнить sp_addpushsubscription_agent (Transact-SQL), чтобы явным образом добавить задание и предоставить учетные данные Windows (@job_login и @job_password), под которыми выполняется задание агент распространения на распространитетеле. В версиях SQL Server до SQL Server 2005 это выполнялось автоматически при создании принудительной подписки.

  • sp_addmergepushsubscription_agent:

    Теперь необходимо выполнить sp_addmergepushsubscription_agent (Transact-SQL), чтобы явно добавить задание и указать учетные данные Windows (@job_login и @job_password), под которыми выполняется задание агент слияния на распространитетеле. В версиях SQL Server до SQL Server 2005 это выполнялось автоматически при создании принудительной подписки.

  • sp_addpullsubscription_agent:

    Теперь необходимо указать учетные данные Windows в виде @job_login и @job_password при выполнении sp_addpullsubscription_agent (Transact-SQL), чтобы создать задание, с помощью которого агент распространения будет выполняться на подписчике.

  • sp_addmergepullsubscription_agent:

    Теперь необходимо указать учетные данные Windows в виде @job_login и @job_password при выполнении sp_addmergepullsubscription_agent (Transact-SQL), чтобы создать задание, с помощью которого агент слияния выполняется на подписчике.

  • sp_addlogreader_agent:

    Теперь необходимо выполнить sp_addlogreader_agent (Transact-SQL), чтобы вручную добавить задание и предоставить учетные данные Windows, с которыми агент чтения журнала запускается на распространитетеле. В версиях SQL Server до SQL Server 2005 г. это выполнялось автоматически при создании публикации транзакций.

  • sp_addqreader_agent:

    Теперь необходимо выполнить sp_addqreader_agent (Transact-SQL), чтобы вручную добавить задание и предоставить учетные данные Windows, с которыми агент чтения очереди запускается на распространитетеле. В версиях SQL Server до SQL Server 2005 это выполнялось автоматически при создании публикации транзакций, поддерживающей обновление в очередях.

В модели безопасности, представленной в SQL Server 2005, агенты репликации всегда устанавливаются подключения к локальному экземпляру SQL Server с проверкой подлинности Windows, используя учетные данные, указанные в @job_name и @job_password. Сведения о требованиях к учетным записям Windows, которые предназначены для выполнения заданий агента репликации, см. в разделе Replication Agent Security Model.

Важно!

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

Обновление скриптов настройки репликации моментальными снимками и публикацией транзакций

  1. В существующем скрипте перед sp_addpublication (Transact-SQL) выполните sp_addlogreader_agent (Transact-SQL) на издателе в базе данных публикации. Укажите в параметрах @job_name и @job_passwordучетные данные Windows, с которыми будет запускаться агент чтения журнала. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и SQL Server данные входа для @publisher_login и @publisher_password. Таким образом будет сформировано задание агента чтения журнала для базы данных публикации.

    Примечание

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

  2. (Необязательно) Перед sp_addpublication (Transact-SQL) выполните sp_addqreader_agent (Transact-SQL) на распространитетеле в базе данных распространителя. Укажите в параметрах @job_name и @job_passwordучетные данные Windows, от которых будет запускаться агент чтения очереди. В результате этого будет сформировано задание агента чтения очереди для распространителя.

    Примечание

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

  3. (Необязательно) Обновите выполнение sp_addpublication (Transact-SQL), чтобы задать значения, отличные от значений по умолчанию для параметров, реализующих новые функции репликации.

  4. После sp_addpublication (Transact-SQL) выполните sp_addpublication_snapshot (Transact-SQL) на издателе в базе данных публикации. Укажите параметр @publication и учетные данные Windows, с которыми будет выполняться агент моментальных снимков, в параметрах @job_name и @job_password. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и SQL Server данные входа для @publisher_login и @publisher_password. Будет создано задание агента моментальных снимков для публикации.

  5. (Необязательно) Обновите выполнение sp_addarticle (Transact-SQL), чтобы задать значения, отличные от значений по умолчанию для параметров, реализующих новые функции репликации.

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

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

    • Для подписки по запросу обновите выполнение sp_addpullsubscription_agent (Transact-SQL), указав учетные данные Windows, с которыми агент распространения выполняется на подписчике для @job_name и @job_password. Это необходимо сделать после вызова хранимой процедуры sp_addpullsubscription. Дополнительные сведения см. в статье Создание подписки по запросу.

    • Для принудительной подписки выполните sp_addpushsubscription_agent (Transact-SQL) на издателе. Укажите значения параметров @subscriber, @subscriber_db, @publication, учетные данные Windows, от которых агент распространителя будет запускаться на распространителе, в параметрах @job_name и @job_password, а также расписание для этого задания. Дополнительные сведения см. в статье Specify Synchronization Schedules. Это необходимо сделать после вызова процедуры sp_addsubscription. Дополнительные сведения см. в статье Создание принудительной подписки.

Обновление скриптов настройки публикации слиянием

  1. (Необязательно) В существующем скрипте обновите выполнение sp_addmergepublication (Transact-SQL), чтобы задать значения, отличные от значений по умолчанию для параметров, реализующих новые функции репликации.

  2. После sp_addmergepublication (Transact-SQL) выполните sp_addpublication_snapshot (Transact-SQL) на издателе в базе данных публикации. Укажите параметр @publication и учетные данные Windows, с которыми будет выполняться агент моментальных снимков, в параметрах @job_name и @job_password. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и SQL Server данные входа для @publisher_login и @publisher_password. Будет создано задание агента моментальных снимков для публикации.

  3. (Необязательно) Обновите выполнение sp_addmergearticle (Transact-SQL), чтобы задать значения, отличные от значений по умолчанию для параметров, реализующих новые функции репликации.

Обновление скриптов, добавляющих подписки к публикации слиянием

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

Пример

Ниже приведен пример скрипта SQL Server 2000, который создает публикацию транзакций для таблицы Product. Эта публикация поддерживает немедленное обновление с переключением на обновление отработки отказа. Значения по умолчанию были удалены для удобства чтения.

USE [Northwind]
GO

DECLARE @publication AS sysname
DECLARE @publicationDB AS sysname
DECLARE @article AS sysname
SET @publication = N'NwdProductTran'
SET @publicationDB = N'Northwind'
SET @article = N'Products'

-- Enable the replication database.
EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'publish', 
    @value = N'true'

-- Add the transactional publication.
EXEC sp_addpublication 
    @publication = @publication, 
    @sync_method = N'native', 
    @status = N'active', 
    @repl_freq = N'continuous', 
    @description = N'Transactional publication of Northwind.', 
    @allow_push = N'true', 
    @allow_pull = N'true', 
    @allow_sync_tran = N'true', 
    @autogen_sync_procs = N'true', 
    @allow_queued_tran = N'true'

-- Add a snapshot job.
EXEC sp_addpublication_snapshot 
    @publication = @publication

-- Add the transactional articles.
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_owner = N'dbo', 
    @source_object = @article, 
    @destination_table = @article, 
    @type = N'logbased', 
    @schema_option = 0x00000000000080F3, 
    @ins_cmd = N'CALL sp_MSins_Products', 
    @del_cmd = N'XCALL sp_MSdel_Products', 
    @upd_cmd = N'XCALL sp_MSupd_Products', 
    @auto_identity_range = N'false'
GO

Пример

Ниже приведен пример обновления предыдущего скрипта, который создает публикацию транзакций для успешного выполнения в SQL Server 2005 и более поздних версиях. Эта публикация поддерживает немедленное обновление с переключением на обновление отработки отказа. Значения по умолчанию для новых параметров были объявлены явно.

Примечание

Учетные данные Windows предоставляются во время выполнения с помощью переменных сценария sqlcmd .

-- 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".

-- Execute at the Distributor.
USE [distribution]

DECLARE @login AS sysname;
DECLARE @password AS sysname;
-- Specify the Windows account to run the Queue Reader Agent.
SET @login = $(Login); 
-- Pass the password at runtime.
SET @password = $(Password); 

-- Execute sp_addqreader_agent to create the Queue Reader Agent job. 
EXEC sp_addqreader_agent 
    @job_login = @login, 
    @job_password = @password;
GO

-- Execute at the Publisher.
USE [Northwind]
GO

DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @article AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdProductTran';
SET @publicationDB = N'Northwind';
SET @article = N'Products';
-- Specify the Windows account to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- Pass the password at runtime.
SET @password = $(Password); 

-- Enable the replication database.
EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'publish', 
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password, 
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Add the transactional publication.
EXEC sp_addpublication 
    @publication = @publication, 
    @sync_method = N'native', 
    @repl_freq = N'continuous', 
    @status = N'active',
    @description = N'Transactional publication of Northwind.', 
    @allow_push = N'true', 
    @allow_pull = N'true', 
    @allow_sync_tran = N'true', 
    @autogen_sync_procs = N'true', 
    @allow_queued_tran = N'true',
    @replicate_ddl = 1,
    @enabled_for_p2p = N'false';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Add a transactional article.
EXEC sp_addarticle 
  @publication = @publication, 
  @article = @article, 
  @source_owner = N'dbo', 
  @source_object = @article, 
  @destination_table = @article, 
  @type = N'logbased', 
  @schema_option = 0x00000000000080F3, 
  @ins_cmd = N'CALL sp_MSins_Products', 
  @del_cmd = N'XCALL sp_MSdel_Products', 
  @upd_cmd = N'XCALL sp_MSupd_Products', 
  @auto_identity_range = N'false',
  @identityrangemanagementoption = N'manual',
  @fire_triggers_on_snapshot = N'false';
GO

Пример

Ниже приведен пример скрипта SQL Server 2000, который создает публикацию слиянием для таблицы Customers. Значения по умолчанию были удалены для удобства чтения.

-- Enable the replication database.
USE [Northwind]
GO

DECLARE @publicationDB AS sysname
DECLARE @publication AS sysname
DECLARE @article AS sysname
SET @publicationDB = N'Northwind' 
SET @publication = N'NwdCustomersMerge' 
SET @article = N'Customers' 

EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'merge publish', 
    @value = N'true'

-- Add the merge publication.
EXEC sp_addmergepublication 
    @publication = @publication, 
    @description = N'Merge publication of Northwind.', 
    @retention = 14, 
    @sync_mode = N'native', 
    @centralized_conflicts = N'true', 
    @dynamic_filters = N'false', 
    @keep_partition_changes = N'false'
 
EXEC sp_addpublication_snapshot 
    @publication = @publication

-- Add the merge articles.
EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_owner = N'dbo', 
    @source_object = @article, 
    @type = N'table', 
    @description = null, 
    @column_tracking = N'true', 
    @schema_option = 0x000000000000CFF1
 GO

Пример

Ниже приведен пример предыдущего скрипта, который создает публикацию слиянием, обновленную для успешного выполнения в SQL Server 2005 и более поздних версиях. Значения по умолчанию для новых параметров были объявлены явно.

Примечание

Учетные данные Windows предоставляются во время выполнения с помощью переменных сценария sqlcmd .

-- 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".

-- Enabling the replication database
-- Enable the replication database.
USE [Northwind]
GO

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'Northwind';
SET @publication = N'NwdCustomersMerge';
SET @article = N'Customers';
-- Specify the Windows account to run the Snapshot Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'merge publish', 
    @value = N'true';

-- Add the merge publication.
EXEC sp_addmergepublication 
    @publication = @publication, 
    @description = N'Merge publication of Northwind.', 
    @retention = 14, 
    @sync_mode = N'native', 
    @dynamic_filters = N'false', 
    @keep_partition_changes = N'false',
    -- Only set to '90RTM' if all Subscribers are SQL Server 2005.
    @publication_compatibility_level = N'90RTM',
    @replicate_ddl = 1,
    @allow_subscriber_initiated_snapshot = N'true',
    @allow_web_synchronization = N'false',
    @allow_partition_realignment = N'true',
    @retention_period_unit = N'day',
    @automatic_reinitialization_policy = 0,
    @conflict_logging = N'both';
 
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login,
    @job_password = @password;

-- Add the merge article.
EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_owner = N'dbo', 
    @source_object = @article, 
    @type = N'table', 
    @description = null, 
    @column_tracking = N'true', 
    @schema_option = 0x0000000000034FD1,
    @partition_options = 0,
    @subscriber_upload_options = 0,
    @identityrangemanagementoption = N'manual',
    @delete_tracking = N'true',
    @compensate_for_errors = N'false',
    @stream_blob_columns = N'true';
GO

Пример

Ниже приведен пример скрипта SQL Server 2000, который создает принудительная подписка на публикацию транзакций. Значения по умолчанию были удалены для удобства чтения.

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'NwdProductTran' 
SET @subscriber = N'MYSUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
    @subscriber = @subscriber

-- Add a push subscription to a transactional publication.
USE [Northwind]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'push'
GO

Пример

Ниже приведен пример предыдущего скрипта, который создает принудительная подписка на публикацию транзакций, обновленная для успешного выполнения для SQL Server 2005 и более поздних версий. Значения по умолчанию для новых параметров были объявлены явно.

Примечание

Учетные данные Windows предоставляются во время выполнения с помощью переменных сценария sqlcmd .

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdProductTran'; 
SET @subscriber = $(Subscriber); 
SET @subscriptionDB = N'NorthwindReplica'; 
-- Specify the Windows account to run the Distribution Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

-- Add a push subscription to a transactional publication.
USE [Northwind]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'push';

-- Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @job_login = @login, 
    @job_password = @password;
GO

Пример

Ниже приведен пример скрипта SQL Server 2000, который создает принудительная подписка на публикацию слиянием. Значения по умолчанию были удалены для удобства чтения.

DECLARE @publication AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @subscriber = N'SUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
  @subscriber = @subscriber

-- Add a push subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @subscriber_type = N'local',
  @sync_type = N'automatic'
GO

Пример

Ниже приведен пример предыдущего скрипта, который создает принудительная подписка на публикацию слиянием, обновленная для успешного выполнения для SQL Server 2005 и более поздних версий. Значения по умолчанию для новых параметров были объявлены явно.

Примечание

Учетные данные Windows предоставляются во время выполнения с помощью переменных сценария sqlcmd .

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdCustomersMerge'; 
SET @subscriber = $(Subscriber); 
SET @subscriptionDB = N'NorthwindReplica'; 
-- Specify the Windows account to run the Merge Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

-- Add a push subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @subscription_type = N'push';

-- Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @job_login = @login, 
    @job_password = @password;
GO

Пример

Ниже приведен пример скрипта SQL Server 2000, который создает подписку по запросу на публикацию транзакций. Значения по умолчанию были удалены для удобства чтения.

DECLARE @publication AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @subscriber = N'SUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
  @subscriber = @subscriber

-- Add a push subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @subscriber_type = N'local',
  @sync_type = N'automatic'
GO

Пример

Ниже приведен пример предыдущего скрипта, который создает подписку по запросу на публикацию транзакций, обновленную для успешного выполнения для SQL Server 2005 и более поздних версий. Значения по умолчанию для новых параметров были объявлены явно.

Примечание

Учетные данные Windows предоставляются во время выполнения с помощью переменных сценария sqlcmd .

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Execute at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdProductTran'; 
SET @publisher = $(Publisher); 
SET @publicationDB = N'Northwind'; 
-- Specify the Windows account to run the Distribution Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [NorthwindReplica]
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB,
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication, 
    @distributor = @publisher,
    @job_login = @login,
    @job_password = @password;
GO

-- Execute at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'NwdProductTran'; 
SET @subscriber = $(Subscriber); 
SET @subscriptionDB = N'NorthwindReplica'; 

-- Add a pull subscription to a transactional publication.
USE [Northwind]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull';
GO

Пример

Ниже приведен пример скрипта SQL Server 2000, который создает подписку по запросу для публикации слиянием. Значения по умолчанию были удалены для удобства чтения.

-- Execute at the Subscriber
DECLARE @publication AS sysname
DECLARE @publisher AS sysname
DECLARE @publicationDB AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @publisher = N'PUBSERVER' 
SET @publicationDB = N'Northwind' 
SET @subscriber = N'SUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica'

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [NorthwindReplica]
EXEC sp_addmergepullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB

-- Add an agent job to synchronize the pull subscription. 
EXEC sp_addmergepullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @distributor = @publisher
GO

-- Execute at the Publisher.
DECLARE @publication AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @subscriber = N'MYSUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
  @subscriber = @subscriber

-- Add a pull subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'pull',
  @subscriber_type = N'local',
  @sync_type = N'automatic'
GO

Пример

Ниже приведен пример предыдущего скрипта, который создает подписку по запросу на публикацию слиянием, обновленную для успешного выполнения для SQL Server 2005 и более поздних версий. Значения по умолчанию для новых параметров были объявлены явно.

Примечание

Учетные данные Windows предоставляются во время выполнения с помощью переменных сценария sqlcmd .

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Execute at the Subscriber
DECLARE @publication  AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdCustomersMerge'; 
SET @publisher = $(Publisher); 
SET @publicationDB = N'Northwind'; 
-- Specify the Windows account to run the Merge Agent.
SET @login = $(Login); 
-- Pass the password at runtime.
SET @password = $(Password); 

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [NorthwindReplica]
EXEC sp_addmergepullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription. 
EXEC sp_addmergepullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication,
  @distributor = @publisher,
  @job_login = @login,
  @job_password = @password;
GO

-- Execute at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'NwdCustomersMerge';
SET @subscriber = $(Subscriber);
SET @subscriptionDB = N'NorthwindReplica';

-- Add a pull subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'pull',
  @subscriber_type = N'local',
  @sync_type = N'automatic';
GO

См. также:

Create a Publication
Создание принудительной подписки
Создание подписки по запросу
Просмотр и изменение параметров безопасности репликации
MSSQL_ENG021797
MSSQL_ENG021798
Replication System Stored Procedures Concepts
Обновление реплицируемых баз данных