Freigeben über


Einrichten der Verteilungsdatenbank für die Replikation in einer Always On-Verfügbarkeitsgruppe

Gilt für: SQL Server

Dieser Artikel beschreibt, wie Sie eine SQL Server-Verteilungsdatenbank für die Replikation in einer Always On-Verfügbarkeitsgruppe einrichten.

Ab SQL Server 2017 CU6 und SQL Server 2016 SP2-CU3 werden Verteilungsdatenbanken für die Replikation in Verfügbarkeitsgruppen folgendermaßen unterstützt:

  • Die Verfügbarkeitsgruppe der Verteilungsdatenbank muss über einen Listener verfügen. Wenn der Verleger den Verteiler hinzufügt, wird der Listenername als Verteilername verwendet.
  • Bei der Erstellung von Replikationsaufträgen dient der Listenername als Verteilername. Replikationsmomentaufnahme-, Protokolllese- und Verteilungs-Agent-Aufträge (Pushabonnementaufträge), die auf dem Verteilungsserver erstellt wurden, werden in allen sekundären Replikaten der Verfügbarkeitsgruppe für die Verteilungsdatenbank erstellt.

Hinweis

Verteilungs-Agent-Aufträge für Pullabonnements werden auf dem Abonnentenserver, nicht auf dem Verteilungsserver erstellt.

  • Ein neuer Auftrag überwacht den Status der Verteilungsdatenbanken (primäres oder sekundäres Replikat in der Verteilungsgruppe) und deaktiviert oder aktiviert die Replikationsaufträge entsprechend.

Nachdem eine Verteilungsdatenbank gemäß der nachfolgenden Anleitung in der Verfügbarkeitsgruppe konfiguriert wurde, können die Replikationskonfiguration und die Aufträge zur Laufzeit ordnungsgemäß vor und nach dem Failover auf die Verteilungsdatenbank ausgeführt werden.

Unterstützte Szenarios

  • Verteilungsdatenbank konfigurieren, die der Verfügbarkeitsgruppe hinzugefügt werden soll
  • Replikation, z.B. Veröffentlichungen und Abonnements, vor und nach einem Failover auf die Verfügbarkeitsgruppe konfigurieren
  • Replikationsaufträge funktionieren vor und nach einem Failover
  • Replikation auf dem Verteiler und Verleger entfernen, wenn sich die Verteilungsdatenbank in der Verfügbarkeitsgruppe befindet
  • Knoten zur vorhandenen Verteilungsdatenbank hinzufügen oder daraus entfernen
  • Ein Verteiler kann über mehrere Verteilungsdatenbanken verfügen. Jede Verteilungsdatenbank kann sich in einer eigenen oder gar keiner Verfügbarkeitsgruppe befinden. Mehrere Verteilungsdatenbanken können sich eine Verfügbarkeitsgruppe teilen.
  • Verleger und Verteiler müssen sich auf separaten SQL Server-Instanzen befinden.
  • Wenn der Listener für die Verfügbarkeitsgruppe, die die Verteilungsdatenbank hostet, so konfiguriert ist, dass kein Standardport verwendet wird, müssen Sie einen Alias für den Listener und den Port einrichten.

