sql >> Database >  >> RDS >> Oracle

Heterogene databasereplicatie configureren – SQL Server naar Oracle

Inleiding

SQL Server-replicatie is een SQL Server-functie waarmee we gegevens van de ene instantie naar de andere kunnen overbrengen voor doeleinden zoals het consolideren van gegevens in een rapportageomgeving of migraties. Persoonlijk zou ik SQL Server-replicatie niet beschouwen als een technologie met hoge beschikbaarheid, ook al beschouwen sommige mensen het wel.

SQL Server-replicatie gebruikt termen die vergelijkbaar zijn met die in de uitgeverswereld om de manier te beschrijven waarop gegevens van bron tot bestemming worden verwerkt. De belangrijkste termen zijn als volgt:

  • Uitgever – een SQL Server-instantie die gegevens beschikbaar stelt om te worden gerepliceerd naar andere instanties (verpakt als publicaties).
  • Publicatie - een eenheid die klaar is om te worden doorgegeven aan de ontvangende instantie, samengesteld uit een verzameling artikelen die in feite database-objecten zijn.
  • Distributeur - een SQL Server-instantie die verantwoordelijk is voor het opslaan van gegevens die zijn gekoppeld aan een of meer uitgevers in een database die een distributiedatabase wordt genoemd . Een lokale distributeur wordt opgeslagen in dezelfde instantie als de uitgever terwijl een Externe distributeur bevindt zich in een ander exemplaar.
  • Abonnee – een instantie die een gerepliceerde database ontvangt. Een abonneeabonnement is een verzoek om een ​​publicatie-exemplaar dat het verwacht te ontvangen van de uitgever.
  • Momentopname.

In het artikel ga ik een paar punten delen die ik heb geleerd van het configureren van de SQL Server-replicatie om een ​​heterogene abonnee te ondersteunen. Ik zal een publicatie maken en vervolgens een Oracle-abonnement dat afhankelijk is van deze publicatie. Ik zal ook een paar punten demonstreren samen met de stroom van het proces die erg belangrijk zijn voor het oplossen van problemen.

De stappen om een ​​snapshot-replicatiesessie te configureren zijn als volgt:

  1. Een distributeur configureren
  2. Configureer een uitgever (samen met de publicatie inclusief de artikelen die worden gepubliceerd)
  3. Een abonnee configureren

Ik zal een korte uitleg van elke stap geven.

Een distributeur configureren

Een distributeur is een instantie die verantwoordelijk is voor het opslaan van informatie die tijdens de replicatie wordt gebruikt. Wanneer u voor de eerste keer probeert een publicatie in de instance te maken, stelt SQL Server u voor om een ​​distributeur te configureren. In dit artikel is onze distributeur een lokale distributeur .

Een publicatie maken

Laten we de database identificeren die de objecten bevat die we willen repliceren. Dit wordt een Publicatiedatabase .

Volg de instructies op de onderstaande schermafbeeldingen om een ​​publicatiedatabase te maken.

Met deze stap kunt u een type publicatie selecteren dat u wilt configureren. Elk publicatietype wordt beschreven in het onderste deelvenster. Omwille van de eenvoud en compatibiliteit kiezen we voor een snapshot-publicatie. Houd er rekening mee dat we van plan zijn objecten te repliceren naar een Oracle-instantie. In dit geval Transactioneel en Snapshot-publicaties worden ondersteund. Er zijn andere goede use-cases voor een peer-to-peer- en merge-replicatie.

Bij deze stap kiezen we de artikelen die we willen publiceren. Met SQL Server kunnen we vier belangrijke objecttypen publiceren, zoals:

  1. Tafels
  2. Opgeslagen procedures
  3. Beelden
  4. Door gebruiker gedefinieerde functies

Zoals je kunt zien, gaan we twee tabellen publiceren:Orders en OrderLines. Om de flexibiliteit van SQL Server-replicatie te demonstreren, filteren we de records zoals hieronder weergegeven.
Opmerking: We zijn geïnteresseerd in een aantal OrderID's dat groter is dan 1000.

Om ongewenste rijen uit te sluiten van gepubliceerde tabellen, klikt u op Toevoegen… en dan Volgende .

De onderstaande schermafbeeldingen laten zien hoe u kolommen filtert voor de OrderLines-tabel.

Configureer vervolgens de eigenschappen van de momentopnameagent. We definiëren een initiële momentopname en het interval waarin een nieuwe momentopname wordt gegenereerd. De gegevens die bij deze stap worden geëxtraheerd, worden opgeslagen in een map die is opgegeven bij de eerste configuratie van de distributeur.

Stel eerst een schema in voor het starten van een snapshot-agent. Klik op Volgende .

Specificeer voor elke snapshot-agent het account waaronder deze zal worden uitgevoerd.

