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


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

ПримечаниеПримечание

В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.

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

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

  1. Проверьте на издателе, что все публикации поддерживают немедленное обновление подписок. Для этого выполните процедуру sp_helppublication.

  2. Проверьте на издателе, что публикация поддерживает подписки по запросу. Для этого выполните процедуру sp_helppublication.

    • Если значение столбца allow_pull в результирующем наборе равно 1, публикация поддерживает подписки по запросу.

    • Если значение столбца allow_ pull равно 0, то необходимо выполнить процедуру sp_changepublication, указав значение allow_pull в параметре @property и значение true в параметре @value.

  3. Выполните процедуру sp_addpullsubscription на подписчике. Задайте параметры @publisher и @publication, а также одно из следующих значений в параметре @update_mode.

    • synctran — включает подписку для немедленного обновления.

    • failover — включает подписку для немедленного обновления с обновлением посредством очередей при переходе на другой ресурс.

      ПримечаниеПримечание

      При значении failover требуется, чтобы для публикации были включены обновляемые посредством очередей подписки.

  4. Выполните процедуру sp_addpullsubscription_agent на подписчике. Укажите следующее.

    • Значения параметров @publisher, @publisher_db и @publication.

    • учетные данные пользователя Microsoft Windows, от имени которого на подписчике будет запущен агент распространителя, в качестве значений параметров @job_login и @job_password;

      ПримечаниеПримечание

      Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент распространителя всегда создает локальное соединение с подписчиком с использованием встроенной проверки подлинности Windows. По умолчанию агент соединяется с распространителем с использованием встроенной проверки подлинности Windows.

    • Значение 0 в параметре @distributor_security_mode, и данные входа MicrosoftSQL Server для параметров @distributor_login и @distributor_password, если для соединения с распространителем нужно использовать проверку подлинности SQL Server (необязательно).

    • Расписание агента распространителя для этой подписки. Дополнительные сведения см. в разделе Как определить расписания синхронизации (программирование репликации на языке Transact-SQL).

  5. В базе данных подписки на подписчике выполните процедуру sp_link_publication. Укажите параметр @publisher, параметр @publication, имя базы данных публикации в параметре @publisher_db и одно из следующих значений параметра @security_mode.

    • 0. Использовать проверку подлинности SQL Server при выполнении обновлений на издателе. При этом необходимо указать допустимое имя входа на издатель в параметрах @login и @password.

    • 1 — при соединении с издателем использовать контекст безопасности пользователя, выполняющего изменения на подписчике. Связанные с этим режимом безопасности ограничения см. в разделе sp_link_publication.

    • 2 — использовать существующее определенное пользователем имя входа на связанный сервер, созданное с помощью процедуры sp_addlinkedserver.

  6. Выполните на издателе хранимую процедуру sp_addsubscription, указав параметры @publication, @subscriber, @destination_db, значение pull в параметре @subscription_type и значение, указанное в шаге 3, в параметре @update_mode.

    Подписка по запросу на издателе будет зарегистрирована.

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

  1. Проверьте на издателе, что все публикации поддерживают немедленное обновление подписок. Для этого выполните процедуру sp_helppublication.

  2. Проверьте на издателе, что публикация поддерживает принудительные подписки. Для этого выполните процедуру sp_helppublication.

    • Если значение столбца allow_push в результирующем наборе равно 1, публикация поддерживает принудительные подписки.

    • Если значение столбца allow_push равно 0, то необходимо выполнить процедуру sp_changepublication, указав allow_push в параметре @property и значение true в параметре @value.

  3. Выполните процедуру sp_addsubscription на издателе. Укажите параметры @publisher, @subscriber, @destination_db, а также одно из следующих значений в параметре @update_mode.

    • synctran — включает поддержку немедленного обновления.

    • failover — включает поддержку немедленного обновления с обновлением посредством очередей при переходе на другой ресурс.

      ПримечаниеПримечание

      При значении failover требуется, чтобы для публикации были включены обновляемые посредством очередей подписки.

  4. Выполните процедуру sp_addpushsubscription_agent на издателе. Укажите значения следующих параметров.

    • @subscriber, @subscriber_db и @publication.

    • Учетные данные Windows, с которыми будет запускаться агент распространителя на распространителе в параметре @job_login, а пароль — в параметре @job_password.

      ПримечаниеПримечание

      Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент распространителя всегда создает локальные соединения с распространителем через встроенную систему проверки подлинности Windows. По умолчанию агент подключается к подписчику через встроенную систему проверки подлинности Windows;

    • Укажите значение 0 в параметре @subscriber_security_mode и сведения об имени входа SQL Server в параметрах @subscriber_login и @subscriber_password, если необходимо использовать проверку подлинности SQL Server при соединении с подписчиком (необязательно).

    • Расписание агента распространителя для этой подписки. Дополнительные сведения см. в разделе Как определить расписания синхронизации (программирование репликации на языке Transact-SQL).

  5. В базе данных подписки на подписчике выполните процедуру sp_link_publication. Укажите параметр @publisher, параметр @publication, имя базы данных публикации в параметре @publisher_db и одно из следующих значений параметра @security_mode.

    • 0. Использовать проверку подлинности SQL Server при выполнении обновлений на издателе. При этом необходимо указать допустимое имя входа на издатель в параметрах @login и @password.

    • 1 — при соединении с издателем использовать контекст безопасности пользователя, выполняющего изменения на подписчике. Связанные с этим режимом безопасности ограничения см. в разделе sp_link_publication.

    • 2 — использовать существующее определенное пользователем имя входа на связанный сервер, созданное с помощью процедуры sp_addlinkedserver.