Einschränkungen oder Ausschlüsse

  • Lokaler Verteiler (wobei der Veröffentlichungsserver auch der Verteiler ist) wird nicht unterstützt. Der Veröffentlichungsserver und der Verteiler müssen separate SQL Server-Instanzen sein. Diese Instanzen können auf denselben Knotengruppen gehostet werden. Ein lokaler Verteiler wird aus den folgenden Gründen nicht unterstützt:

    • Wenn der Verteiler lokal konfiguriert ist, können Sie den Datenverkehr nicht über den Verfügbarkeitsgruppenlistener an den Verteiler weiterleiten. Dies führt dazu, dass Replikations-Agents nach dem Failover fehlschlagen.
    • Wenn ein lokaler Verteiler konfiguriert ist und dann die Verfügbarkeitsgruppe des Verteilers per Failover auf das ursprüngliche sekundäre Replikat umgestellt wird, wird die Verbindung des Veröffentlichungsservers mit dem Verteiler von Lokal auf Remote umgestellt, wodurch gespeicherte Prozeduren und Agents der Replikation fehlschlagen.
  • Oracle-Verleger werden nicht unterstützt.

  • Die Mergereplikation wird nicht unterstützt.

  • Die Transaktionsreplikation mit sofortigen oder verzögerten Updates des Abonnenten wird nicht unterstützt.

  • Die Peer-zu-Peer-Replikation wird vor SQL Server 2019 (15.x) CU 17 nicht unterstützt.

  • Alle SQL Server 2017-Instanzen, die Verteilungsdatenbank-Replikate hosten, müssen SQL Server 2017 CU 6 oder höher entsprechen.

  • Alle SQL Server 2016-Instanzen, die Verteilungsdatenbank-Replikate hosten, müssen SQL Server 2016 SP2 CU3 oder höher entsprechen.

  • Alle SQL Server-Instanzen, die Verteilungsdatenbankreplikate hosten, müssen bis auf das kleine Zeitfenster, in dem das Upgrades stattfindet, jederzeit dieselbe Version aufweisen.

  • Die Verteilungsdatenbank muss sich im vollständigen Wiederherstellungsmodell befinden.

  • Konfigurieren Sie für die Wiederherstellung und zur Aktivierung der Kürzung von Transaktionsprotokollen vollständige und Transaktionsprotokollsicherungen.

  • Für die Verfügbarkeitsgruppe der Verteilungsdatenbank muss ein Listener konfiguriert sein.

  • Sekundäre Replikate in einer Verfügbarkeitsgruppe einer Verteilungsdatenbank können synchron oder asynchron sein. Der synchrone Modus wird jedoch empfohlen und bevorzugt.

  • Die bidirektionale Transaktionsreplikation wird nicht unterstützt.

  • SSMS zeigt für Verteilungsdatenbanken nicht die Status „Wird synchronisiert“ bzw. „Synchronisiert“ an, wenn eine Verteilungsdatenbank zu einer Verfügbarkeitsgruppe hinzugefügt wird.

    Hinweis

    Vor dem Ausführen von gespeicherten Replikationsprozeduren für das sekundäre Replikat (z.B. sp_dropdistpublisher, sp_dropdistributiondb, sp_dropdistributor, sp_adddistributiondb, sp_adddistpublisher) sollten Sie sicherstellen, dass das Replikat vollständig synchronisiert wurde.

  • Alle sekundären Replikate in der Verfügbarkeitsgruppe einer Verteilungsdatenbank sollten lesbar sein. Wenn ein sekundäres Replikat nicht lesbar ist, ist der Zugriff auf die Verteilereigenschaften für das bestimmte sekundäre Replikat in SQL Server Management Studio nicht möglich. Die Replikation funktioniert jedoch weiterhin ordnungsgemäß.

  • Alle Knoten in der Verfügbarkeitsgruppe einer Verteilungsdatenbank müssen für den SQL Server-Agent dasselbe Domänenkonto verwenden, und das Domänenkonto muss auf jedem Knoten über dieselben Berechtigungen verfügen.

  • Wenn einer der Replikations-Agents unter einem Proxykonto ausgeführt wird, muss das Proxykonto auf jedem Knoten in der Verfügbarkeitsgruppe der Verteilungsdatenbank vorhanden sein und muss auf jedem Knoten dieselben Berechtigung haben.

  • Nehmen Sie in allen Replikaten, die Teil der Verfügbarkeitsgruppe der Verteilungsdatenbank sind, Änderungen an den Eigenschaften des Verteilers oder der Verteilungsdatenbank vor.

  • Nehmen Sie in allen Replikaten, die Teil der Verfügbarkeitsgruppe der Verteilungsdatenbank sind, mithilfe von gespeicherten msdb-Prozeduren oder SQL Server Management Studio Änderungen an Replikationsaufträgen vor.

  • Wenn Sie ein benutzerdefiniertes Profil für einen Agent verwenden, muss es mit sp_add_agent_profile für alle sekundären Replikate manuell erstellt werden. Das Profil muss bei allen Replikaten die gleiche ID haben.

  • Die Konfiguration des Verteilers auf dem Verleger muss mithilfe von Skripts ausgeführt werden. Der Replikations-Assistent kann nicht verwendet werden. Replikations-Assistenten und Eigenschaftenblätter, die anderen Zwecken dienen, werden unterstützt.

  • Die Konfiguration von Verfügbarkeitsgruppen für Verteilungsdatenbanken kann nur mithilfe von Skripts erfolgen.

  • Die Einrichtung von Verteilungsdatenbanken in einer Verfügbarkeitsgruppe erfordert eine neue Replikationskonfiguration. Das Verschieben einer vorhandenen Verteilungsdatenbank in eine Verfügbarkeitsgruppe wird nicht unterstützt. Sobald eine Verteilungsdatenbank aus einer Verfügbarkeitsgruppe entfernt wurde, kann sie nicht mehr als eine gültige Verteilungsdatenbank fungieren und sollte gelöscht werden.

