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


Создание обновляемой подписки на публикацию транзакций (Management Studio)

Замечание

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

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

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

Настройка обновляемой подписки с издателя

  1. Подключитесь к издателю в Microsoft SQL Server Management Studio, а затем разверните узел сервера.

  2. Раскройте папку Репликация , а затем папку Локальные публикации .

  3. Щелкните правой кнопкой мыши публикацию транзакций, включенную для обновления подписок, а затем щелкните "Новые подписки".

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

  5. На странице Обновляемых ПодписокМастера создания новой подписки убедитесь, что выбрана функция Репликация.

  6. Выберите параметр в раскрывающемся списке "Фиксация" в издателе :

    • Чтобы использовать немедленное обновление подписок, выберите "Одновременно зафиксировать изменения". Если этот параметр выбран, а публикация позволяет обновлять подписки в очереди (по умолчанию для публикаций, созданных с помощью мастера создания публикаций), свойство подписки update_mode устанавливается на отработку отказа. Этот режим позволяет при необходимости переключиться на обновление в очереди.
    • Чтобы использовать подписки, обновляемые в очереди, выберите Поставить изменения в очередь и подтвердить их, когда это возможно. Если выбрать этот параметр и публикация позволяет немедленное обновление подписок (что является параметром по умолчанию для публикаций, созданных с использованием мастера создания публикаций), и подписчик работает на SQL Server 2005 или более поздней версии, свойство подписки update_mode устанавливается в режим резервирования очереди. Этот режим позволяет переключиться на немедленное обновление позже при необходимости.

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

  7. Страница входа для обновляемых подписок отображается для подписок, которые используют непосредственное обновление или у которых update_mode установлен в режим обработки отказов в очереди. На странице "Вход для обновляемых подписок" укажите связанный сервер, на котором выполняются подключения к издателю для немедленного обновления подписок. Подключения используются триггерами, срабатывающими на подписчике и распространяющими изменения к издателю. Выберите один из следующих параметров:

    • Создайте связанный сервер, который подключается с помощью проверки подлинности SQL Server. Выберите этот параметр, если вы не определили удаленный сервер или связанный сервер между подписчиком и издателем. Репликация создаёт для вас связанный сервер. Указанная учетная запись уже должна существовать на издателе.
    • Используйте уже определенный связанный сервер или удаленный сервер. Выберите этот параметр, если вы определили удаленный сервер или связанный сервер между подписчиком и издателем с помощью процедуры sp_addserver (Transact-SQL),sp_addlinkedserver (Transact-SQL), SQL Server Management Studio или другого метода.

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

  8. Завершите работу мастера.

Настроить обновляемую подписку для подписчика

  1. Подключитесь к подписчику в SQL Server Management Studio и разверните узел сервера.

  2. Разверните папку Репликации.

  3. Щелкните правой кнопкой мыши папку "Локальные подписки" и выберите пункт "Создать подписки".

  4. На странице Публикация в Мастере новой подписки выберите "Найти SQL Server издателя" из раскрывающегося списка Издатель.

  5. Подключитесь к издателю в диалоговом окне "Подключение к серверу ".

  6. Выберите транзакционную публикацию, доступную для обновления подписок на странице Публикация.

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

  8. На странице Обновляемых подписок в мастере создания новой подписки убедитесь, что выбрано дублирование.

  9. Выберите опцию в раскрывающемся списке Commit at Publisher:

    • Чтобы использовать немедленное обновление подписок, выберите "Одновременно зафиксировать изменения". Если этот параметр выбран, а публикация позволяет обновлять подписки в очереди (что является значением по умолчанию для публикаций, созданных с помощью мастера создания публикаций), свойство подписки update_mode устанавливается на отказоустойчивость. Этот режим позволяет при необходимости переключиться на обновление в очереди.
    • Чтобы использовать подписки с отложенным обновлением, выберите поставьте изменения в очередь и зафиксируйте их, когда это возможно. Если этот параметр выбран, а публикация позволяет немедленно обновлять подписки (по умолчанию для публикаций, созданных с помощью мастера создания публикаций New Publication Wizard), а подписчик работает под управлением SQL Server 2005 или более поздней версии, свойство подписки update_mode устанавливается в режим очереди failover. Этот режим позволяет переключиться на немедленное обновление позже при необходимости.

    Для получения информации о переключении режимов обновления, см. раздел «Переключение между режимами обновления для подписки с возможностью обновления транзакций».

  10. Страница входа для обновляемых подписок отображается для подписок, которые используют немедленное обновление или update_mode заданы для отработки отказа в очереди. На странице "Вход для обновляемых подписок" укажите связанный сервер, на котором выполняются подключения к издателю для немедленного обновления подписок. Подключения используются триггерами, срабатывающими на подписчике и распространяющими изменения к издателю. Выберите один из следующих параметров:

    • Создайте связанный сервер, который подключается с помощью проверки подлинности SQL Server. Выберите этот параметр, если вы не определили удаленный сервер или связанный сервер между подписчиком и издателем. Репликация создает для вас связанный сервер. Указанная учетная запись уже должна существовать на издателе.
    • Используйте уже определенный связанный сервер или удаленный сервер. Выберите этот параметр, если вы определили удаленный сервер или связанный сервер между подписчиком и издателем с помощью процедуры sp_addserver (Transact-SQL),sp_addlinkedserver (Transact-SQL), SQL Server Management Studio или другого метода.

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

  11. Завершите работу мастера.

