Skip to content

Latest commit

 

History

History
117 lines (87 loc) · 6.93 KB

replication-subscribers-and-always-on-availability-groups-sql-server.md

File metadata and controls

117 lines (87 loc) · 6.93 KB
title description author ms.author ms.reviewer ms.date ms.service ms.subservice ms.topic helpviewer_keywords
Replication subscribers and Always On availability groups (SQL Server)
Learn what happens if an Always On availability group containing a database that is a replication subscriber fails over in SQL Server.
MashaMSFT
mathoma
randolphwest
03/13/2023
sql
availability-groups
conceptual
failover subscribers with AlwaysOn
failover subscribers with Always On
Availability Groups [SQL Server], interoperability
replication [SQL Server], AlwaysOn Availability Groups
replication [SQL Server], Always On Availability Groups

Replication subscribers and Always On availability groups (SQL Server)

[!INCLUDE SQL Server]

When an Always On availability group (AG) fails over, containing a database that is a replication subscriber, the replication subscription might fail. For transactional replication push subscribers, the distribution agent will continue to replicate automatically after a failover if the subscription was created using the AG listener name. For transactional replication pull subscribers, the distribution agent will continue to replicate automatically after a failover, if the subscription was created using the AG listener name and the original subscriber server is up and running. This is because the distribution agent jobs only get created on the original subscriber (primary replica of the AG). For merge subscribers, a replication administrator must manually reconfigure the subscriber, by recreating the subscription.

What is supported

[!INCLUDEssNoVersion] replication supports the automatic failover of the publisher and the automatic failover of transactional subscribers. Merge subscribers can be part of an AG, however manual actions are required to configure the new subscriber after a failover. AGs can't be combined with WebSync and SQL Server Compact scenarios.

Create a transactional subscription in an availability group

For transactional replication, use the following steps to configure and fail over a subscriber AG:

  1. Before creating the subscription, add the subscriber database to the appropriate AG.

  2. Add the subscriber's AG listener as a linked server to all nodes of the AG. This step ensures that all potential failover partners are aware of and can connect to the listener.

  3. Using the script in the Create a transactional replication push subscription section, create the subscription using the name of the AG listener of the subscriber. After a failover, the listener name will always remain valid, whereas the actual server name of the subscriber will depend on the actual node that became the new primary.

    [!NOTE]
    The subscription must be created by using a [!INCLUDEtsql] script and cannot be created using [!INCLUDEssManStudio].

  4. To create a pull subscription:

    1. Using the sample script in the Create a transactional replication pull subscription section, create the subscription using the name of the AG listener of the subscriber.

    2. After a failover, create the distribution agent job on the new primary replica using the sp_addpullsubscription_agent stored procedure.

When you create a pull subscription, with the subscription database in an AG, after every failover, it is recommended to disable the distribution agent job on the old primary replica and enable the job on the new primary replica.

Create a transactional replication push subscription

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

Create a transactional replication pull subscription

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

Note

When running sp_addpullsubscription_agent for a subscriber that is part of an AG, you must pass the @Subscriber parameter value to the stored procedure as the AG listener name. If you are running [!INCLUDEsssql15-md] and earlier versions, or [!INCLUDEsssql17-md] prior to CU 16, the stored procedure will not reference the AG listener name; it will be created with the subscriber server name on which the command is executed. To resolve this issue, manually update the @Subscriber parameter on the Distribution Agent job with the AG listener name value.

Resume the merge agents after the availability group of the subscriber fails over

For merge replication, a replication administrator must manually reconfigure the subscriber with the following steps:

  1. Execute sp_subscription_cleanup to remove the old subscription for the subscriber. Perform this action on the new primary replica (which was formerly the secondary replica).

  2. Recreate the subscription by creating a new subscription, beginning with a new snapshot.

Note

The current process is inconvenient for merge replication subscribers, however the main scenario for merge replication is disconnected users (desktops, laptops, handset devices) which will not use AGs on the subscriber.

See also