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


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

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

Примечание по безопасностиПримечание по безопасности

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

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

  • sp_addpublication_snapshot:

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

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

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

  • sp_addmergepullsubscription_agent:

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

  • 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) в базе данных публикации на издателе. Укажите в параметрах @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) (необязательно).

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

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

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

    • Для принудительной подписки на издателе необходимо выполнить процедуру sp_addpushsubscription_agent (Transact-SQL). Укажите значения параметров @subscriber, @subscriber_db, @publication, учетные данные Windows, от которых агент распространителя будет запускаться на распространителе, в параметрах @job_name и @job_password, а также расписание для этого задания. Дополнительные сведения см. в разделе Указание расписаний синхронизации. Это необходимо сделать после вызова процедуры 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) (необязательно).

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

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

Пример

Ниже приведен пример скрипта 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

См. также

Основные понятия

Создание публикации

Создание принудительной подписки

Создание подписки по запросу

Просмотр и изменение параметров безопасности репликации

MSSQL_ENG021797

MSSQL_ENG021798

Основные понятия системных хранимых процедур репликации

Обновление реплицируемых баз данных