Создание подписки на извлечение с немедленным обновлением

  1. У издателя убедитесь, что публикация поддерживает немедленное обновление подписок, выполнив sp_helppublication.

    • Если значение allow_sync_tran в результирующем наборе равно 1, публикация поддерживает немедленное обновление подписок.
    • Если значение allow_sync_tran в результирующем наборе имеет значение 0, публикация должна быть повторно создана с включенными немедленно обновляемыми подписками.
  2. В издателе удостоверьтесь, что публикация поддерживает подписки с вытягиванием, выполнив sp_helppublication.

    • Если значение allow_pull в результирующем наборе равно 1, публикация поддерживает подписки на получение.
    • Если значение allow_pull равно 0, выполните sp_changepublication, указав allow_pull для @property и true для @value.
  3. На подписчике выполните sp_addpullsubscription. Укажите @publisher и @publication, а также одно из следующих значений для @update_mode:

    • sync tran — включает подписку для немедленного обновления.
    • failover — включает подписку для немедленного обновления с обновлением в очереди в качестве возможности отработки отказа.

    Замечание

failover требует, чтобы публикация также была включена для подписок, обновляемых в очереди.

  1. На подписчике выполните sp_addpullsubscription_agent. Укажите следующее:

    • Параметры @publisher, @publisher_db и @publication.
    • Учетные данные Microsoft Windows, в которых агент распространителя на подписчике выполняется и @job_login@job_password.

    Замечание

Подключения, сделанные с помощью встроенной проверки подлинности Windows, всегда выполняются с помощью учетных данных Windows, указанных @job_login и @job_password. Агент распространителя всегда делает локальное подключение к подписчику с помощью встроенной проверки подлинности Windows. По умолчанию агент подключается к распространителю с помощью встроенной проверки подлинности Windows.

* (Optional) A value of `0` for `@distributor_security_mode` and the Microsoft SQL Server login information for `@distributor_login` and `@distributor_password`, if you need to use SQL Server Authentication when connecting to the Distributor. 
* A schedule for the Distribution Agent job for this subscription. 
  1. В базе данных подписки на подписчике выполните процедуру sp_link_publication. Укажите @publisher, @publicationимя базы данных публикации для @publisher_dbи одно из следующих значений:@security_mode

    • 0 — Используйте аутентификацию SQL Server при внесении обновлений на узле издателя. Для этого параметра необходимо указать допустимое имя входа на издателе @login и @password.
    • 1 — При подключении к издателю используйте контекст безопасности пользователя, внося изменения в подписчик. Связанные с этим режимом безопасности ограничения см. в разделе sp_link_publication .
    • 2 — Используйте существующее пользовательское имя входа связанного сервера, созданное с помощью sp_addlinkedserver.
  2. На издателе выполните sp_addsubscription, указав @publication, @subscriber, @destination_db, значение "извлечение" для @subscription_type, а также то же значение, указанное на шаге 3 для @update_mode.

