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


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

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

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

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

Примечание по безопасностиПримечание по безопасности

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

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

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

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

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

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

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

  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. Добавьте статьи к публикации. Дополнительные сведения см. в разделе Как определить статью (программирование репликации на языке Transact-SQL).

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

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

  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, с которыми работает агент. Указанные учетные данные используются при подключении агента чтения очереди к издателю или подписчику. Дополнительные сведения см. в разделе Модель безопасности агента репликации.

  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. Добавьте статьи к публикации. Дополнительные сведения см. в разделе Как определить статью (программирование репликации на языке Transact-SQL).

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

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

  • В базе данных публикации на издателе выполните процедуру изменения задержки и проверки соединений для репликации транзакций (sp_changepublication (Transact-SQL)). Укажите значение conflict_policy в параметре @property и задайте режим политики конфликтов, передав значение pub wins, sub reinit или sub wins в параметре @value.

Пример

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

-- 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'AdventureWorks'; 
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 [AdventureWorks]
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_table = @article, 
    @vertical_partition = N'false', 
    @type = N'logbased',
    @source_owner = @owner, 
    @destination_owner = @owner;
GO