Как включить обновляемые подписки для публикаций транзакций (программирование репликации на языке Transact-SQL)
Примечание |
---|
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. |
При создании публикации транзакций программным путем при помощи хранимых процедур репликации подписки на нее могут быть настроены как на немедленное обновление, так и на обновление посредством очередей.
Примечание по безопасности |
---|
При возможности предлагайте пользователям вводить учетные данные системы безопасности во время выполнения. При необходимости хранения учетных данных в файле сценария этот файл следует защитить от несанкционированного доступа. |
Создание публикации с поддержкой немедленно обновляемых подписок
В случае необходимости создайте задание агента чтения журнала для базы данных публикации.
Если агент чтения журнала для базы данных публикации уже существует, переходите к шагу 2.
Если неизвестно, существует ли задание агента чтения журнала для публикуемой базы данных, выполните процедуру sp_helplogreader_agent (Transact-SQL) на издателе в базе данных публикации. Если результирующий набор пуст, то необходимо создать задание агента чтения журнала.
Выполните процедуру sp_addlogreader_agent (Transact-SQL) на издателе. Укажите в параметрах @job_name и @password учетные данные Microsoft Windows, с которыми работает агент. Если агент будет использовать проверку подлинности SQL Server для подключения к издателю, также необходимо указать значение 0 в параметре @publisher_security_mode и данные входа Microsoft SQL Server в параметрах @publisher_login и @publisher_password.
Выполните хранимую процедуру sp_addpublication (Transact-SQL), указав в параметре @allow_sync_tran значение true.
На подписчике выполните хранимую процедуру sp_addpublication_snapshot (Transact-SQL). Укажите имя публикации, использовавшееся на шаге 2, в параметре @publication, а учетные данные Windows, с которыми работает агент моментальных снимков, — в параметрах @job_name и @password. Если агент будет использовать проверку подлинности SQL Server для подключения к издателю, также необходимо указать значение 0 в параметре @publisher_security_mode и данные входа SQL Server в параметрах @publisher_login и @publisher_password. Будет создано задание агента моментальных снимков для публикации.
Добавьте статьи к публикации. Дополнительные сведения см. в разделе Как определить статью (программирование репликации на языке Transact-SQL).
Создайте на подписчике обновляемую подписку на эту публикацию. Дополнительные сведения см. в разделе Как создать обновляемую подписку на публикацию транзакций (программирование репликации на языке Transact-SQL).
Создание публикации с поддержкой обновления подписок посредством очередей
В случае необходимости создайте задание агента чтения журнала для базы данных публикации.
Если задание агента чтения журнала для базы данных публикации уже существует, переходите к шагу 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.
Если необходимо, создайте на распространителе задание агента чтения очереди.
Если он уже существует для указанной базы данных распространителя, то перейдите к шагу 3.
Чтобы выяснить, существует ли в базе данных распространителя задание агента чтения очереди, запустите в ней хранимую процедуру sp_helpqreader_agent (Transact-SQL). Если результирующий набор пуст, то задание агента чтения очереди необходимо создать.
Выполните процедуру sp_addqreader_agent (Transact-SQL) на распространителе. Укажите в параметрах @job_name и @password учетные данные Windows, с которыми работает агент. Указанные учетные данные используются при подключении агента чтения очереди к издателю или подписчику. Дополнительные сведения см. в разделе Модель безопасности агента репликации.
Выполните хранимую процедуру sp_addpublication (Transact-SQL), указав значение true в параметре @allow_queued_tran, а значение pub wins, sub reinit или sub wins — в параметре @conflict_policy.
На подписчике выполните хранимую процедуру sp_addpublication_snapshot (Transact-SQL). Укажите имя публикации, использовавшееся на шаге 3, в параметре @publication, а учетные данные Windows, с которыми работает агент моментальных снимков, — в параметрах @snapshot_job_name и @password. Если агент будет использовать проверку подлинности SQL Server для подключения к издателю, также необходимо указать значение 0 в параметре @publisher_security_mode и данные входа SQL Server в параметрах @publisher_login и @publisher_password. Будет создано задание агента моментальных снимков для публикации.
Добавьте статьи к публикации. Дополнительные сведения см. в разделе Как определить статью (программирование репликации на языке Transact-SQL).
Создайте на подписчике обновляемую подписку на эту публикацию. Дополнительные сведения см. в разделе Как создать обновляемую подписку на публикацию транзакций (программирование репликации на языке 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'AdventureWorks2008R2';
SET @publication = N'AdvWorksProductTran';
SET @login = $(Login);
SET @password = $(Password);
USE [AdventureWorks2008R2]
-- 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 [AdventureWorks2008R2]
EXEC sp_addarticle
@publication = @publication,
@article = @article,
@source_table = @article,
@vertical_partition = N'false',
@type = N'logbased',
@source_owner = @owner,
@destination_owner = @owner;
GO
См. также