Configureer vervolgens de beveiligingsinstellingen van de Snapshot Agent. De tabel Beveiligingsinstellingen opent een ander venster waarin we definiëren wie het Snapshot Agent-proces uitvoert en bepalen welke inloggegevens voor SQL Server moeten worden verbonden met de uitgever. Er zijn bepaalde machtigingen vereist door deze principes, die een beetje onbetrouwbaar kunnen zijn in productie. Het gebruik van de SQL Server Agent Service-account is een tijdelijke oplossing om complicaties te voorkomen, maar wordt NIET door Microsoft aanbevolen.

Tegen het einde moet u beslissen of u de configuratie als script wilt opslaan voor later gebruik of de publicatie onmiddellijk wilt maken.

De volgende stap (Fig. 16) geeft een overzicht van alle opties die u hebt geselecteerd. Het wordt aanbevolen om een ​​snelle beoordeling te maken voordat u op Voltooien . klikt knop.

Het proces Publicatie maken begint. U kunt op Stoppen . klikken om het proces te onderbreken.

Zodra het proces is voltooid, wordt uw publicatie zichtbaar in het deelvenster Objectverkenner in SQL Server Management Studio.

Een abonnee toevoegen

Een abonnee ontvangt publicaties die beschikbaar zijn gesteld door de Uitgever . Het exemplaar van de publicatie dat aan een abonnee moet worden bezorgd, wordt een Abonnement genoemd . Een uitgever kan veel abonnees hebben. Elke
abonnee ontvangt de artikelen die door deze uitgever zijn gepubliceerd als een eenheid die wat de uitgever betreft de publicatie wordt genoemd en wordt beschouwd als het abonnement op de abonnee.

Door een abonnement aan te maken, vertellen we de uitgever eenvoudig:"Ik wil exemplaren van deze publicatie hebben". Net zoals een uitgever veel publicaties kan hebben, kunnen er ook veel abonnees zijn op één
publicatie. De relatie tussen uitgevers en abonnees is dus een een-op-veel-relatie.

Met de New Subscription Wizard kunnen we beslissen op welke publicatie we ons willen abonneren. We kunnen kiezen uit een lijst van eerder gemaakte publicaties zoals weergegeven in Fig. 20.

Vervolgens beslissen we of we een Push Abonnement willen voeren in plaats van een Pull Abonnement. Hoewel een Pull-abonnement beter is voor de prestaties wanneer u meerdere abonnees in gedachten heeft, zal het niet
werken voor een heterogene databasereplicatie. Niet-SQL Server-abonnees moeten een Pull-abonnement gebruiken. Het is vermeldenswaard dat de artikelen die in dit scenario worden gepubliceerd, ook beperkt zijn tot tabellen en geïndexeerde weergaven.

Voeg een Oracle-abonnee toe met behulp van een gegevensbronnaam (DSN). Deze DSN moet al zijn gemaakt, getest en werken om verbinding te kunnen maken met de Oracle-instantie via Oracle Net. Dit betekent dat u een Oracle-client nodig hebt die is geïnstalleerd op de SQL Server-host met een ingang naar een bestand met de naam tnsnames.ora het definiëren van de bestemming van de verbinding. Deze TNS-invoer wordt op zijn beurt gebruikt om de naam van de gegevensbron te configureren waar de wizard Nieuw abonnement in dit stadium om vraagt.

Het item dat ik heb gemaakt in mijn tnsnames.ora-bestand ziet er als volgt uit:

ORCL10G =
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = IGIRI-LP)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl10g)
    )
 )

Het gemarkeerde gedeelte is de alias, terwijl de andere details de bestemming van de verbinding definiëren. We kunnen bevestigen of dit item correct werkt en of mijn Oracle-omgevingsvariabelen correct zijn geconfigureerd met behulp van de tnsping hulpprogramma zoals hieronder weergegeven.

Na bevestiging wordt deze TNS-invoer gebruikt om de DSN te configureren die we willen gebruiken. Onze TNS-servicenaam heet ORCL10G terwijl de DSN ORCLDC . wordt genoemd . Dit is de DSN die we gebruiken in de wizard Nieuw abonnement.

Merk op dat we de 64-bits versie van ODBC hebben gebruikt om de DSN te configureren en dat het een systeem-DSN is, geen gebruikers-DSN. De configuratie is niet afhankelijk van wie er op de computer is ingelogd.

Selecteer een abonneetype dat moet worden toegevoegd en voer de naam van de gegevensbron in. Klik op OK .

Kies een of meerdere abonnees en specificeer een database voor elk abonnement.

Zodra de DSN is toegevoegd, kunnen we doorgaan met het configureren van de beveiliging van de distributieagent. We komen erachter dat dit vergelijkbaar is met het geval toen we een Snapshot Agent Security . configureerden in de wizard Nieuwe publicatie.