Konfigurationsarchitektur

Die folgenden Servernamen und Einstellungen werden in den Beispielen in diesem Artikel verwendet.

  • DIST1, DIST2 und DIST3 sind Verteilerserver.
  • PUB ist der Verlegerserver.
  • Nach der Erstellung der Verfügbarkeitsgruppe der Verteilungsdatenbank lautet der Name des Listeners DISTLISTENER.
  • DIST1 ist das erste primäre Replikat der Verfügbarkeitsgruppe der Verteilungsdatenbank.

Konfigurieren von Verteiler, Verteilungsdatenbank und Verteiler

In diesem Beispiel werden ein neuer Verteiler und Verleger konfiguriert, und die Verteilungsdatenbank wird einer Verfügbarkeitsgruppe hinzugefügt.

Workflow des Verteilers

  1. Konfigurieren Sie DIST1, DIST2 und DIST3 mit sp_adddistributor @@servername als Verteiler. Geben Sie das Kennwort für distributor_admin über @password an. @password sollte für DIST1, DIST2 und DIST3 identisch sein.

  2. Erstellen Sie die Verteilungsdatenbank auf DIST1 mit sp_adddistributiondb. Der Name der Verteilungsdatenbank lautet distribution. Ändern Sie da Wiederherstellungsmodell der distribution-Datenbank von einfach in vollständig.

  3. Erstellen Sie eine Verfügbarkeitsgruppe für die distribution-Datenbank mit Replikaten auf DIST1, DIST2 und DIST3. Alle Replikate sollten vorzugsweise synchron sein. Konfigurieren Sie die sekundären Replikate so, dass sie lesbar sind oder das Lesen zulassen. Wenn sich die Verteilungsdatenbanken in der Verfügbarkeitsgruppe befinden, ist DIST1 das primäre Replikat und DIST2 und DIST3 sind die sekundären Replikate.

  4. Konfigurieren Sie einen Listener namens DISTLISTENER für die Verfügbarkeitsgruppe.

  5. Konfigurieren Sie für die Wiederherstellung und zur Aktivierung der Kürzung von Transaktionsprotokollen vollständige und Transaktionsprotokollsicherungen.

  6. Führen Sie auf DIST2 und DIST3 Folgendes aus:

    EXEC sys.sp_adddistributiondb @database = 'distribution';
    
  7. Um PUB als Verleger auf DIST1 hinzuzufügen, führen Sie Folgendes aus:

    EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';
    

    Der Wert von @working_directory sollte ein Netzwerkpfad sein, der nicht von DIST1, DIST2 und DIST3 abhängt.

  8. Führen Sie auf DIST2 und DIST3 den folgenden Befehl aus, wenn das Replikat als sekundäres Replikat lesbar ist:

    EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';
    

    Wenn ein Replikat nicht als sekundäres Replikat lesbar ist, führen Sie ein Failover durch, damit es zum primären Replikat wird. Führen Sie dann den folgenden Befehl aus:

    EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';
    

    Der Wert von @working_directory sollte mit dem im vorherigen Schritt identisch sein.

Workflow des Verlegers

Um den Verfügbarkeitsgruppenlistener der distribution-Datenbank als Verteiler hinzuzufügen, führen Sie auf PUB Folgendes aus:

EXEC sys.sp_adddistributor @distributor = 'DISTLISTENER', @password = '<distributor_admin password>' ;

Der Wert von @password sollte mit dem übereinstimmen, der angegeben wurde, als die Verteiler im Verteiler-Workflow konfiguriert wurden.

Entfernen von Verteiler und Verleger

In diesem Beispiel werden Verleger und Verteiler entfernt, während sich die Verteilungsdatenbank in der Verfügbarkeitsgruppe befindet.

Workflow des Verlegers

Löschen Sie auf PUB alle Abonnements und Veröffentlichungen für diesen Verleger, und rufen Sie sp_dropdistributor auf.

Workflow des Verteilers

