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

В этом разделе описывается, как включить обновление подписок для публикаций транзакций в SQL Server 2014 с помощью SQL Server Management Studio или Transact-SQL.

Примечание

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

Перед началом

Безопасность

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

Использование среды SQL Server Management Studio

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

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

Включение обновляемых подписок

  1. На странице Тип публикации мастера создания публикаций выберите Публикация транзакций с обновляемыми подписками.

  2. На странице Безопасность агентов укажите настройки безопасности агента чтения очереди в дополнение к агенту моментальных снимков и агенту чтения журнала. Дополнительные сведения о разрешениях, необходимых для учетной записи, под которой запускается агент чтения очереди, см. в разделе Replication Agent Security Model.

    Примечание

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

Использование Transact-SQL

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

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

  1. В случае необходимости создайте задание агента чтения журнала для базы данных публикации.

    • Если задание агента чтения журнала для базы данных публикации уже существует, переходите к шагу 2.

    • Если вы не уверены, существует ли задание агента чтения журнала для опубликованной базы данных, выполните sp_helplogreader_agent (Transact-SQL) на издателе в базе данных публикации. Если результирующий набор пуст, то необходимо создать задание агента чтения журнала.

    • На издателе выполните sp_addlogreader_agent (Transact-SQL). Укажите учетные данные Microsoft Windows, с которыми выполняется агент для @job_name и @password. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и учетные данные Microsoft SQL Server для @publisher_login и @publisher_password.

  2. Выполните sp_addpublication (Transact-SQL), указав значение true для параметра @allow_sync_tran.

  3. На издателе выполните процедуру sp_addpublication_snapshot (Transact-SQL). Укажите имя публикации, используемое на шаге 2 для @publication и учетные данные Windows, с которыми агент моментальных снимков выполняется для @job_name и @password. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и SQL Server данные для входа для @publisher_login и @publisher_password. Будет создано задание агента моментальных снимков для публикации.

  4. Добавьте статьи к публикации. Дополнительные сведения см. в статье определить статью.

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

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

  1. В случае необходимости создайте задание агента чтения журнала для базы данных публикации.

    • Если задание агента чтения журнала для базы данных публикации уже существует, переходите к шагу 2.

    • Если вы не уверены, существует ли задание агента чтения журнала для опубликованной базы данных, выполните sp_helplogreader_agent (Transact-SQL) на издателе в базе данных публикации. Если результирующий набор пуст, необходимо создать задание агента чтения журнала.

    • На издателе выполните sp_addlogreader_agent (Transact-SQL). Укажите учетные данные Windows, с которыми запускается агент для @job_name и @password. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и SQL Server данные для входа для @publisher_login и @publisher_password.

  2. Если необходимо, создайте на распространителе задание агента чтения очереди.

    • Если он уже существует для указанной базы данных распространителя, то перейдите к шагу 3.

    • Если вы не уверены, существует ли задание агента чтения очереди для базы данных распространителя, выполните sp_helpqreader_agent (Transact-SQL) на распространитетеле базы данных распространителя. Если результирующий набор пуст, то задание агента чтения очереди необходимо создать.

    • На распространитее выполните sp_addqreader_agent (Transact-SQL). Укажите учетные данные Windows, с которыми запускается агент для @job_name и @password. Указанные учетные данные используются при подключении агента чтения очереди к издателю или подписчику. Дополнительные сведения см. в статье Модель безопасности агента репликации.

  3. Выполните sp_addpublication (Transact-SQL), указав значение true для параметра @allow_queued_tran и значение pub wins, sub reinit или sub wins для @conflict_policy.

  4. На издателе выполните процедуру sp_addpublication_snapshot (Transact-SQL). Укажите имя публикации, используемое на шаге 3 для @publication и учетные данные Windows, с которыми выполняется агент моментальных снимков для @snapshot_job_name и @password. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и SQL Server данные для входа для @publisher_login и @publisher_password. Будет создано задание агента моментальных снимков для публикации.

  5. Добавьте статьи к публикации. Дополнительные сведения см. в статье определить статью.

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

Изменение политики разрешения конфликтов для публикации с поддержкой обновления подписок посредством очередей

  1. На издателе в базе данных публикации выполните sp_changepublication (Transact-SQL). Укажите значение conflict_policy для @property и требуемый режим политики конфликтов: победы в публикации, вложенные или вложенные выигрыши для @value.

Пример (Transact-SQL)

В следующем примере создается публикация, поддерживающая оба режима обновления подписок по запросу: немедленное и посредством очередей.

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. 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".

--Declarations for adding a transactional publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2012'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks]
-- Enable transactional replication on the publication 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;

-- Create a transactional publication that supports immediate updating, 
-- queued updating, and pull subscriptions. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_sync_tran = N'true', 
    @allow_queued_tran = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true',
  -- Explicitly declare the related default properties 
    @conflict_policy = N'pub wins';

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

--Declarations for adding an article.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product'; 
SET @owner = N'Production'; 

-- Add a horizontally and vertically filtered article for the Product table.
USE [AdventureWorks2012]
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_table = @article, 
    @vertical_partition = N'false', 
    @type = N'logbased',
    @source_owner = @owner, 
    @destination_owner = @owner;
GO

См. также:

настроить параметры разрешения конфликтов обновления посредством очередей (среда SQL Server Management Studio)
Типы публикации для репликации транзакций
Updatable Subscriptions for Transactional Replication
Create a Publication
Создание обновляемой подписки для публикации транзакций
Updatable Subscriptions for Transactional Replication
Использование программы sqlcmd с переменными скрипта