Как создать обновляемую подписку на публикацию транзакций (программирование репликации на языке Transact-SQL)
Примечание |
---|
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. |
Репликация транзакций позволяет распространять изменения, выполненные на подписчике, обратно на издатель с помощью немедленно обновляемых подписок или обновляемых посредством очередей подписок. Можно создать обновляемую подписку программно с помощью хранимых процедур репликации.
Создание немедленно обновляемой подписки по запросу
Проверьте на издателе, что все публикации поддерживают немедленное обновление подписок. Для этого выполните процедуру sp_helppublication.
Если значение параметра allow_sync_tran в результирующем наборе равно 1, публикация поддерживает немедленное обновление подписок.
Если значение параметра allow_sync_tran в результирующем наборе равно 0, публикацию необходимо создать заново с включенной возможностью немедленного обновления подписок. Дополнительные сведения см. в разделе Как включить обновляемые подписки для публикаций транзакций (программирование репликации на языке Transact-SQL).
Проверьте на издателе, что публикация поддерживает подписки по запросу. Для этого выполните процедуру sp_helppublication.
Если значение столбца allow_pull в результирующем наборе равно 1, публикация поддерживает подписки по запросу.
Если значение столбца allow_ pull равно 0, то необходимо выполнить процедуру sp_changepublication, указав значение allow_pull в параметре @property и значение true в параметре @value.
Выполните процедуру sp_addpullsubscription на подписчике. Задайте параметры @publisher и @publication, а также одно из следующих значений в параметре @update_mode.
synctran — включает подписку для немедленного обновления.
failover — включает подписку для немедленного обновления с обновлением посредством очередей при переходе на другой ресурс.
Примечание При значении failover требуется, чтобы для публикации были включены обновляемые посредством очередей подписки.
Выполните процедуру sp_addpullsubscription_agent на подписчике. Укажите следующее.
Значения параметров @publisher, @publisher_db и @publication.
учетные данные пользователя Microsoft Windows, от имени которого на подписчике будет запущен агент распространителя, в качестве значений параметров @job_login и @job_password;
Примечание Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент распространителя всегда создает локальное соединение с подписчиком с использованием встроенной проверки подлинности Windows. По умолчанию агент соединяется с распространителем с использованием встроенной проверки подлинности Windows.
Значение 0 в параметре @distributor_security_mode, и данные входа Microsoft SQL Server для параметров @distributor_login и @distributor_password, если для соединения с распространителем нужно использовать проверку подлинности SQL Server (необязательно).
Расписание агента распространителя для этой подписки. Дополнительные сведения см. в разделе Как определить расписания синхронизации (программирование репликации на языке Transact-SQL).
В базе данных подписки на подписчике выполните процедуру sp_link_publication. Укажите параметр @publisher, параметр @publication, имя базы данных публикации в параметре @publisher_db и одно из следующих значений параметра @security_mode.
0. Использовать проверку подлинности SQL Server при выполнении обновлений на издателе. При этом необходимо указать допустимое имя входа на издатель в параметрах @login и @password.
1 — при соединении с издателем использовать контекст безопасности пользователя, выполняющего изменения на подписчике. Связанные с этим режимом безопасности ограничения см. в разделе sp_link_publication.
2 — использовать существующее определенное пользователем имя входа на связанный сервер, созданное с помощью процедуры sp_addlinkedserver.
Выполните на издателе хранимую процедуру sp_addsubscription, указав параметры @publication, @subscriber, @destination_db, значение pull в параметре @subscription_type и значение, указанное в шаге 3, в параметре @update_mode.
Подписка по запросу на издателе будет зарегистрирована.
Создание немедленно обновляемой принудительной подписки
Проверьте на издателе, что все публикации поддерживают немедленное обновление подписок. Для этого выполните процедуру sp_helppublication.
Если значение параметра allow_sync_tran в результирующем наборе равно 1, то публикация поддерживает немедленное обновление подписок.
Если значение параметра allow_sync_tran в результирующем наборе равно 0, публикацию необходимо создать заново с включенной возможностью немедленного обновления подписок. Дополнительные сведения см. в разделе Как включить обновляемые подписки для публикаций транзакций (программирование репликации на языке Transact-SQL).
Проверьте на издателе, что публикация поддерживает принудительные подписки. Для этого выполните процедуру sp_helppublication.
Если значение столбца allow_push в результирующем наборе равно 1, публикация поддерживает принудительные подписки.
Если значение столбца allow_push равно 0, то необходимо выполнить процедуру sp_changepublication, указав allow_push в параметре @property и значение true в параметре @value.
Выполните процедуру sp_addsubscription на издателе. Укажите параметры @publisher, @subscriber, @destination_db, а также одно из следующих значений в параметре @update_mode.
synctran — включает поддержку немедленного обновления.
failover — включает поддержку немедленного обновления с обновлением посредством очередей при переходе на другой ресурс.
Примечание При значении failover требуется, чтобы для публикации были включены обновляемые посредством очередей подписки.
Выполните процедуру sp_addpushsubscription_agent на издателе. Укажите значения следующих параметров.
@subscriber, @subscriber_db и @publication.
Учетные данные Windows, с которыми будет запускаться агент распространителя на распространителе в параметре @job_login, а пароль — в параметре @job_password.
Примечание Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент распространителя всегда создает локальные соединения с распространителем через встроенную систему проверки подлинности Windows. По умолчанию агент подключается к подписчику через встроенную систему проверки подлинности Windows;
Укажите значение 0 в параметре @subscriber_security_mode и сведения об имени входа SQL Server в параметрах @subscriber_login и @subscriber_password, если необходимо использовать проверку подлинности SQL Server при соединении с подписчиком (необязательно).
Расписание агента распространителя для этой подписки. Дополнительные сведения см. в разделе Как определить расписания синхронизации (программирование репликации на языке Transact-SQL).
В базе данных подписки на подписчике выполните процедуру sp_link_publication. Укажите параметр @publisher, параметр @publication, имя базы данных публикации в параметре @publisher_db и одно из следующих значений параметра @security_mode.
0. Использовать проверку подлинности SQL Server при выполнении обновлений на издателе. При этом необходимо указать допустимое имя входа на издатель в параметрах @login и @password.
1 — при соединении с издателем использовать контекст безопасности пользователя, выполняющего изменения на подписчике. Связанные с этим режимом безопасности ограничения см. в разделе sp_link_publication.
2 — использовать существующее определенное пользователем имя входа на связанный сервер, созданное с помощью процедуры sp_addlinkedserver.
Создание обновляемой посредством очередей подписки по запросу
Проверьте на издателе, что все публикации поддерживают обновляемые посредством очередей подписки. Для этого выполните процедуру sp_helppublication.
Если значение столбца allow_queued_tran в результирующем наборе равно 1, публикация поддерживает немедленное обновление подписок.
Если значение столбца allow_queued_tran в результирующем наборе равно 0, публикацию необходимо создать заново с включенной возможностью обновления подписок посредством очередей. Дополнительные сведения см. в разделе Как включить обновляемые подписки для публикаций транзакций (программирование репликации на языке Transact-SQL).
Проверьте на издателе, что публикация поддерживает подписки по запросу. Для этого выполните процедуру sp_helppublication.
Если значение столбца allow_pull в результирующем наборе равно 1, то публикация поддерживает подписки по запросу.
Если значение столбца allow_ pull равно 0, то необходимо выполнить процедуру sp_changepublication, указав значение allow_pull в параметре @property и значение true в параметре @value.
Выполните процедуру sp_addpullsubscription на подписчике. Задайте параметры @publisher и @publication, а также одно из следующих значений параметра @update_mode.
queued tran — включает возможность обновления подписок посредством очередей.
queued failover — включает поддержку обновления посредством очередей с немедленным обновлением в качестве варианта для переключения.
Примечание Параметр queued failover требует, чтобы для публикации также были включены немедленно обновляемые подписки. Чтобы переключиться на немедленное обновление, необходимо использовать процедуру sp_link_publication для определения учетных данных, с которыми изменения на подписчике реплицируются на издатель.
Выполните процедуру sp_addpullsubscription_agent на подписчике. Укажите значения следующих параметров.
@publisher, @publisher_db и @publication.
Учетные данные пользователя Windows, от имени которого на подписчике будет запущен агент распространителя, в качестве значений параметров @job_login и @job_password;
Примечание Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент распространителя всегда создает локальное соединение с подписчиком с использованием встроенной проверки подлинности Windows. По умолчанию агент соединяется с распространителем с использованием встроенной проверки подлинности Windows.
Значение 0 для параметра @distributor_security_mode и данные учетной записи SQL Server в параметрах @distributor_login и @distributor_password, если для соединения с распространителем нужно использовать проверку подлинности SQL Server (необязательно);
Расписание агента распространителя для этой подписки. Дополнительные сведения см. в разделе Как определить расписания синхронизации (программирование репликации на языке Transact-SQL).
Чтобы зарегистрировать подписчика на издателе, на издателе выполните хранимую процедуру sp_addsubscriber (Transact-SQL).
Выполните на издателе хранимую процедуру sp_addsubscription, указав параметры @publication, @subscriber, @destination_db, значение pull в параметре @subscription_type и значение, указанное в шаге 3, в параметре @update_mode.
Подписка по запросу на издателе будет зарегистрирована.
Создание принудительной подписки, обновляемой посредством очередей
Проверьте на издателе, что все публикации поддерживают обновляемые посредством очередей подписки. Для этого выполните процедуру sp_helppublication.
Если значение столбца allow_queued_tran в результирующем наборе равно 1, то публикация поддерживает немедленное обновление подписок.
Если значение столбца allow_queued_tran в результирующем наборе равно 0, публикацию необходимо создать заново с включенной возможностью обновления подписок посредством очередей. Дополнительные сведения см. в разделе Как включить обновляемые подписки для публикаций транзакций (программирование репликации на языке Transact-SQL).
Проверьте на издателе, что публикация поддерживает принудительные подписки. Для этого выполните процедуру sp_helppublication.
Если значение столбца allow_push в результирующем наборе равно 1, то публикация поддерживает принудительные подписки.
Если значение столбца allow_push равно 0, то необходимо выполнить процедуру sp_changepublication, указав allow_push в параметре @property и значение true в параметре @value.
Выполните процедуру sp_addsubscription на издателе. Укажите параметры @publisher, @subscriber, @destination_db, а также одно из следующих значений параметра @update_mode.
queued tran — включает возможность обновления подписок посредством очередей.
queued failover — включает поддержку обновления посредством очередей с немедленным обновлением в качестве варианта для переключения.
Примечание Параметр queued failover требует, чтобы для публикации также были включены немедленно обновляемые подписки. Чтобы переключиться на немедленное обновление, необходимо использовать процедуру sp_link_publication для определения учетных данных, с которыми изменения на подписчике реплицируются на издатель.
Выполните процедуру sp_addpushsubscription_agent на издателе. Укажите значения следующих параметров.
@subscriber, @subscriber_db и @publication.
Учетные данные Windows, с которыми будет запускаться агент распространителя на распространителе в параметре @job_login, а пароль — в параметре @job_password.
Примечание Для соединений, производимых с использованием встроенной проверки подлинности Windows, в параметрах @job_login и @job_password всегда указываются учетные данные Windows. Агент распространителя всегда создает локальные соединения с распространителем через встроенную систему проверки подлинности Windows. По умолчанию агент подключается к подписчику с помощью встроенной проверки подлинности Windows.
Укажите значение 0 в параметре @subscriber_security_mode и сведения об имени входа SQL Server в параметрах @subscriber_login и @subscriber_password, если необходимо использовать проверку подлинности SQL Server при соединении с подписчиком (необязательно).
Расписание агента распространителя для этой подписки. Дополнительные сведения см. в разделе Как определить расписания синхронизации (программирование репликации на языке Transact-SQL).
Пример
В этом примере создается немедленно обновляемая подписка по запросу на публикацию, поддерживающую немедленно обновляемые подписки. Имя входа и пароль предоставляются во время выполнения переменными сценария sqlcmd.
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2008R2';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);
-- At the subscription database, create a pull subscription to a transactional
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB,
@update_mode = N'failover',
@subscription_type = N'pull';
-- Add an agent job to synchronize the pull subscription,
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@job_login = @login,
@job_password = @password;
-- Add a Windows Authentication-based linked server that enables the
-- Subscriber-side triggers to make updates at the Publisher.
EXEC sp_link_publication
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB,
@security_mode = 0,
@login = @login,
@password = @password;
GO
USE AdventureWorks2008R2;
GO
-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriptionDB = N'AdventureWorks2008R2Replica';
SET @subscriber = $(SubServer);
-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2008R2]
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'pull',
@update_mode = N'failover';
GO
См. также