Hier hebben we echter een sectie waar we een verbinding tot stand brengen met de Abonnee in plaats van naar de Uitgever (denk eraan dat dit een push-abonnement is). Dit gebruikersaccount moet zijn gemaakt op de Oracle-instantie en moet rechten hebben om tabellen en quota te maken op de standaardtabelruimte (hier hebt u mogelijk een Oracle DBA nodig).

Voeg parameters toe aan de beveiliging van de distributieagent en klik op OK .

Specificeer de account- en verbindingsopties voor elke distributieagent en klik op Volgende .

Definieer het synchronisatieschema voor elke agent. In ons geval hebben we ervoor gekozen om continu te synchroniseren. Klik op Volgende .

Selecteer de optie om het abonnement onmiddellijk te initialiseren, wat betekent dat ALLE gegevens die beschikbaar zijn in de map Snapshot opnieuw moeten worden gekopieerd. Het wordt aanbevolen voor NoSQL Server-abonnees om het abonnement opnieuw te initialiseren wanneer nieuwe artikelen aan de publicatie worden toegevoegd. Klik op Volgende .

Selecteer de opties die moeten worden uitgevoerd nadat het proces met succes is voltooid. Klik op Volgende .

Controleer de informatie die je hebt toegevoegd en klik op Voltooien .

Het proces voor het aanmaken van een abonnement wordt uitgevoerd.

Het abonnement dat we zojuist hebben gemaakt, toont een item in Object Explorer (op de uitgever) dat is toegewezen aan de bovenliggende publicatie. Houd er rekening mee dat het niet wordt weergegeven in het knooppunt Lokale abonnementen dat u een lijst met abonnementen geeft die zijn gemaakt op de huidige instantie die in dit geval niet het geval is.

Bewaking en probleemoplossing

SQL Server biedt de Replicatiemonitor om details van alle replicatiesessies op het exemplaar te bekijken en te bewaken. De Replicatiemonitor kan de beheerder informeren wanneer de Snapshot Agent wordt uitgevoerd en voltooid. Het kan ons ook laten zien of de Abonnementen zijn geïnitialiseerd en of de Distributieagent soepel loopt.

Er zijn acht SQL Server Agent-taken gekoppeld aan onze huidige configuratie. Als u de geschiedenis van deze taken bekijkt, ziet u ook of alles in orde is.

Werkelijke Oracle-fouten worden vermeld in de Replicatiemonitor en in het foutenlogboek van SQL Server wanneer ze worden aangetroffen. Dit detailniveau maakt SQL Server-replicatie interessant om problemen op te lossen. Kennis van Oracle (voor de SQL Server DBA) zal een lange weg vergen om de fouten te begrijpen die kunnen optreden.

Bekijk het voorbeeld van de fout in Fig. 34. Deze fout deed zich voor voordat de Oracle Net- en ODBC-omgevingen correct waren geconfigureerd. De fouten geven een zeer duidelijke indicatie van waar het probleem zit.

De weergave Taakactiviteitsmonitor informeert ons ook welke taken slagen en welke taak we in detail moeten oplossen door de Taakgeschiedenis te bekijken.

Zodra alle eerdere fouten zijn opgelost, geeft het openen van een abonnement door erop te dubbelklikken ons een gedetailleerd overzicht van alle sessies, fouten en resultaten die we verwachten te zien wanneer alles in orde is. Merk op dat Agent Bulk gegevens in batches van de uitgever naar de abonnee kopieert. We kunnen ook de tabellen opvragen die in de Oracle-instantie zijn gemaakt en de records vergelijken. (Afb. 37).

Zoals u kunt zien, bereidt SQL Server de tabel voor met uitzondering van het bronschema (Sales) voordat de tabel in Oracle wordt gemaakt en de gegevens worden gekopieerd.

Het aantal records in de Oracle-instantie komt overeen met dat in de brontabel en houdt rekening met het feit dat we de OrderLines-tabel filteren op OrderID's groter dan 1000.

Conclusie

We hebben kort het proces doorlopen van het configureren van heterogene databasereplicatie met een Oracle-instantie als abonnee. Hoewel deze optie geleidelijk door Microsoft wordt afgeschaft, zijn er gebruiksscenario's die nog steeds kunnen profiteren van de mogelijkheden van deze oude SQL Server-functie. De sectie Referenties biedt een bredere lezing over het onderwerp, waarvan ik denk dat het nuttig zal zijn voor diegenen die meer willen oefenen.

Referenties

Replicatie configureren voor Always-On-beschikbaarheidsgroepen
Niet-Oracle-abonnees
Heterogene databasereplicatie
Oracle-abonnees


  1. Het verschil tussen INSTR() en LOCATE() in MariaDB

  2. moet ik c3p0-statement pooling activeren?

  3. ONLY_FULL_GROUP_BY uitschakelen

  4. WHERE-clausules groeperen in Codeigniter