In diesem Beispiel ist DIST1 das aktuelle primäre Replikat in der Verfügbarkeitsgruppe der distribution-Datenbank. DIST2 und DIST3 sind die sekundären Replikate.

  1. Führen Sie auf DIST2 und DIST3 Folgendes aus:

    EXEC sys.sp_dropdistpublisher @publisher = 'PUB', @no_checks = 1;
    
  2. Führen Sie auf DIST1 Folgendes aus:

    EXEC sys.sp_dropdistpublisher @publisher = 'PUB';
    
  3. Löschen Sie die Verfügbarkeitsgruppe.

  4. Ändern Sie auf DIST2 und DIST3 die distribution-Datenbank in den Modus „read_write“, indem Sie die Datenbank mithilfe der Wiederherstellung wiederherstellen.

    RESTORE DATABASE [distribution] WITH RECOVERY, KEEP_REPLICATION;
    
  5. Um die distribution-Datenbank zu löschen und das Momentaufnahmeverzeichnis beizubehalten, führen Sie Folgendes aus:

    EXEC sys.sp_dropdistributiondb @database = 'distribution' , @former_ag_secondary = 1;
    

Diese Prozedur entfernt alle zurückbleibenden Aufträge auf diesem Replikat.

  1. Um die distribution-Datenbank auf DIST1 zu löschen, führen Sie Folgendes aus:

    EXEC sys.sp_dropdistributiondb @database = 'distribution';
    
  2. Wenn keine anderen Verteilungsdatenbanken in der Verfügbarkeitsgruppe vorhanden sind, führen Sie sp_dropdistributor auf DIST1, DIST2 und DIST3 aus.

Hinzufügen eines Replikats zu der Verfügbarkeitsgruppe der Verteilungsdatenbank

In diesem Beispiel wird ein neuer Verteiler zu einer vorhandenen Replikationskonfiguration mit einer Verteilungsdatenbank in der Verfügbarkeitsgruppe hinzugefügt. In diesem Beispiel befindet sich in der Verfügbarkeitsgruppe eine vorhandene Verteilungsdatenbank. DIST1 und DIST2 sind die Verteiler, distribution ist die Verteilungsdatenbank in der Verfügbarkeitsgruppe, und PUB ist der Verleger. Fügen Sie DIST3 der Verfügbarkeitsgruppe als Replikat hinzu.

Workflow des Verteilers

  1. DIST3 sollte mit sp_adddistributor @@servername als Verteiler konfiguriert werden. Das Kennwort für distributor_admin sollte mithilfe des @password-Parameters angegeben werden. Das Kennwort sollte mit dem übereinstimmen, was für DIST1 und DIST2 angegeben wurde.

  2. Fügen Sie der Verfügbarkeitsgruppe für die aktuelle Verteilungsdatenbank DIST3 hinzu.

  3. Führen Sie auf DIST3 Folgendes aus:

    EXEC sys.sp_adddistributiondb @database = 'distribution';
    
  4. Führen Sie auf DIST3 den folgenden Befehl aus, wenn das Replikat als sekundäres Replikat lesbar ist:

    EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';
    

    Wenn das Replikat nicht als sekundäres Replikat lesbar ist, führen Sie ein Failover durch, damit es zum primären Replikat wird. Führen Sie dann den folgenden Befehl aus:

    EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';
    

    Der Wert von @working_directory sollte mit dem übereinstimmen, was für DIST1 und DIST2 angegeben wurde.

  5. Auf DIST3 müssen Sie Verbindungsserver zu den Abonnenten neu erstellen.

Entfernen eines Replikats aus der Verfügbarkeitsgruppe der Verteilungsdatenbank

In diesem Beispiel wird ein Verteiler aus einer aktuellen Verfügbarkeitsgruppe der Verteilungsdatenbank entfernt, wobei die übrigen Replikate in der Verteilungsdatenbank nicht betroffen sind. In diesem Beispiel befindet sich eine Verteilungsdatenbank in der Verfügbarkeitsgruppe. DIST1, DIST2 und DIST3 sind die Verteiler, distribution ist die Verteilungsdatenbank der Verfügbarkeitsgruppe, und PUB ist der Verleger. Entfernen Sie DIST3 aus der Verfügbarkeitsgruppe.

