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


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

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

Файлы скриптов 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 (9.x) это было сделано автоматически при создании принудительной подписки.

  • sp_addmergepushsubscription_agent:

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

  • 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 (9.x) это было сделано автоматически при создании публикации транзакций.

  • sp_addqreader_agent:

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

В модели безопасности, представленной в SQL Server 2005 (9.x), агенты репликации всегда делают подключения к локальному экземпляру 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 для создания публикации транзакций

Ниже приведен пример скрипта SQL Server 2000 (8.x), который создает публикацию транзакций для таблицы 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

B. Скрипт SQL Server 2005 и более поздних версий для создания публикации транзакций

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

Примечание.

Учетные данные 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

C. Скрипт SQL Server 2000 для создания публикации слиянием

Ниже приведен пример скрипта SQL Server 2000 (8.x), создающего публикацию слиянием для таблицы 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

D. Скрипт SQL Server 2005 и более поздних версий для создания публикации слиянием

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

Примечание.

Учетные данные 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 для создания принудительной подписки для публикации транзакций

Ниже приведен пример скрипта SQL Server 2000 (8.x), создающего push-подписку на публикацию транзакций. Значения по умолчанию были удалены для удобства чтения.

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

F. Скрипт SQL Server 2005 и более поздних версий для создания принудительной подписки для публикации транзакций

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

Примечание.

Учетные данные 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

G. Скрипт SQL Server 2000 для создания принудительной подписки для публикации слиянием

Ниже приведен пример скрипта SQL Server 2000 (8.x), создающего push-подписку на публикацию слиянием. Значения по умолчанию были удалены для удобства чтения.

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

H. Скрипт SQL Server 2005 и более поздних версий для создания принудительной подписки для публикации слиянием

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

Примечание.

Учетные данные 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

I. Скрипт SQL Server 2000 для создания подписки по запросу для публикации транзакций

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

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

J. Скрипт SQL Server 2005 и более поздних версий для создания подписки по запросу для публикации транзакций

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

Примечание.

Учетные данные 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

K. Скрипт SQL Server 2000 для создания подписки по запросу для публикации слиянием

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

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

L. Скрипт SQL Server 2005 и более поздних версий для создания подписки по запросу для публикации слиянием

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

Примечание.

Учетные данные 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