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


Подписчики репликации и группы доступности Always On (SQL Server)

Применимо к:SQL Server

При отработки отказа группы доступности Always On, содержащей базу данных, которая является подписчиком репликации, может произойти сбой подписки репликации. Для владельцев принудительной подписки на репликацию транзакций агент распространителя сможет продолжить репликацию автоматически после отработки отказа, если подписка была создана с использованием имени прослушивателя группы доступности. Для владельцев подписки по запросу на репликацию транзакций агент распространителя сможет продолжить репликацию автоматически после отработки отказа, если подписка была создана с использованием имени прослушивателя группы доступности, а исходный сервер подписчика настроен и запущен. Это обусловлено тем, что задания агента распространения создаются только для исходного подписчика (первичная реплика группы доступности). Для подписчиков на публикацию слиянием администратор репликации должен вручную перенастроить подписчик путем повторного создания подписки.

Поддерживаемые возможности

Репликация SQL Server поддерживает автоматический переход на другой ресурс для издателя и подписчиков транзакций. Подписчики слияния могут быть частью группы доступности, однако для настройки нового подписчика после отработки отказа требуются ручные действия. Группы доступности нельзя объединять с WebSync и SQL Server Compact сценариями.

Создание транзакционной подписки в группе доступности

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

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

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

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

    Примечание

    Подписка должна быть создана с использованием сценария Transact-SQL и не может быть создана с использованием Среда Management Studio.

  4. Создание подписки по запросу.

    1. С помощью примера скрипта в разделе Создание подписки на репликацию транзакций создайте подписку, используя имя прослушивателя группы доступности подписчика.

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

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

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

-- commands to execute at the publisher, in the publisher database:
USE [<publisher database name>];
GO

EXEC sp_addsubscription @publication = N'<publication name>',
    @subscriber = N'<AG listener name>',
    @destination_db = N'<subscriber database name>',
    @subscription_type = N'Push',
    @sync_type = N'automatic',
    @article = N'all',
    @update_mode = N'read only',
    @subscriber_type = 0;
GO
  
EXEC sp_addpushsubscription_agent @publication = N'<publication name>',
    @subscriber = N'<AG listener name>',
    @subscriber_db = N'<subscriber database name>',
    @job_login = NULL,
    @job_password = NULL,
    @subscriber_security_mode = 1;
GO

Создание подписки на репликацию транзакций по запросу

-- commands to execute at the subscriber, in the subscriber database:
USE [<subscriber database name>];
GO

EXEC sp_addpullsubscription @publisher = N'<publisher name>',
    @publisher_db = N'<publisher database name>',
    @publication = N'<publication name>',
    @subscription_type = N'pull';
GO

EXEC sp_addpullsubscription_agent @publisher = N'<publisher name>',
    @subscriber = N'<AG listener name>',
    @distributor = N'<distributor AG listener name>', -- this parameter should only be used if the distribution database is part of an AG.
    @publisher_db = N'<publisher database name>',
    @publication = N'<publication name>',
    @job_login = NULL,
    @job_password = NULL,
    @subscriber_security_mode = 1;
GO

Примечание

При выполнении sp_addpullsubscription_agent для подписчика, который входит в группу доступности, необходимо передать @Subscriber значение параметра в хранимую процедуру в качестве имени прослушивателя группы доступности. Если вы используете SQL Server 2016 (13.x) и более ранних версий или SQL Server 2017 (14.x) до cu 16, хранимая процедура не будет ссылаться на имя прослушивателя группы доступности; она будет создана с именем сервера подписчика, на котором выполняется команда. Чтобы устранить эту проблему, вручную обновите @Subscriber параметр в задании агент распространения значением имени прослушивателя группы доступности.

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

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

  1. Для удаления старой подписки подписчика выполните процедуру sp_subscription_cleanup. Запустите действие на новой первичной реплике (которая раньше была вторичной репликой).

  2. Создайте подписку заново, начиная с нового моментального снимка.

Примечание

Текущий процесс неудобн для подписчиков репликации слиянием, однако основной сценарий репликации слиянием — это отключенные пользователи (настольные компьютеры, ноутбуки, мобильные устройства), которые не будут использовать группы доступности на подписчике.

См. также раздел