Это регистрирует подписку на выборку данных на сервере-публикаторе.

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

  1. У издателя убедитесь, что публикация поддерживает немедленное обновление подписок, выполнив sp_helppublication.

    • Если значение allow_sync_tran в результирующем наборе равно 1, публикация поддерживает немедленное обновление подписок.
    • Если значение allow_sync_tran в результирующем наборе имеет значение 0, публикация должна быть повторно создана с включенными немедленно обновляемыми подписками.
  2. У издателя убедитесь, что публикация поддерживает push-подписки, выполнив sp_helppublication.

    • Если значение allow_push в результирующем наборе равно 1, публикация поддерживает push-подписки.
    • Если значение allow_push равно 0, выполните sp_changepublication, указав allow_push для @property и true для @value.
  3. На издателе выполните sp_addsubscription. Укажите @publication, @subscriber, @destination_db и одно из следующих значений для @update_mode:

    • sync tran — обеспечивает поддержку немедленного обновления.
    • failover — позволяет поддерживать немедленное обновление с обновлением с помощью очереди в качестве резервного варианта.

    Замечание

failover требует, чтобы публикация также была включена для подписок с обновлениями в очереди.

  1. На публикаторе выполните sp_addpushsubscription_agent. Укажите следующие параметры:

    • @subscriber, @subscriber_dbи @publication.
    • Учетные данные Windows, под которыми агент распространителя запускается на распределителе для @job_login и @job_password.

    Замечание

Подключения, сделанные с помощью встроенной проверки подлинности Windows, всегда выполняются с помощью учетных данных Windows, указанных @job_login и @job_password. Агент распространения всегда устанавливает локальное подключение к дистрибьютору с помощью встроенной проверки подлинности Windows. По умолчанию агент подключается к подписчику с помощью встроенной проверки подлинности Windows.

* (Optional) A value of `0` for `@subscriber_security_mode` and the SQL Server login information for `@subscriber_login` and `@subscriber_password`, if you need to use SQL Server Authentication when connecting to the Subscriber. 
* A schedule for the Distribution Agent job for this subscription.
  1. В базе данных подписки на подписчике выполните процедуру sp_link_publication. Укажите @publisher, @publicationимя базы данных публикации для @publisher_dbи одно из следующих значений:@security_mode

    • 0 — Используйте аутентификацию SQL Server при внесении обновлений на сервере публикации. Для этого параметра необходимо указать допустимое имя входа для издателя @login и @password.
    • 1 — При подключении к издателю используйте контекст безопасности пользователя, вносящего изменения на стороне подписчика. Связанные с этим режимом безопасности ограничения см. в разделе sp_link_publication .
    • 2 — Используйте существующий пользовательский логин для связанного сервера, созданный с помощью sp_addlinkedserver.

Создать подписку на вытягивающее обновление в очереди

  1. На издателе проверьте, что публикация поддерживает обновление подписок в очереди, выполнив sp_helppublication.

    • Если значение allow_queued_tran в результирующем наборе равно 1, публикация поддерживает немедленное обновление подписок.
    • Если allow_queued_tran в результирующем наборе принимает значение 0, публикация должна быть воссоздана с включением подписок с отложенным обновлением.
  2. В издателе удостоверьтесь, что публикация поддерживает подписки с вытягиванием, выполнив sp_helppublication.

    • Если значение allow_pull в результирующем наборе равно 1, публикация поддерживает подписки на получение.
    • Если значение allow_pull равно 0, выполните sp_changepublication, указав allow_pull для @property и true для @value.
  3. На подписчике выполните sp_addpullsubscription. Укажите @publisher и @publication, а также одно из следующих значений для @update_mode.

    • queued tran — включает подписку на очередное обновление.
    • queued failover — обеспечивает поддержку обновления в очереди с немедленным обновлением в качестве резервного варианта.

    Замечание

queued failover требует, чтобы публикация также была включена для немедленного обновления подписок. Чтобы переключиться при отказе на немедленное обновление, необходимо использовать sp_link_publication для определения учетных данных, при которых изменения на подписчике реплицируются на издателя.

  1. На подписчике выполните sp_addpullsubscription_agent. Укажите следующие параметры:

    • @publisher, @publisher_dbи @publication.
    • Учетные данные Windows, под которыми агент распределения на подписчике работает для @job_login и @job_password.

    Замечание

