SQL Server-replicatie is een van de functies voor gegevenssynchronisatie die wordt gebruikt om de SQL Server-databaseobjecten en -gegevens te kopiëren en te distribueren tussen de databases die zich in hetzelfde SQL Server-exemplaar of in verschillende instanties bevinden en deze tussen deze databases te synchroniseren om het in een consistente staat.
SQL Server-replicatiecomponenten
SQL Server Replicatie bestaat uit de onderstaande hoofdcomponenten:
- Artikelen :De databasetabel, opgeslagen procedures of views die worden beschouwd als de basiseenheid van de SQL Server-replicatie.
- Distributeur :De SQL Server-instantie die de Distributie . bevat database, waarin de replicatiemetadata en geschiedenis zijn opgeslagen. Houd er rekening mee dat de Publisher aan slechts één Distributeur kan worden toegewezen, maar dat de Distributeur meerdere Publishers kan bedienen.
- Uitgever :Het SQL Server-exemplaar dat de brondatabase bevat en de gegevens beschikbaar stelt om te worden gedistribueerd naar de andere locaties.
- Abonnee :De SQL Server-instantie die de SQL-replicatiegegevens van de uitgever(s) ontvangt en deze toepast op de doeldatabase, en de gegevenswijzigingen in sommige replicatietypen teruggeeft aan de uitgever.
- Replicatie Snapshot Agent :Deze agent is verantwoordelijk voor de initiële synchronisatie in alle replicatietypen die een volledige kopie van de Publisher-databaseartikelen aan de Abonnee levert.
- Log Reader-agent :Deze agent wordt gebruikt om de transacties van de uitgever naar de abonnee continu te repliceren in de transactiereplicatie, door het transactielogboek van de brondatabase te lezen.
- Distributieagent :Deze agent wordt gebruikt om de initiële momentopname toe te passen op de doeldatabase en om de continue gegevenswijzigingen bij te houden en toe te passen op de doeldatabase. Deze agent wordt alleen gebruikt met de transactie- en momentopname-replicaties.
- Agent samenvoegen :Deze agent is verantwoordelijk voor het kopiëren van de wijzigingen van de Abonnee naar de Uitgever, en kopieer vervolgens alle wijzigingen van de Uitgever naar de Abonnee, op beide manieren. Deze agent wordt alleen gebruikt met de Merge-replicatie.
SQL Server-replicatietypen
SQL Server biedt ons verschillende soorten replicatie die kunnen worden gebruikt voor gegevensdistributie, op basis van de vereisten voor gegevenssynchronisatie. Alle typen SQL-replicatie starten de initiële synchronisatie tussen de uitgever en de abonnee door een momentopname van de volledige gegevens van de uitgever naar de abonnee te kopiëren. Deze typen SQL Server-replicatie omvatten:
- Transactionele replicatie :In dit replicatietype worden alle wijzigingen die aan de uitgeverszijde worden uitgevoerd, direct aan de abonneezijde geleverd en toegepast. Een voorbeeld van de Transactionele Replicatie is het scenario voor gegevensintegratie tussen verschillende sites.
- Snapshot-replicatie :In dit replicatietype wordt een snapshot genomen van de Publisher en eenmalig toegepast op de Abonnee, zonder de continue wijzigingen na de snapshot te verspreiden, tot de volgende synchronisatie plaatsvindt, waarbij een nieuwe snapshot wordt gekopieerd en opnieuw op de Abonnee wordt toegepast.
- Replicatie samenvoegen :In dit replicatietype kunnen wijzigingen worden uitgevoerd en gesynchroniseerd aan zowel de uitgevers- als de abonneezijde en worden gesynchroniseerd wanneer de abonnee is verbonden met het netwerk. Een voorbeeld van het gebruik van Merge Replication is het uitwisselen van gegevens tussen gebruikers van Point of Sale-applicaties.
- Peer-to-peer-replicatie :Een speciaal type Transactionele Replicatie waarbij de Publisher de gegevenswijzigingen tegelijkertijd naar meerdere Abonnees distribueert.
- Bidirectionele replicatie :Een ander speciaal type Transactionele Replicatie waarbij beide servers fungeren als Publisher en Abonnee en gegevens tussen elkaar uitwisselen.
Vereisten voor SQL Server-replicatie
Voordat we de SQL-replicatiesite instellen en configureren, moeten we ervoor zorgen dat de volgende punten worden gecontroleerd:
- Het onderdeel SQL Server-replicatie is geïnstalleerd op alle deelnemende servers, de uitgever, de abonnee en de distributeur. Dit moet worden geïnstalleerd tijdens de installatie van het SQL Server-exemplaar of later worden toegevoegd aan het bestaande SQL-exemplaar met behulp van de wizard SQL Server-installatie, zoals hieronder:
- Er is voldoende ruimte op de servers voor het maken van snapshots, de gepubliceerde databasegegevens in de abonnee en de groei van het transactielogboek van de Publisher-database.
- De SQL Server Agent is actief, zodat de SQL Server-replicatieagenten de gerelateerde SQL Agent-taken kunnen maken en dat de taken zonder problemen worden uitgevoerd.
- Er is voldoende netwerkbandbreedte tussen de deelnemende SQL Server-instanties.
- De Publisher-, Distributor- en Subscriber-instanties kunnen elkaar bereiken en de TCP-poorten waarnaar deze SQL-instanties luisteren, worden geopend in de firewallregels. Met andere woorden, we kunnen verbinding maken met elke SQL-instantie van de andere instanties zonder netwerk- of verbindingsproblemen.
- De uitgeversdatabase-artikelen die worden gerepliceerd, moeten een eerder gedefinieerde primaire sleutelbeperking hebben om de uniekheid van de gegevens te behouden.
- Het account dat zal worden gebruikt om de replicatiesite te maken en de replicatieagenten uit te voeren, moet ten minste lid zijn van de vaste databaserol db_owner op zowel de Publisher-, Distributor- als Subscriber-databases, naast de lees- en schrijfmachtigingen op de snapshot-map.
Aan de slag
In dit artikel laten we zien hoe u het type Transactionele replicatie kunt gebruiken om de AdventureWorks2017-databasetabellen tussen twee SQL Server-instanties te repliceren; SQL1 instantie die zal fungeren als distributeur en uitgever, en de SQL2 instantie die zal fungeren als Abonnee.
De transactiereplicatie van SQL Server wordt in drie stappen geconfigureerd:
- Configureer de distributeur.
- Configureer de uitgever.
- Configureer de abonnee
Laten we deze stappen in detail bespreken.
Configureer de distributeur
Om de distributeur te configureren, maakt u verbinding met de “SQL1 ” SQL Server-instantie die zal fungeren als een distributeur, wat dezelfde Publisher-instantie is in ons voorbeeld hier, blader door het replicatieknooppunt in de SSMS Object Explorer, klik met de rechtermuisknop op de Replicatie knooppunt en kies de Distributie configureren … optie, zoals hieronder getoond:
Het eerste venster dat wordt weergegeven in de wizard Distributie configureren, is de startwizard, die de lijst met acties samenvat die binnen die wizard worden uitgevoerd. Klik op Volgende om verder te gaan:
In het volgende venster wordt u gevraagd om te selecteren welk exemplaar van SQL Server als distributeur zal fungeren. Het biedt u de mogelijkheid om het huidige SQL Server-exemplaar als distributeur te selecteren en de distributiesysteemdatabase op dat exemplaar te maken, of om een ander SQL Server-exemplaar op te geven dat als distributeur moet worden gebruikt. In dit scenario gebruiken we de huidige SQL1-instantie als distributeur. Selecteer de optie die aan uw ontwerpplan voldoet en klik vervolgens op Volgende om door te gaan:
Aangezien de SQL Server Agent-service een cruciale rol speelt in het SQL Server-replicatieproces, waarbij voor elke replicatie-agent een SQL Server-agenttaak wordt gemaakt, wordt aanbevolen om de opstartmodus te wijzigen als de SQL Server Agent-service van Handmatig (standaard ) automatisch te zijn. Zodat het automatisch start wanneer de SQL Server opnieuw wordt opgestart, zonder het risico te lopen te vergeten het handmatig te starten. Deze wizard biedt u de mogelijkheid om de opstartmodus van SQL Server Agent Service automatisch te wijzigen, rekening houdend met het feit dat de SQL Server-serviceaccount beheerdersbevoegdheden op die server heeft om die actie uit te voeren. In ons geval voeren we die wijziging handmatig uit. Klik op Volgende om verder te gaan:
Daarna zal de wizard u vragen om de map op te geven waar de initiële synchronisatiemomentopname wordt gemaakt. Specificeer een map op de schijf die voldoende ruimte heeft en klik vervolgens op Volgende om door te gaan:
In het volgende venster wordt u gevraagd om de naam van de distributiedatabase op te geven en de locatie waar de gegevens en logbestanden voor die database moeten worden opgeslagen. Geef uw aangepaste naam en locatie op of behoud de standaardinstellingen en klik vervolgens op Volgende om verder te gaan:
Daarna moet u de lijst met SQL Server-instanties selecteren die zullen fungeren als uitgevers en de metagegevens ervan opslaan in die distributiedatabase. Als u een vooraf gedefinieerde topologie heeft, voegt u alle kandidaat-uitgevers toe en klikt u op Volgende om door te gaan:
Kies in het volgende venster de acties die door die wizard worden uitgevoerd, of u de distributie rechtstreeks wilt configureren, een scriptbestand wilt genereren voor de genoemde configuratiestappen of beide. In ons scenario zullen we de distributie rechtstreeks configureren. Klik op Volgende om verder te gaan:
Bekijk in het venster De wizard voltooien alle selecties die u eerder hebt uitgevoerd en zorg ervoor dat deze selecties niet worden gewijzigd en klik vervolgens op Voltooien om het configuratieproces te starten:
Wanneer het distributieconfiguratieproces met succes is voltooid, zal de wizard u op de hoogte stellen met een groen vinkje naast elke actie. Als er zich een probleem voordoet, wordt een zinvolle foutmelding weergegeven om het probleem op te lossen en de configuratie opnieuw te herhalen. Omdat we alle acties met succes hebben voltooid, Sluiten de configuratiewizard:
Als u het knooppunt Systeemdatabases uitvouwt in de SSMS-objectverkenner, ziet u dat er een nieuwe distributiesysteemdatabase wordt gemaakt die zal worden gebruikt om de metagegevens van SQL Server-replicatie op te slaan, zoals hieronder weergegeven:
De uitgever configureren
Na het configureren van de distributeur, is de volgende stap het configureren van de uitgever die fungeert als de gegevensbron voor de andere sites.
Om de Publisher te configureren, maakt u verbinding met het SQL Server-exemplaar dat de te publiceren database bevat, bladert u door het SQL Server-replicatieknooppunt onder de Objectverkenner, klikt u met de rechtermuisknop op het knooppunt Lokale publicaties en kiest u Nieuwe publicatie … optie, zoals hieronder:
Het eerste venster in de wizard Nieuwe publicatie is de startpagina, die de lijst met acties toont die onder die wizard worden uitgevoerd. Nadat je hebt gelezen hoe deze wizard je zal helpen, klik je op Volgende om door te gaan:
Op de volgende pagina wordt u gevraagd om de database te selecteren die voor de abonnees zal worden gepubliceerd, de AdventureWorks2017-database in onze demo hier. Klik op Volgende om verder te gaan:
Daarna wordt u gevraagd om het type publicatie te selecteren dat u kunt gebruiken. We hebben eerder in dit artikel de lijst met SQL Server-replicatietypen besproken die in SQL Server worden geleverd. In deze demo gebruiken we de Transactionele publicatie type. Klik op Volgende om door te gaan:
Op de pagina Artikelen kunt u de lijst met databaseobjecten selecteren die u naar de abonnees wilt repliceren. U hebt de keuze om alle beschikbare objecten onder elk type te kiezen of om het type object uit te breiden en de lijst met te repliceren objecten te selecteren. In deze demo zullen we alle databasetabellen repliceren naar de abonnees. Nadat u de selectie van het object heeft bekeken, klikt u op Volgende om verder te gaan:
Met SQL Server kunt u ook filters toevoegen voor de geselecteerde databaseobjecten en alleen de gegevens repliceren die voldoen aan de criteria voor toegevoegde filters. Als u van plan bent de hele tabelrijen te repliceren, slaat u deze pagina over door op Volgende . te klikken knop:
Geef op de pagina Snapshot Agent op of u van plan bent om de initiële synchronisatie-snapshot onmiddellijk te maken, of u deze later wilt uitvoeren of handmatig wilt uitvoeren wanneer u de replicatie-instellingen voltooit. In deze demo zal ik een momentopname maken na het voltooien van de SQL Server-replicatie-installatie. Klik op Volgende om door te gaan:
Daarna wordt u gevraagd om het account te configureren dat wordt gebruikt om de Snapshot Agent en de Log Reader Agents uit te voeren. Deze gebruiker moet ten minste de machtiging db_owner hebben voor de Publisher-, Distributor- en Subscriber-database, naast de lees- en schrijfmachtigingen voor de snapshotmap. U kunt ook het SQL Agent Service-account gebruiken om deze SQL Server-replicatieagenten uit te voeren, wat uit veiligheidsoverwegingen niet wordt aanbevolen. Geef het geautoriseerde account op en klik op Volgende om door te gaan:
Selecteer op de pagina Wizard-acties de acties die worden uitgevoerd na het voltooien van deze wizard, waaronder het maken van de publicatie en het genereren van een scriptbestand om de publicatie later te maken of gebruik dit script als sjabloon voor andere servers. In deze demo kiezen we voor De publicatie maken en klik vervolgens op Volgende om verder te gaan:
De laatste pagina is de Voltooi de wizard, waarin u de naam van de publicatie moet opgeven en uw keuzes in deze wizard moet bekijken, en vervolgens op Voltooien moet klikken. om door te gaan met het maken van de publicatie:
Zodra de wizard voor het maken van publicaties is voltooid, wordt het resultaat weergegeven van het proces voor het maken van de publicatie en of het proces met groene vinkjes is voltooid of is mislukt bij een specifieke stap met een betekenisvolle foutmelding. In deze demo is de publicatie probleemloos gemaakt, zoals hieronder wordt weergegeven:
Om te controleren of de publicatie met succes is gemaakt, vouwt u het knooppunt Lokale publicaties uit onder het knooppunt SQL Server-replicatie van de SSMS-objectverkenner en controleert u de nieuw gemaakte publicatie. U kunt de publicatie-instellingen ook bekijken en wijzigen vanaf die pagina met publicatie-eigenschappen. De publicatie zal zijn als:
Configureer de abonnee
Voor nu hebben we de uitgever en de distributeur met succes geconfigureerd, het is tijd om de abonnee te configureren, die fungeert als gegevensdoel en de gegevens van de abonnee te ontvangen.
Om de abonnee te configureren, vanuit hetzelfde Publisher-exemplaar, vouwt u het knooppunt SQL Server-replicatie uit onder de SSMS-objectverkenner, klikt u met de rechtermuisknop op het knooppunt Lokale abonnementen en selecteert u de Nieuwe abonnementen … optie, zoals hieronder getoond:
Het eerste venster dat wordt weergegeven in de wizard Nieuw abonnement is de startpagina, die laat zien hoe deze wizard u helpt bij het configureren van de abonnee. Klik op Volgende om verder te gaan:
De eerste stap bij het configureren van de Abonnee is het selecteren van de Uitgever waarvoor de Abonnee wordt gemaakt en de publicatiedatabase die zal fungeren als de gegevensbron voor die Abonnee. Selecteer de publicatiedatabase uit de vermelde databases en klik vervolgens op Volgende om door te gaan:
Daarna wordt u gevraagd om aan te geven of u alle agenten aan de Distributeur-kant wilt uitvoeren en de wijzigingen naar de Abonnee wilt sturen, zodat het replicatiesynchronisatieproces gecentraliseerd wordt beheerd, of dat u elke agent op zijn eigen Abonnee wilt uitvoeren die de wijzigingen van de Uitgever haalt. , waardoor de verwerkingsoverhead aan de kant van de distributeur wordt verminderd en elke abonneesynchronisatie afzonderlijk kan worden beheerd. In deze demo kiezen we voor een push-abonnement en klikken we op Volgende om door te gaan:
In het volgende venster moet u de Subscriber SQL Server-instantie en de Subscription-doeldatabase toevoegen, met de mogelijkheid om die database te maken als deze niet bestaat, zoals hieronder weergegeven:
Geef op de pagina Distribution Agent Security het account op waaronder de Distribution Agent wordt uitgevoerd om het synchronisatieproces uit te voeren en het account dat wordt gebruikt om verbinding te maken met zowel de Distributor- als de Subscriber SQL Server-instanties. Het wordt aanbevolen om een geautoriseerd domeinaccount op te geven met toestemming voor zowel de distributeur als de abonnee, met de mogelijkheid om de SQL Agent Service-account te gebruiken om verbinding te maken met de distributeur en de abonnee, wat vanuit veiligheidsoogpunt niet wordt aanbevolen. Nadat u het geautoriseerde beveiligingsaccount heeft opgegeven, klikt u op Volgende om door te gaan:
Geef op de volgende pagina van de wizard Nieuw abonnement het synchronisatieschema voor elke agent op. Behoud de standaardinstelling als u wilt dat de synchronisatie continu wordt uitgevoerd en klik vervolgens op Volgende om door te gaan:
Daarna kunt u aangeven of u de abonnementen wilt initialiseren met een momentopname uit de publicatie en wanneer u dat initialisatieproces moet uitvoeren. In deze demo kiezen we ervoor om het abonnement te initialiseren bij de eerste synchronisatie, zoals hieronder weergegeven:
In het venster Wizard-acties kunt u kiezen welke acties aan het einde van deze wizard moeten worden uitgevoerd. Deze wizard biedt u bijvoorbeeld de mogelijkheid om de geconfigureerde abonnement(en) te maken en een scriptbestand te genereren om de abonnementen later of in een andere SQL Server-instantie te maken, als volgt:
Daarna geeft de wizard u een overzicht van alle configuraties die u in die wizard hebt geselecteerd om deze te verifiëren voordat u de abonnementsconfiguratie start. Als alle selecties goed zijn, klikt u op Voltooien om het configuratieproces te starten:
Als het aanmaken van het abonnement succesvol is voltooid, zal de wizard ons op de hoogte stellen met een groen vinkje voor elke voltooide actie of ons een zinvolle foutmelding geven in geval van een mislukking, zoals hieronder weergegeven:
Om te controleren of het Abonnement met succes is gemaakt, vouwt u onder het knooppunt Replicatie van de SSMS Object Explorer de eerder gemaakte publicatie uit en ziet u alle abonnementen die zijn verbonden met die uitgever en ontvangt u er gegevens van, zoals hieronder weergegeven:
Maak initiële synchronisatiemomentopname
Als u er niet voor heeft gekozen om een eerste synchronisatiemomentopname te maken tijdens het maken van de Publisher, kunt u de momentopname nog steeds maken na het configureren van de replicatiecomponenten.
Om een eerste synchronisatiemomentopname te maken, klikt u met de rechtermuisknop op de gemaakte publicatie en kiest u Status momentopname agent bekijken optie. Klik in het geopende venster op de knop Start om de snapshot-agent uit te voeren en de initiële synchronisatie-snapshot te maken. U kunt ook de voortgang van het proces voor het maken van snapshots volgen totdat de snapshot van alle artikelen met succes is gemaakt, zoals hieronder:
Bewaak de synchronisatie
Zodra de momentopname van de gerepliceerde artikelen is gemaakt, start het synchronisatieproces met de Abonnee automatisch door alle artikelen van die momentopname naar de Abonnee te schrijven. Om het synchronisatieproces te volgen, klikt u met de rechtermuisknop op het abonnement onder de SQL Server Replicatie knooppunt van de SSMS Object Explorer en kies de Synchronisatiestatus weergeven optie, waar het u het aantal transacties en opdrachten toont die op de Abonnee zijn uitgevoerd, zoals hieronder weergegeven:
Bovendien kunt u de status van alle replicatieagenten en het aantal opdrachten dat in behandeling is aan de kant van de distributeur en niet zijn toegepast op de kant van de abonnee controleren door met de rechtermuisknop op de publicatienaam te klikken en het venster Replicatiemonitor starten te kiezen, zoals hieronder weergegeven:
Laten we, om te controleren of de replicatiesite goed werkt, een nieuw record toevoegen aan een van de gerepliceerde artikelen, de tabel 'Werknemers', aan de uitgeverszijde, die niet beschikbaar is aan de abonneezijde, dan ziet u op de replicatiemonitor venster dat een nieuw record wordt afgeleverd van de uitgever aan de distributeur en vervolgens aan de abonnee. Daarna zult u zien dat het nieuwe record beschikbaar is in de Medewerker-tabel aan de Abonnee-kant, zoals hieronder duidelijk wordt weergegeven:
Met duidelijke en gemakkelijke stappen hebben we een complete transactiereplicatiesite gebouwd die gesynchroniseerd is en prima werkt. In het volgende artikel zullen we zien hoe u problemen oplost met een bestaande SQL Server-replicatiesite. Blijf op de hoogte.