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


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

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

Это важно

Хотя не обязательно обновлять скрипты, выполняемые членами роли sysadmin, мы рекомендуем модифицировать существующие сценарии в соответствии с описаниями, приведёнными в этом разделе. Укажите учетную запись, которая имеет минимально необходимые разрешения для каждого агента репликации, как описано в разделе "Разрешения, необходимые агентам" темы "Модель безопасности агента репликации".

Эти улучшения безопасности, которые обеспечивают более контроль над разрешениями, позволяя явно указывать учетные записи 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, используемых при выполнении заданий агента репликации, см. в разделе "Модель безопасности агента репликации".

Это важно

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

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

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

    Замечание

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

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

    Замечание

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

  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. После выполнения хранимой процедуры, создающей подписку, убедитесь, что вы выполняете хранимую процедуру, создающую задание агента распространителя, чтобы синхронизировать подписку. Используемая хранимая процедура будет зависеть от типа подписки.

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

  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, создающего 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

Пример

Ниже приведен пример предыдущего скрипта, который создает push-подписку на публикацию транзакций, обновленную до успешного запуска для 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, создающего 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

Пример

Ниже приведен пример предыдущего скрипта, который создает push-подписку на публикацию слиянием, обновленную для успешного запуска для 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

См. также

Создание публикации
Создание Push-подписки
Создать выборочную подписку
Просмотр и изменение параметров безопасности репликации
MSSQL_ENG021797
MSSQL_ENG021798
Основные понятия хранимых процедур системы репликации
Обновление реплицируемых баз данных