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

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

Замечание

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

Перед началом работы

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

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

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

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

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

Чтобы разрешить обновление подписок

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

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

    Замечание

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

Использование 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. При необходимости создайте задание агента "Чтение очереди" для дистрибьютора.

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

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

    • На распространитее выполните sp_addqreader_agent (Transact-SQL). Укажите учетные данные Windows, под которыми агент работает для @job_name и @password. Эти учетные данные используются, когда агент чтения очереди подключается к серверу-издателю и серверу-подписчику. Дополнительные сведения см. в статье 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 и требуемый режим политики конфликтов: паб выигрывает, повторная инициализация подписки или победы подписки для @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)
Типы публикаций для репликации транзакций
Обновляемые подписки для репликации транзакций
Создание публикации
Создание обновляемой подписки на транзакционную публикацию
Обновляемые подписки для репликации транзакций
Использование sqlcmd с переменными скриптов