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

Применимо к:SQL Server

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

Примечание.

Эта функция будет удалена в будущей версии 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). Укажите в параметрах @job_name и @passwordучетные данные Windows, с которыми работает агент. Если агент будет использовать проверку подлинности SQL Server при подключении к издателю, необходимо также указать значение 0 для @publisher_security_mode и сведения о входе SQL Server для @publisher_login и @publisher_password.

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

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

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

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

  3. Выполните sp_addpublication (Transact-SQL), указав значение true для параметра @allow_queued_tran и значение побед паба, повторное повторение или вложенные победы для @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 и задайте режим политики конфликтов, передав значение pub wins, sub reinitили sub wins в параметре @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'AdventureWorks2022'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks2022]
-- 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 [AdventureWorks2022]
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
Create an Updatable Subscription to a Transactional Publication
Updatable Subscriptions for Transactional Replication
Использование программы sqlcmd с переменными скрипта