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

Настройка топологии репликации программным способом возможна при помощи файлов сценариев на языке Transact-SQL. Дополнительные сведения см. в разделе Основные понятия о системных хранимых процедурах репликации. Если пользователь, будучи членом предопределенной роли сервера sysadmin в SQL Server 2005, запускает сценарии репликации, созданные в SQL Server 2000, то они будут выполняться правильно. Если пользователь является членом предопределенной роли базы данных db_owner или другой роли, то их выполнение завершится ошибкой MSSQL_ENG021797 или MSSQL_ENG021798, и эти сценарии придется обновить.

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

Хотя обновление сценариев, выполняемых членами роли 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) (необязательно).

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

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

  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

См. также

Задания

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