Подключения, сделанные с помощью встроенной проверки подлинности Windows, всегда выполняются с помощью учетных данных Windows, указанных @job_login и @job_password. Агент распространителя всегда делает локальное подключение к подписчику с помощью встроенной проверки подлинности Windows. По умолчанию агент подключается к распространителю с помощью встроенной проверки подлинности Windows.

* (Optional) A value of `0` for `@distributor_security_mode` and the SQL Server login information for `@distributor_login` and `@distributor_password`, if you need to use SQL Server Authentication when connecting to the Distributor. 
* A schedule for the Distribution Agent job for this subscription.
  1. На издателе выполните sp_addsubscriber, чтобы зарегистрировать подписчика у издателя, указав @publication, @subscriber, @destination_db, значение 'pull' для @subscription_type, и то же значение, указанное на шаге 3 для @update_mode.

Это регистрирует подписку на выборку данных на сервере-публикаторе.

Создание push-подписки с обновлениями в очереди

  1. На издателе проверьте, что публикация поддерживает обновление подписок в очереди, выполнив sp_helppublication.

    • Если значение allow_queued_tran в результирующем наборе равно 1, публикация поддерживает немедленное обновление подписок.
    • Если значение allow_queued_tran в результирующем наборе равно 0, публикация должна быть повторно создана с включенными подписками в очереди. Дополнительные сведения см. в разделе "Инструкции по включению обновлений подписок для транзакционных публикаций" (Replication Transact-SQL Programming).
  2. У издателя убедитесь, что публикация поддерживает push-подписки, выполнив sp_helppublication.

    • Если значение allow_push в результирующем наборе равно 1, публикация поддерживает push-подписки.
    • Если значение allow_push равно 0, выполните sp_changepublication, указав allow_push для @property и true для @value.
  3. На издателе выполните sp_addsubscription. Укажите @publication, @subscriber, @destination_db и одно из следующих значений для @update_mode:

    • queued tran — включает подписку на очередное обновление.
    • queued failover — обеспечивает поддержку обновления в очереди с немедленным обновлением в качестве резервного варианта.

    Замечание

Параметр отработки отказа в очереди требует, чтобы публикация также была включена для немедленного обновления подписок. Чтобы переключиться при отказе на немедленное обновление, необходимо использовать sp_link_publication для определения учетных данных, при которых изменения на подписчике реплицируются на издателя.

  1. На публикаторе выполните sp_addpushsubscription_agent. Укажите следующие параметры:

    • @subscriber, @subscriber_dbи @publication.
    • Учетные данные Windows, под которыми агент распространителя запускается на распределителе для @job_login и @job_password.

    Замечание

Подключения, сделанные с помощью встроенной проверки подлинности Windows, всегда выполняются с помощью учетных данных Windows, указанных @job_login и @job_password. Агент распространения всегда устанавливает локальное подключение к дистрибьютору с помощью встроенной проверки подлинности Windows. По умолчанию агент подключается к подписчику с помощью встроенной проверки подлинности Windows.

* (Optional) A value of `0` for `@subscriber_security_mode` and the SQL Server login information for `@subscriber_login` and `@subscriber_password`, if you need to use SQL Server Authentication when connecting to the Subscriber. 
* A schedule for the Distribution Agent job for this subscription.

Пример

В этом примере создается немедленно обновляемая подписка на публикацию, которая поддерживает немедленное обновление подписок. Значения входа и пароля предоставляются во время выполнения с помощью переменных скриптов sqlcmd.

Замечание

Этот скрипт использует переменные скрипта sqlcmd. Они находятся в форме $(MyVariable). Сведения о том, как использовать переменные скриптов в командной строке и SQL Server Management Studio, см. раздел Выполнение скриптов репликации в теме Основные понятия хранимых процедур системы репликации.

-- 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

Установить параметры разрешения конфликтов для обновления в очереди (SQL Server Management Studio)

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

Настройка параметров разрешения конфликтов в очереди

  1. На странице "Параметры подписки" диалогового окна "Свойства публикации — публикация>" < выберите одно из следующих значений для параметра политики разрешения конфликтов:
    • Сохранение изменений издателя
    • Сохранение изменений подписчика
    • Повторная инициализация подписки
  2. Нажмите кнопку ОК.

См. также

Создание публикации
Обновляемые подписки для репликации транзакций
Использование sqlcmd с переменными скриптов