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


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

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

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

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

    • Если значение параметра allow_pull равно 1, подписки по запросу поддерживаются.
    • Если значение параметра allow_pull равно 0, выполните хранимую процедуру sp_changepublication (Transact-SQL), указав allow_pull в качестве значения параметра @property и true — в качестве значения параметра @value.
  2. На подписчике выполните хранимую процедуру sp_addpullsubscription (Transact-SQL). Укажите значения параметров @publisher и @publication. Сведения об обновлении подписок см. в разделе How to: Create an Updatable Subscription to a Transactional Publication (Replication Transact-SQL Programming).

  3. На подписчике выполните хранимую процедуру sp_addpullsubscription_agent (Transact-SQL). Укажите следующее:

    • значения параметров @publisher, @publisher_db и @publication;
    • учетные данные пользователя Microsoft Windows, от имени которого на подписчике будет запущен агент распространителя, в качестве значений параметров @job_login и @job_password;
      ms147346.note(ru-ru,SQL.90).gifПримечание.
      Для соединений со встроенной проверкой подлинности Windows всегда используются учетные данные Windows, передаваемые через параметры @job_login и @job_password. Агент распространителя всегда создает локальное соединение с подписчиком с использованием встроенной проверки подлинности Windows. По умолчанию агент установит соединение с распространителем с помощью встроенной проверки подлинности Windows.
    • (необязательно) значение 0 для параметра @distributor_security_mode и данные учетной записи Microsoft SQL Server для параметров @distributor_login и @distributor_password, если для соединения с распространителем нужно использовать проверку подлинности SQL Server;
    • расписание агента распространителя для этой подписки. Дополнительные сведения см. в разделе How to: Specify Synchronization Schedules (Replication Transact-SQL Programming).
  4. На издателе выполните хранимую процедуру sp_addsubscription (Transact-SQL), чтобы зарегистрировать подписку по запросу. Укажите значения параметров @publication, @subscriber и @destination_db. В качестве значения параметра @subscription_type укажите pull.

Создание подписки по запросу на публикацию слиянием

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

    • Если значение параметра allow_pull равно 1, подписки по запросу поддерживаются.
    • Если значение параметра allow_pull равно 0, выполните хранимую процедуру sp_changemergepublication (Transact-SQL), указав allow_pull в качестве значения параметра @property и true — в качестве значения параметра @value.
  2. На подписчике выполните хранимую процедуру sp_addmergepullsubscription (Transact-SQL). Укажите значения параметров @publisher, @publisher_db, @publication, а также следующих:

    • @subscriber_type — укажите значение local для клиентской подписки или global — для серверной;
    • @subscription_priority — укажите приоритет подписки (от 0.00 до 99.99). Это значение необходимо указывать только для серверной подписки.
      Дополнительные сведения см. в разделе Обнаружение и разрешение конфликтов репликации слиянием.
  3. На подписчике выполните хранимую процедуру sp_addmergepullsubscription_agent (Transact-SQL). Укажите значения следующих параметров:

    • @publisher, @publisher_db и @publication.
    • учетные данные пользователя Windows, от имени которого на подписчике будет запущен агент слияния, в качестве значений параметров @job_login и @job_password;
      ms147346.note(ru-ru,SQL.90).gifПримечание.
      Для соединений со встроенной проверкой подлинности Windows всегда используются учетные данные Windows, передаваемые через параметры @job_login и @job_password. Агент слияния всегда создает локальное соединение с подписчиком с использованием встроенной проверки подлинности Windows. По умолчанию агент установит соединение с распространителем и издателем с помощью встроенной проверки подлинности Windows.
    • (необязательно) значение 0 для параметра @distributor_security_mode и данные учетной записи SQL Server в параметрах @distributor_login и @distributor_password, если для соединения с распространителем нужно использовать проверку подлинности SQL Server;
    • (необязательно) значение 0 для параметра @publisher_security_mode и данные учетной записи SQL Server в параметрах @publisher_login и @publisher_password, если для соединения с издателем нужно использовать проверку подлинности SQL Server;
    • расписание агента слияния для этой подписки. Дополнительные сведения см. в разделе How to: Specify Synchronization Schedules (Replication Transact-SQL Programming).
  4. На подписчике выполните хранимую процедуру sp_addmergesubscription (Transact-SQL). Укажите значения параметров @publication, @subscriber, @subscriber_db и значение pull для параметра @subscription_type. После этого подписка по запросу будет зарегистрирована.

Пример

В следующем примере создается подписка по запросу на публикацию транзакций. Первый пакет выполняется на подписчике, а второй — на издателе. Имя входа и пароль предоставляются во время выполнения переменными сценария 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 this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';

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

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

-- 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 this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';

-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'pull',
  @status = N'subscribed';
GO

В следующем примере создается подписка по запросу на публикацию слиянием. Первый пакет выполняется на подписчике, а второй — на издателе. Имя входа и пароль предоставляются во время выполнения переменными сценария 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 this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';
SET @hostname = N'adventure-works\david8';

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [AdventureWorksReplica]
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),
  @hostname = @hostname;
GO

-- Execute this batch at the Publisher.
DECLARE @myMergePub  AS sysname;
DECLARE @mySub       AS sysname;
DECLARE @mySubDB     AS sysname;

SET @myMergePub = N'AdvWorksSalesOrdersMerge';
SET @mySub = N'MYSUBSERVER';
SET @mySubDB = N'AdventureWorksReplica';

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addmergesubscription @publication = @myMergePub, 
@subscriber = @mySub, @subscriber_db = @mySubDB, 
@subscription_type = N'pull';
GO

См. также

Задачи

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

Другие ресурсы

How to: Create a Publication (Replication Transact-SQL Programming)
How to: Delete a Pull Subscription (Replication Transact-SQL Programming)
Подписка на публикации
Использование программы sqlcmd с переменными сценария

Справка и поддержка

Получение помощи по SQL Server 2005