Replikationsabonnenten und Always On-Verfügbarkeitsgruppen (SQL Server)

Gilt für:SQL Server

Wenn für eine Always On-Verfügbarkeitsgruppe mit einer Datenbank, die einen Replikationsabonnenten darstellt, ein Failover ausgeführt wird, tritt möglicherweise ein Fehler beim Replikationsabonnement auf. Für Transaktionsreplikations-Pushabonnenten setzt der Verteilungs-Agent das Replizieren nach einem Failover automatisch fort, wenn das Abonnement mit dem Namen des Verfügbarkeitsgruppenlisteners erstellt wurde. Für Transaktionsreplikations-Pullabonnenten setzt der Verteilungs-Agent das Replizieren nach einem Failover automatisch fort, wenn das Abonnement mit dem Namen des Verfügbarkeitsgruppenlisteners erstellt wurde und wenn der ursprüngliche Abonnentenserver aktiv ist und ausgeführt wird. Ursache hierfür ist, dass die Verteilungs-Agent-Aufträge nur auf dem ursprünglichen Abonnenten (primäres Replikat der Verfügbarkeitsgruppe) erstellt werden. Bei Mergeabonnenten muss der Abonnent vom Replikationsadministrator manuell neu konfiguriert werden, indem er das Abonnement neu erstellt.

Unterstützte Vorgänge

Die SQL Server-Replikation unterstützt das automatische Failover des Verlegers und das automatische Failover transaktionale Abonnenten. Mergeabonnenten können Teil einer Verfügbarkeitsgruppe sein, jedoch sind manuelle Aktionen erforderlich, um den neuen Abonnenten nach einem Failover zu konfigurieren. Verfügbarkeitsgruppen können nicht mit WebSync- und SQL Server Compact-Szenarios kombiniert werden.

Erstellen eines Transaktionsabonnements in einer Verfügbarkeitsgruppe

Führen Sie bei der Transaktionsreplikation folgende Schritte aus, um die Verfügbarkeitsgruppe eines Abonnenten zu konfigurieren und ein Failover auszuführen:

  1. Bevor Sie das Abonnement erstellen, fügen Sie die Abonnentendatenbank der entsprechenden Verfügbarkeitsgruppe hinzu.

  2. Fügen Sie den Verfügbarkeitsgruppenlistener des Abonnenten als Verbindungsserver allen Knoten der Verfügbarkeitsgruppe hinzu. Dadurch werden alle potenziellen Failoverpartner informiert, dass der Listener vorhanden und für Verbindungen verfügbar ist.

  3. Erstellen Sie das Abonnement mit dem Namen des Verfügbarkeitsgruppenlisteners des Abonnenten mithilfe des Skripts im Abschnitt Erstellen eines Pushabonnements für eine Transaktionsreplikation. Der Listenername bleibt nach einem Failover weiterhin gültig, während der tatsächliche Servername des Abonnenten von dem Knoten abhängig ist, der zum neuen primären Replikat wird.

    Hinweis

    Das Abonnement muss mithilfe eines Transact-SQL-Skripts erstellt werden, nicht mit Management Studio.

  4. So erstellen Sie ein Pullabonnement:

    1. Erstellen Sie das Abonnement mit dem Namen des Verfügbarkeitsgruppenlisteners des Abonnenten mithilfe des Beispielskripts im Abschnitt Erstellen eines Pullabonnements für eine Transaktionsreplikation.

    2. Erstellen Sie nach einem Failover den Verteilungs-Agent-Auftrag mithilfe der gespeicherten Prozedur sp_addpullsubscription_agent auf dem neuen primären Replikat.

Wenn Sie ein Pullabonnement mit der Abonnementdatenbank in einer Verfügbarkeitsgruppe erstellen, sollten Sie nach jedem Failover den Verteilungs-Agent-Auftrag auf dem alten primären Replikat deaktivieren und den Auftrag auf dem neuen primären Replikat aktivieren.

Erstellen eines Pushabonnements für eine Transaktionsreplikation

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

Erstellen eines Pullabonnements für eine Transaktionsreplikation

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

Hinweis

Beim Ausführen von sp_addpullsubscription_agent für einen Abonnenten, der einer Always On-Verfügbarkeitsgruppe angehört, muss der Wert des Parameters @Subscriber als Name des Verfügbarkeitsgruppenlisteners an die gespeicherte Prozedur übergeben werden. Wenn Sie SQL Server 2016 (13.x) und frühere Versionen oder SQL Server 2017 (14.x) vor CU16 ausführen, verweist die gespeicherte Prozedur nicht auf den Namen des Verfügbarkeitsgruppenlisteners. Sie wird mit dem Namen des Abonnentenservers erstellt, auf dem der Befehl ausgeführt wird. Um dieses Problem zu beheben, aktualisieren Sie den Parameter @Subscriber für den Verteilungs-Agent-Auftrag manuell auf den Namen des Verfügbarkeitsgruppenlisteners.

Fortsetzen der Merge-Agents nach einem Failover der Verfügbarkeitsgruppe des Abonnenten

Bei einer Mergereplikation muss der Abonnent mithilfe folgender Schritte von einem Replikationsadministrator manuell neu konfiguriert werden:

  1. Führen Sie sp_subscription_cleanup aus, um das alte Abonnement für den Abonnenten zu entfernen. Führen Sie diese Aktion für das neue primäre Replikat aus (das zuvor das sekundäre Replikat war).

  2. Erstellen Sie das Abonnement neu, indem Sie ein neues Abonnement auf Grundlage einer neuen Momentaufnahme erstellen.

Hinweis

Der aktuelle Vorgang ist für Mergereplikationsabonnenten unpassend, die Mergereplikation wird jedoch hauptsächlich für nicht verbundene Benutzer (Desktops, Laptops, Mobiltelefone) verwendet, die keine Verfügbarkeitsgruppen für den Abonnenten verwenden.

Weitere Informationen