Workflow des Verteilers

  1. Stellen Sie sicher, dass DIST3 ein sekundäres Replikat für die Verfügbarkeitsgruppe der distribution-Datenbank ist.

  2. Entfernen Sie DIST3 aus der Verfügbarkeitsgruppe der distribution-Datenbank.

  3. Ändern Sie auf DIST3 die distribution-Datenbank in den Modus „read_write“, indem Sie die Datenbank mithilfe der Wiederherstellung wiederherstellen. Führen Sie beispielsweise den folgenden Befehl aus:

    RESTORE DATABASE distribution WITH RECOVERY, KEEP_REPLICATION;
    
  4. Um alle verwaisten Aufträge zu entfernen, führen Sie auf DIST3 Folgendes aus:

    EXEC sys.sp_dropdistpublisher @publisher = 'PUB', @no_checks = 1;
    
  5. Führen Sie auf DIST3 Folgendes aus:

    EXEC sys.sp_dropdistributiondb @database = 'distribution', @former_ag_secondary = 1;
    
  6. Führen Sie auf DIST3 Folgendes aus:

    EXEC sys.sp_dropdistributor;
    

Entfernen eines Verlegers aus der Verfügbarkeitsgruppe der Verteilungsdatenbank

In diesem Beispiel wird ein Verleger aus der aktuellen Verfügbarkeitsgruppe der Verteilungsdatenbank eines Verteilers entfernt, wobei die übrigen Verleger, die von dieser Verteilungsdatenbank bedient werden, nicht betroffen sind. In diesem Beispiel hat eine vorhandene Konfiguration eine Verteilungsdatenbank in einer Verfügbarkeitsgruppe. DIST1, DIST2 und DIST3 sind die Verteiler, distribution ist die Verteilungsdatenbank der Verfügbarkeitsgruppe, und PUB1 und PUB2 sind die Verleger, die von der distribution-Datenbank bedient werden. In diesem Beispiel wird PUB1 aus diesen Verteilern entfernt.

Workflow des Verlegers

Löschen Sie auf PUB1 alle Abonnements und Veröffentlichungen für diesen Verleger, und rufen Sie sp_dropdistributor auf.

Workflow des Verteilers

DIST1 ist das aktuelle primäre Replikat in der Verfügbarkeitsgruppe der distribution-Datenbank.

  1. Führen Sie auf DIST2 und DIST3 Folgendes aus:

    EXEC sys.sp_dropdistpublisher @publisher = 'PUB1',  @no_checks = 1;
    
  2. Führen Sie auf DIST1 Folgendes aus:

    EXEC sys.sp_dropdistpublisher @publisher = 'PUB1';
    
  3. Zu diesem Zeitpunkt kann es verwaiste Aufträge geben, die im Zusammenhang mit PUB1 auf DIST2 oder DIST3 stehen. Wann immer ein Failover auf DIST2 und DIST3 eintritt, werden alle verwaisten Aufträge, die zu allen Veröffentlichungen von PUB1 gehören, vom Monitor and sync replication agent jobs-Auftrag entfernt.

Hinzufügen eines Abonnements

In diesem Beispiel geht es um die ordnungsgemäße Konfiguration der Abonnenteninformationen auf Verteilern. In diesem Beispiel wird ein Abonnent hinzugefügt. DIST1 ist das aktuelle primäre Replikat in der Verfügbarkeitsgruppe und DIST2 und DIST3 die entsprechenden sekundären Replikate. Der Name des Abonnenten lautet SUB.

Workflow des Verlegers

Fügen Sie auf PUB einen Abonnementen so hinzu, wie Sie den Abonnenten SUB normalerweise hinzufügen würden.

Workflow des Verteilers

Fügen Sie auf DIST2 und DIST3 einen Verbindungsserver für SUB hinzu, wenn er zuvor noch nicht für DIST2 oder DIST3 registriert wurde. Es folgt ein Beispiel mit T-SQL-Code für die Erstellung eines Verbindungsservers:

EXEC master.dbo.sp_addlinkedserver@server =N'SUB', @srvproduct=N'SQL Server';
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin@rmtsrvname = N'SUB', @useself = N'True',@locallogin = NULL,@rmtuser =N ULL,@rmtpassword = NULL;

Hinzufügen eines Pullabonnements

Workflow des Abonnenten

Ein Pullabonnement für eine Veröffentlichung in der Verteilungsdatenbank in einer Verfügbarkeitsgruppe wird mithilfe des Namens des Verfügbarkeitsgruppenlisteners im @distributor-Parameter von sp_addpullsubscription_agent eingerichtet.

Beispiel-T-SQL-Code für die Erstellung einer Datenbank in einer Verfügbarkeitsgruppe

Das folgende Skript aktiviert eine Verteilungsdatenbank in einer Verfügbarkeitsgruppe.

--- WorkFlow to Enable Distribution Database In AG.

-- SECTION 1 ---- CONFIGURE THE DISTRIBUTOR SERVERS

-- Step1 - Configure the Distribution DB nodes (AG Replicas) to act as a distributor
:Connect SQLNode1
EXEC [sys].[sp_adddistributor]
    @distributor = @@SERVERNAME,
    @password = 'Pass@word1';
GO
:Connect SQLNode2
EXEC [sys].[sp_adddistributor]
    @distributor = @@SERVERNAME,
    @password = 'Pass@word1';
GO

-- Step2 - Configure the Distribution Database
:Connect SQLNode1
USE [master];
EXEC [sys].[sp_adddistributiondb]
    @database = 'DistributionDB',
    @security_mode = 1;
GO
ALTER DATABASE [DistributionDB] SET RECOVERY FULL;
GO
BACKUP DATABASE [DistributionDB] TO DISK = 'NUL';
GO
-- Step 3 - Create AG for the Distribution DB.
:Connect SQLNode1
USE [master];
GO
CREATE ENDPOINT [Hadr_endpoint]
    STATE = STARTED
    AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
    FOR DATA_MIRRORING (
        ROLE = ALL,
        AUTHENTICATION = WINDOWS NEGOTIATE,
        ENCRYPTION = REQUIRED ALGORITHM AES
    );
GO

:Connect SQLNode2
USE [master];
GO
CREATE ENDPOINT [Hadr_endpoint]
    STATE = STARTED
    AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
    FOR DATA_MIRRORING (
        ROLE = ALL,
        AUTHENTICATION = WINDOWS NEGOTIATE,
        ENCRYPTION = REQUIRED ALGORITHM AES
    );
GO

:Connect SQLNode1
-- Create the Availability Group
CREATE AVAILABILITY GROUP [DistributionDB_AG]
FOR DATABASE [DistributionDB]
REPLICA ON
N'SQLNode1' WITH (ENDPOINT_URL = N'TCP://SQLNode1.contoso.com:5022', 
	 FAILOVER_MODE = AUTOMATIC, 
	 AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
	 BACKUP_PRIORITY = 50, 
	 SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL), 
	 SEEDING_MODE = AUTOMATIC),
N'SQLNode2' WITH (ENDPOINT_URL = N'TCP://SQLNode2.contoso.com:5022', 
	 FAILOVER_MODE = AUTOMATIC, 
	 AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
	 BACKUP_PRIORITY = 50, 
	 SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL), 
	 SEEDING_MODE = AUTOMATIC);
GO


:Connect SQLNode2
ALTER AVAILABILITY GROUP [DistributionDB_AG] JOIN;
GO  
ALTER AVAILABILITY GROUP [DistributionDB_AG] GRANT CREATE ANY DATABASE;
GO

--STEP4 - Create the Listener for the Availability Group. This is very important.
:Connect SQLNode1

USE [master]
GO
ALTER AVAILABILITY GROUP [DistributionDB_AG]
ADD LISTENER N'DistributionDBList' (
WITH IP
((N'10.0.0.8', N'255.255.255.0')) , PORT=1500);
GO

-- STEP 5 - Enable SQLNode2 also as a Distributor
:Connect SQLNode2
EXEC sys.sp_adddistributiondb @database = 'DistributionDB', @security_mode = 1;
GO

--STEP 6 - On all Distributor Nodes Configure the Publisher Details 
:Connect SQLNode1
EXEC sys.sp_adddistpublisher @publisher = 'SQLNode4', @distribution_db = 'DistributionDB', 
	@working_directory = '\\sqlfileshare\Dist_Work_Directory\';
GO
:Connect SQLNode2
EXEC sys.sp_adddistpublisher @publisher = 'SQLNode4', @distribution_db = 'DistributionDB', 
	@working_directory = '\\sqlfileshare\Dist_Work_Directory\';
GO

-- SECTION 2 ---- CONFIGURE THE PUBLISHER SERVER
:Connect SQLNode4
EXEC sys.sp_adddistributor @distributor = 'DistributionDBList', -- Listener for the Distribution DB.	
	@password = 'Pass@word1';
GO

-- SECTION 3 ---- CONFIGURE THE SUBSCRIBERS 
-- On Publisher, create the publication as one would normally do.
-- On the Secondary replicas of the Distribution DB, add the Subscriber as a linked server.
:Connect SQLNode2
EXEC master.dbo.sp_addlinkedserver @server = N'SQLNODE5', @srvproduct = N'SQL Server';
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'SQLNODE5', @useself = N'True',
	@locallogin = NULL,@rmtuser = NULL,@rmtpassword = NULL;