Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
Ez a cikk bemutatja, hogyan állíthat be SQL Server replikációs terjesztési adatbázist always On rendelkezésre állási csoportban (AG).
Az SQL Server 2017 CU6 és az SQL Server 2016 SP2-CU3 az alábbi mechanizmusokkal támogatja a replikációs terjesztési adatbázist egy AG-ben:
- Az AG terjesztési adatbázisnak rendelkeznie kell egy figyelővel. Amikor a közzétevő hozzáadja a forgalmazót, a hallgató nevét használja a terjesztő neveként.
- A replikációs feladatok a figyelő nevét használják terjesztőnévként. A terjesztési szerveren létrehozott replikációs pillanatkép, naplóolvasó és terjesztési ügynöki (leküldéses előfizetési) feladatok létrejönnek a terjesztési adatbázis AG összes másodlagos replikáján.
Jegyzet
A lekéréses előfizetések terjesztési ügynöki feladatai nem a terjesztési kiszolgálón, hanem az előfizető kiszolgálón jönnek létre.
- Egy új feladat figyeli a terjesztési adatbázisok állapotát (elsődleges vagy másodlagos az AG-ben), és letiltja vagy engedélyezi a replikációs feladatokat a terjesztési adatbázisok állapota alapján.
Miután az AG-ben konfigurálták a terjesztési adatbázist az alábbi lépések szerint, a replikáció konfigurálása és a futó folyamatok megfelelően működhetnek a terjesztési adatbázis AG feladatátvétele előtt és után.
Támogatott forgatókönyvek
- Terjesztési adatbázis konfigurálása az AG-ben való belefoglaláshoz.
- Replikáció, például kiadványok és előfizetések konfigurálása az AG feladatátvétele előtt és után.
- A replikációs feladatok az átállás előtt és után is működnek.
- A replikáció eltávolítása a terjesztőnél és a közzétevőnél, ha a terjesztési adatbázis AG-ben van.
- Csomópontok hozzáadása vagy eltávolítása meglévő terjesztési adatbázis AG-hez.
- A forgalmazók több terjesztési adatbázissal is rendelkezhetnek. Minden terjesztési adatbázis lehet a saját AG-jében, vagy akár nem lehet bármilyen AG-ben. Több terjesztési adatbázis is megoszthat egy AG-t.
- A közzétevőnek és a terjesztőnek külön SQL Server-példányokon kell lennie.
- Ha a terjesztési adatbázist üzemeltető rendelkezésre állási csoport figyelője nem alapértelmezett port használatára van konfigurálva, akkor aliast kell beállítania a figyelőhöz és a nem alapértelmezett porthoz.
Korlátozások vagy kizárások
A helyi forgalmazó (ahol a Publisher-kiszolgáló is a terjesztő) nem támogatott. A Közzétevőnek és a Terjesztőnek külön SQL Server-példányoknak kell lenniük. Ezek a példányok ugyanazon csomópontkészleteken üzemeltethetők. A helyi disztribútor a következő okok miatt nem támogatott:
- Ha a Forgalmazó helyileg van konfigurálva, nem használhatja az "availability group listener"-t a forgalom Forgalmazóhoz irányítására, ami a feladatátvétel után a replikációs ügynökök meghibásodásához vezet.
- Ha egy helyi forgalmazó van konfigurálva, és a forgalmazó rendelkezésre állási csoport átvált az eredeti másodlagosra, a Publisher és a forgalmazó közötti kapcsolat helyiről távolira változik, ezért a replikációs tárolt eljárások és ügynökök sikertelenek lesznek.
Az Oracle-közzétevő nem támogatott.
Az egyesítési replikáció nem támogatott.
A tranzakciós replikáció azonnali vagy várólistán lévő frissítési előfizetővel nem támogatott.
A társközi replikáció nem támogatott az SQL Server 2019 (15.x) CU 17 előtt
A terjesztési adatbázis replikáit üzemeltető ÖSSZES SQL Server 2017-példánynak SQL Server 2017 CU 6 vagy újabb verziójúnak kell lennie.
A terjesztési adatbázis-replikákat üzemeltető ÖSSZES SQL Server 2016-példánynak SQL Server 2016 SP2-CU3 vagy újabb verziónak kell lennie.
A terjesztésiadatbázis-replikákat üzemeltető SQL Server-példányoknak azonos verziójúnak kell lenniük, kivéve a frissítés során eltelt szűk időkeretet.
A terjesztési adatbázisnak a teljes helyreállítási modellben kell lennie.
A helyreállításhoz és a tranzakciónaplók csonkolásának engedélyezéséhez konfigurálja a teljes és a tranzakciónapló biztonsági mentését.
A terjesztési adatbázis AG-jének konfigurált figyelővel kell rendelkeznie.
A terjesztési adatbázis AG másodlagos replikái lehetnek szinkronok vagy aszinkronok. A szinkron mód ajánlott és előnyben részesített.
A kétirányú tranzakciós replikáció nem támogatott.
Az SSMS nem mutatja a terjesztési adatbázist szinkronizálási állapotban vagy szinkronizáltnak, amikor a terjesztési adatbázis hozzá van adva egy rendelkezésre állási csoporthoz.
Jegyzet
A replikáció tárolt eljárásainak (például
sp_dropdistpublisher,sp_dropdistributiondb,sp_dropdistributor,sp_adddistributiondb,sp_adddistpublisher) végrehajtása előtt győződjön meg arról, hogy a másodlagos replika teljes mértékben szinkronizálva van.A terjesztési adatbázis AG-jében lévő összes másodlagos replikának olvashatónak kell lennie. Ha egy másodlagos replika nem olvasható, az SQL Server Management Studióban az adott másodlagos replika forgalmazói tulajdonságai nem érhetők el, de a replikáció továbbra is megfelelően működik.
A terjesztési adatbázis AG-jének minden csomópontjának ugyanazt a tartományi fiókot kell használnia az SQL Server Agent futtatásához, és ennek a tartományi fióknak minden csomóponton ugyanazzal a jogosultsággal kell rendelkeznie.
Ha a replikációs ügynökök proxyfiók alatt futnak, a proxyfióknak a terjesztési adatbázis AG-jének minden csomópontjában léteznie kell, és minden csomóponton ugyanazzal a jogosultsággal kell rendelkeznie.
Módosítsa a disztribútor vagy terjesztési adatbázis tulajdonságait a terjesztési adatbázis AG-ben részt vevő összes replikában.
Végezze el a replikációs feladatok módosítását az MSDB által tárolt eljárásokkal vagy az SQL Server Management Studióval a terjesztési adatbázis AG-ben részt vevő összes replikában.
Ha bármely ügynökhöz egyéni profilt használ, az eljárás
sp_add_agent_profilehasználatával manuálisan kell létrehozni minden másodlagos replikán. A profilnak minden replikán ugyanazzal az azonosítóval kell rendelkeznie. Ha a profil nem létezik a másodlagos replikán, a feladatátvétel után valószínűleg megsérülhet az elsődleges kulcs, és hibákat okozhat. A hibák megoldásához valószínűleg újra kell majd újrainicializálnia a kiadvány előfizetését.A terjesztő konfigurálását a kiadón szkriptek segítségével kell elvégezni. A replikációs varázsló nem használható. A replikációs varázslók és a tulajdonságlapok más célokra is támogatottak.
Az AG konfigurálása terjesztési adatbázisokhoz csak szkripteken keresztül végezhető el.
A terjesztési adatbázisok AG-ben való beállításának új replikációs konfigurációnak kell lennie. Meglévő terjesztési adatbázis AG-re váltása nem támogatott. Ha egy terjesztési adatbázist kivesznek egy AG-ből, az már nem működik érvényes terjesztési adatbázisként, ezért el kell dobni.
Konfigurációs architektúra
A cikkben szereplő példák a következő kiszolgálóneveket és -beállításokat használják.
- A DIST1, a DIST2, a DIST3 a forgalmazói kiszolgálók;
- A PUB közzétevő kiszolgáló;
- A terjesztési adatbázis AG-jének létrehozása után a figyelő neve DISTLISTENER;
- A DIST1 a terjesztési adatbázis AG kezdeti elsődleges replikája.
Forgalmazó, terjesztési adatbázis és közzétevő konfigurálása
Ez a példa egy új forgalmazót és közzétevőt konfigurál, és a terjesztési adatbázist egy AG-be helyezi.
Forgalmazók munkafolyamata
Konfigurálja a DIST1, a DIST2 és a DIST3 disztribútorként a
sp_adddistributor @@servername-val. Adja meg adistributor_admin-tól a@password-ig tartó jelszót. A@passwordazonosnak kell lennie a DIST1, a DIST2 és a DIST3 között.Hozza létre a
sp_adddistributiondbterjesztési adatbázist a DIST1-en. A terjesztési adatbázis nevedistribution. Módosítsadistributionadatbázis helyreállítási modelljét egyszerűről teljesre.Hozzon létre egy
distributionadatbázishoz tartozó AG-t replikákkal a DIST1-en, DIST2-n és DIST3-on. Lehetőleg az összes replika szinkron. Konfigurálja a másodlagos replikákat olvashatóvá, vagy engedélyezze az olvasást. Jelenleg a terjesztési adatbázisok az AG, a DIST1 az elsődleges replika, a DIST2 és a DIST3 pedig másodlagos replikák.Konfiguráljon egy
DISTLISTENERnevű figyelőt az AG számára.A helyreállításhoz és a tranzakciónaplók csonkolásának támogatásához konfigurálja a tranzakciónapló és teljes biztonsági mentéseket.
A DIST2 és a DIST3 rendszeren futtassa a következőt:
EXEC sys.sp_adddistributiondb @database = 'distribution';Ha a
PUB-t közzétevőként szeretné hozzáadni a DIST1-hez, futtassa a következőt:EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';A
@working_directoryértékének a DIST1, a DIST2 és a DIST3 hálózattól független hálózati útvonalnak kell lennie.A DIST2 és a DIST3 esetén, ha a replika olvasható másodlagosként, futtassa a következőt:
EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';Ha egy replika nem olvasható másodlagosként, hajtsa végre az átállást úgy, hogy a replika elsődlegessé váljon, és futtassa
EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';A
@working_directoryértékének meg kell egyeznie az előző lépésével.
Publisher-munkafolyamat
A distribution adatbázis AG-figyelőjének forgalmazóként való hozzáadásához futtassa a következő parancsot a PUB szerveren:
EXEC sys.sp_adddistributor @distributor = 'DISTLISTENER', @password = '<distributor_admin password>' ;
A @password értékének annak kell lennie, amit akkor adtak meg, amikor a forgalmazókat konfigurálták a forgalmazói munkafolyamatban.
Forgalmazó és közzétevő eltávolítása
Ez a példa eltávolítja a közzétevőt és a terjesztőt, ha a terjesztési adatbázis AG-ben van.
Publisher-munkafolyamat
Törölje ennek a közzétevőnek az összes előfizetését és publikációját a PUB-on, majd hívja a sp_dropdistributor-t.
Forgalmazók munkafolyamata
Ebben a példában a DIST1 a jelenlegi elsődleges distribution adatbázis-AG-nek. A DIST2 és a DIST3 másodlagos replikák.
A DIST2 és a DIST3 rendszeren futtassa a következőt:
EXEC sys.sp_dropdistpublisher @publisher = 'PUB', @no_checks = 1;A DIST1-en futtassa a következőt:
EXEC sys.sp_dropdistpublisher @publisher = 'PUB';Törölje az AG-t.
A DIST2 és a DIST3 esetén módosítsa a
distributionadatbázist read_write módra az adatbázis helyreállításával.RESTORE DATABASE [distribution] WITH RECOVERY, KEEP_REPLICATION;distributionadatbázis elvetéséhez és a pillanatkép könyvtárának megőrzéséhez futtassa a következőt:EXEC sys.sp_dropdistributiondb @database = 'distribution' , @former_ag_secondary = 1;
Ez az eljárás eltávolítja a replika összes függőben lévő feladatát.
Ha el szeretné dobni a
distributionadatbázist DIST1-en, futtassa a parancsot.EXEC sys.sp_dropdistributiondb @database = 'distribution';Ha az AG-ben nincsenek más terjesztési adatbázisok, futtassa a
sp_dropdistributora DIST1, a DIST2 és a DIST3 rendszeren.
Replika hozzáadása a terjesztési adatbázis AG-hez
Ez a példa egy új forgalmazót ad hozzá egy meglévő replikációs konfigurációhoz a terjesztési adatbázissal az AG-ben. Ebben a példában egy meglévő terjesztési adatbázis egy AG-ben található. A DIST1 és a DIST2 a forgalmazók, distribution az AG terjesztési adatbázisa, a PUB pedig a közzétevő. Vegye fel a DIST3-at replikaként az AG-be.
Forgalmazók munkafolyamata
A DIST3-t a
sp_adddistributor @@servernamesegítségével forgalmazóként kell konfigurálni. Adistributor_adminjelszavát @password paraméteren keresztül kell megadni. A jelszónak meg kell egyeznie a DIST1 és a DIST2 esetében megadott jelszóval.Adja hozzá a DIST3 AG-t az aktuális terjesztési adatbázishoz.
A DIST3-on futtassa a következőt:
EXEC sys.sp_adddistributiondb @database = 'distribution';A DIST3-on, ha a replika olvasható másodlagosként, futtassa a következőt:
EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';Ha a replika nem olvasható másodlagosként, végezze el a feladatátvételt úgy, hogy a replika legyen az elsődleges, és futtassa a következőt:
EXEC sys.sp_adddistpublisher @publisher = 'PUB', @distribution_db = 'distribution', @working_directory = '<network path>';A
@working_directoryértékének meg kell egyeznie a DIST1 és a DIST2 esetében megadott értékkel.A DIST3-on a csatolt kiszolgálókat újra létre kell hozni az előfizetők számára.
Replika eltávolítása a terjesztési adatbázis AG-jából
Ez a példa eltávolít egy forgalmazót egy aktuális terjesztési adatbázis AG-jából, miközben a terjesztési adatbázis AG többi replikáját nem érinti. Ebben a példában egy terjesztési adatbázis AG-ben található. A DIST1, a DIST2 és a DIST3 a forgalmazók, distribution az AG terjesztési adatbázisa, a PUB pedig a közzétevő. Távolítsa el a DIST3-at az AG-ből.
Forgalmazók munkafolyamata
Győződjön meg arról, hogy a DIST3 másodlagos a
distributionadatbázis-AG-hez.Távolítsa el a DIST3-t a
distributionadatbázis-AG-ből.A DIST3-on az adatbázis helyreállításával állítsa a
distributionadatbázist írási/olvasási módba. Futtassa például a következő parancsot:RESTORE DATABASE distribution WITH RECOVERY, KEEP_REPLICATION;Az árva feladatok eltávolítása a DIST3-futtatáson:
EXEC sys.sp_dropdistpublisher @publisher = 'PUB', @no_checks = 1;A DIST3-on futtassa a következőt:
EXEC sys.sp_dropdistributiondb @database = 'distribution', @former_ag_secondary = 1;A DIST3-on futtassa a következőt:
EXEC sys.sp_dropdistributor;
Közzétevő eltávolítása a terjesztési adatbázis AG-jából
Ez a példa eltávolít egy közzétevőt a forgalmazó aktuális terjesztési adatbázisának AG-jából, míg a terjesztési adatbázis AG által kiszolgált többi közzétevőre nincs hatással. Ebben a példában egy meglévő konfiguráció terjesztési adatbázissal rendelkezik egy AG-ben. A DIST1, a DIST2 és a DIST3 a forgalmazók, distribution az AG terjesztési adatbázisa, a PUB1 és a PUB2 pedig az distribution adatbázis által kiszolgált közzétevők. A példa eltávolítja a PUB1-et ezekből a forgalmazókból.
Publisher-munkafolyamat
A PUB1-en törölje a közzétevő összes előfizetését és kiadványát, majd hívja meg a sp_dropdistributor.
Forgalmazói munkafolyamat
A DIST1 a distribution adatbázis AG aktuális elsődleges adatbázis-gazdája.
A DIST2 és a DIST3 rendszeren futtassa a következőt:
EXEC sys.sp_dropdistpublisher @publisher = 'PUB1', @no_checks = 1;A DIST1-en futtassa a következőt:
EXEC sys.sp_dropdistpublisher @publisher = 'PUB1';Ezen a ponton a PUB1-hez kapcsolódó árva feladatok lehetnek a DIST2-n vagy a DIST3-on. Amikor feladatátvétel történik a DIST2-be és a DIST3-ba, a PUB1 összes kiadványához kapcsolódó árva feladatokat a
Monitor and sync replication agent jobsfeladat eltávolítja.
Előfizetés hozzáadása
Ez a példa az előfizetői adatok forgalmazók közötti megfelelő konfigurálásáról szól. A példa egy előfizetőt ad hozzá. A DIST1 a terjesztési adatbázis aktuális elsődleges replikája az AG-ben, a DIST2 és a DIST3 a terjesztési adatbázis másodlagos replikái az AG-ben. Az előfizető neve SUB.
Publisher-munkafolyamat
A PUB-n adja hozzá az előfizetést az előfizetőhöz SUB, ahogyan általában tenné.
Forgalmazói munkafolyamat
A DIST2-n és a DIST3-on adjon hozzá egy csatolt kiszolgálót a "SUB" számára, ha korábban még nem regisztrálta a DIST2 vagy a DIST3 szolgáltatásban. Az alábbiakban egy TSQL-minta található a csatolt kiszolgáló létrehozásához –
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;
Lekéréses előfizetés hozzáadása
Előfizetői munkafolyamat
Ha lekéréses előfizetést szeretne hozzáadni egy kiadványhoz a terjesztési adatbázissal egy AG-ben, használja az AG-figyelő nevét a sp_addpullsubscription_agent@distributor paraméterében.
T-SQL-minta terjesztési adatbázis létrehozása az AG-ben
Az alábbi szkript egy rendelkezésre állási csoportban engedélyezi a terjesztési adatbázist.
--- 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;