Создание обновляемой посредством очередей подписки по запросу

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

  2. Проверьте на издателе, что публикация поддерживает подписки по запросу. Для этого выполните процедуру sp_helppublication.

    • Если значение столбца allow_pull в результирующем наборе равно 1, то публикация поддерживает подписки по запросу.

    • Если значение столбца allow_ pull равно 0, то необходимо выполнить процедуру sp_changepublication, указав значение allow_pull в параметре @property и значение true в параметре @value.

  3. Выполните процедуру sp_addpullsubscription на подписчике. Задайте параметры @publisher и @publication, а также одно из следующих значений параметра @update_mode.

    • queued tran — включает возможность обновления подписок посредством очередей.

    • queued failover — включает поддержку обновления посредством очередей с немедленным обновлением в качестве варианта для переключения.

      ПримечаниеПримечание

      Параметр queued failover требует, чтобы для публикации также были включены немедленно обновляемые подписки. Чтобы переключиться на немедленное обновление, необходимо использовать процедуру sp_link_publication для определения учетных данных, с которыми изменения на подписчике реплицируются на издатель.

  4. Выполните процедуру sp_addpullsubscription_agent на подписчике. Укажите значения следующих параметров.

    • @publisher, @publisher_db и @publication.

    • Учетные данные пользователя Windows, от имени которого на подписчике будет запущен агент распространителя, в качестве значений параметров @job_login и @job_password;

      ПримечаниеПримечание

      Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент распространителя всегда создает локальное соединение с подписчиком с использованием встроенной проверки подлинности Windows. По умолчанию агент соединяется с распространителем с использованием встроенной проверки подлинности Windows.

    • Значение 0 для параметра @distributor_security_mode и данные учетной записи SQL Server в параметрах @distributor_login и @distributor_password, если для соединения с распространителем нужно использовать проверку подлинности SQL Server (необязательно);

    • Расписание агента распространителя для этой подписки. Дополнительные сведения см. в разделе Как определить расписания синхронизации (программирование репликации на языке Transact-SQL).

  5. Чтобы зарегистрировать подписчика на издателе, на издателе выполните хранимую процедуру sp_addsubscriber (Transact-SQL).

    Выполните на издателе хранимую процедуру sp_addsubscription, указав параметры @publication, @subscriber, @destination_db, значение pull в параметре @subscription_type и значение, указанное в шаге 3, в параметре @update_mode.

    Подписка по запросу на издателе будет зарегистрирована.

Создание принудительной подписки, обновляемой посредством очередей

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

  2. Проверьте на издателе, что публикация поддерживает принудительные подписки. Для этого выполните процедуру sp_helppublication.

    • Если значение столбца allow_push в результирующем наборе равно 1, то публикация поддерживает принудительные подписки.

    • Если значение столбца allow_push равно 0, то необходимо выполнить процедуру sp_changepublication, указав allow_push в параметре @property и значение true в параметре @value.

  3. Выполните процедуру sp_addsubscription на издателе. Укажите параметры @publisher, @subscriber, @destination_db, а также одно из следующих значений параметра @update_mode.

    • queued tran — включает возможность обновления подписок посредством очередей.

    • queued failover — включает поддержку обновления посредством очередей с немедленным обновлением в качестве варианта для переключения.

      ПримечаниеПримечание

      Параметр queued failover требует, чтобы для публикации также были включены немедленно обновляемые подписки. Чтобы переключиться на немедленное обновление, необходимо использовать процедуру sp_link_publication для определения учетных данных, с которыми изменения на подписчике реплицируются на издатель.

  4. Выполните процедуру sp_addpushsubscription_agent на издателе. Укажите значения следующих параметров.

    • @subscriber, @subscriber_db и @publication.

    • Учетные данные Windows, с которыми будет запускаться агент распространителя на распространителе в параметре @job_login, а пароль — в параметре @job_password.

      ПримечаниеПримечание

      Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент распространителя всегда создает локальные соединения с распространителем через встроенную систему проверки подлинности Windows. По умолчанию агент подключается к подписчику с помощью встроенной проверки подлинности Windows.

    • Укажите значение 0 в параметре @subscriber_security_mode и сведения об имени входа SQL Server в параметрах @subscriber_login и @subscriber_password, если необходимо использовать проверку подлинности SQL Server при соединении с подписчиком (необязательно).

    • Расписание агента распространителя для этой подписки. Дополнительные сведения см. в разделе Как определить расписания синхронизации (программирование репликации на языке Transact-SQL).

Пример

В этом примере создается немедленно обновляемая подписка по запросу на публикацию, поддерживающую немедленно обновляемые подписки. Имя входа и пароль предоставляются во время выполнения переменными сценария 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 @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @update_mode = N'failover', 
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication,
    @job_login = @login,
    @job_password = @password; 

-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication 
    @publisher = @publisher, 
    @publication = @publication,
    @publisher_db = @publicationDB, 
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks
GO

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO