Ontwerpoverwegingen en beperkingen voor Oracle-uitgevers

Van toepassing op:SQL Server

Publiceren vanuit een Oracle-database werkt bijna hetzelfde als publiceren vanuit een Microsoft SQL Server-database. Wees je echter bewust van de volgende beperkingen en problemen:

  • De Oracle Gateway-optie biedt betere prestaties dan de Oracle Complete-optie. Je kunt echter niet de Oracle Gateway-optie gebruiken om dezelfde tabel in meerdere transactionele publicaties te publiceren. Een tabel kan slechts in één transactionele publicatie voorkomen, maar kan in een willekeurig aantal snapshotpublicaties voorkomen. Als u dezelfde tabel in meerdere transactionele publicaties wilt publiceren, kiest u de optie Oracle Complete.

  • Replicatie ondersteunt het publiceren van tabellen, indexen en gerealiseerde weergaven. Het repliceert geen andere objecten.

  • Enkele kleine verschillen tussen de opslag en verwerking van data in Oracle- en SQL Server-databases beïnvloeden de replicatie.

  • Er zijn verschillen in hoe transactionele replicatiefuncties worden ondersteund wanneer je een Oracle Publisher gebruikt.

Ondersteuning voor het publiceren van objecten vanuit Oracle

Replicatie ondersteunt het repliceren van de volgende objecten uit Oracle-databases:

  • Tables

  • Index-georganiseerde tabellen

  • Indexes

  • Gematerialiseerde weergaven (gerepliceerd als tabellen)

De volgende objecten kunnen aanwezig zijn op gepubliceerde tabellen, maar worden niet gerepliceerd:

  • Indexen op basis van een domein

  • Op functies gebaseerde indexen

  • Standaardwaarden

  • Controleer beperkingen

  • Vreemde sleutels

  • Opslagopties (tablespaces, clusters, enzovoort)

De volgende objecten kunnen niet worden gerepliceerd:

  • Geneste tabellen

  • Views

  • Pakketten, pakketteksten, procedures en triggers

  • Queues

  • Sequences

  • Synonyms

Zie Gegevenstypetoewijzing voor Oracle Publishers voor informatie over ondersteunde gegevenstypen.

Verschillen tussen Oracle en SQL Server

  • Oracle heeft verschillende maximale groottelimieten voor sommige objecten. Alle objecten die je aanmaakt in de Oracle-publicatiedatabase moeten voldoen aan de maximale groottelimieten voor de bijbehorende objecten in SQL Server. Zie Maximale capaciteitsspecificaties voor SQL Server voor informatie over limieten in SQL Server.

  • Standaard maakt Oracle objectnamen in hoofdletters. Zorg ervoor dat je de namen van Oracle-objecten in hoofdletters opgeeft wanneer je ze publiceert via een SQL Server Distributor als ze hoofdletters zijn in de Oracle-database. Als de objecten niet met het juiste hoofdlettergebruik worden opgegeven, kan dit leiden tot een foutmelding die aangeeft dat het object niet kan worden gevonden.

  • Oracle gebruikt een iets ander SQL-dialect dan SQL Server; schrijf rijfilters in Oracle-conforme syntaxis.

Overwegingen voor grote objecten

De artikellogtabel slaat geen grote objectgegevens (LOB) op. Updates van LOB-gegevens worden altijd direct opgehaald uit de gepubliceerde tabel. Updates worden slechts gerepliceerd in transactionele publicaties wanneer de bewerking die invloed heeft op de LOB de replicatietrigger op de gerepliceerde tabel activeert. Oracle activeert vuur wanneer rijen met LOB's worden ingevoegd of verwijderd. Updates aan LOB-kolommen activeren echter geen triggers. Een update van een LOB-kolom wordt onmiddellijk alleen gerepliceerd als een niet-LOB-kolom van dezelfde rij ook wordt bijgewerkt in dezelfde Oracle-transactie. Zo niet, dan wordt de LOB-kolom bij de abonnee bijgewerkt wanneer de eerstvolgende wijziging in een niet-LOB-kolom in dezelfde rij plaatsvindt. Zorg ervoor dat dit gedrag acceptabel is voor uw toepassing.

Als u updates naar LOB-kolommen in transactionele publicaties wilt repliceren, moet u een van de volgende strategieën overwegen bij het schrijven van de toepassing:

  • Verwijder en voeg de rijen opnieuw in binnen een transactie in plaats van de rij bij te werken: specificeer de nieuwe LOB bij het opnieuw invoegen van de rij. Omdat zowel verwijderen als invoegen triggers activeren, wordt de rij gerepliceerd.

  • Voeg een niet-LOB-kolom toe aan de rijupdate naast de LOB-kolom of werk een niet-LOB-kolom van de rij bij als onderdeel van dezelfde Oracle-transactie. In beide gevallen zorgt de update van de niet-LOB-kolom ervoor dat de trigger wordt geactiveerd.

Voor meer informatie over LOBs, zie Toewijzing van gegevenstypen voor Oracle-publishers.

Unieke indexen en beperkingen

Voor zowel snapshot- als transactionele replicatie moeten kolommen in unieke indexen en beperkingen (inclusief primaire sleutelbeperkingen) aan bepaalde beperkingen voldoen. Als ze deze beperkingen niet volgen, wordt de beperking of index niet gerepliceerd.

  • Je kunt tot 16 kolommen opnemen in een index op SQL Server.

  • Alle kolommen in unieke constraints moeten ondersteunende datatypes hebben. Zie Toewijzing van gegevenstypen voor Oracle Publishers voor meer informatie over gegevenstypen.

  • Je moet alle kolommen publiceren met unieke constraints (je kunt ze niet filteren).

  • Kolommen in unieke beperkingen of indexen mogen niet NULL zijn.

Houd ook rekening met de volgende problemen:

  • Oracle en SQL Server behandelen NULL anders: Oracle staat meerdere rijen met NULL-waarden toe voor kolommen die NULL toestaan en worden opgenomen in unieke beperkingen of indexen. SQL Server dwingt uniekheid af door slechts één rij met een NULL-waarde voor dezelfde kolom toe te laten. Je kunt geen unieke constraint of index publiceren die NULL toestaat, omdat er een constraint-schending zou optreden bij de abonnee als de gepubliceerde tabel meerdere rijen met NULL-waarden bevat voor een van de kolommen die in de index of constraint zijn opgenomen.

  • Bij het testen op uniciteit negeert SQL Server de achterliggende lege plekken in een veld, maar Oracle niet.

Net als bij SQL Server transactionele replicatie vereisen tabellen in Oracle transactionele publicaties een primaire sleutel. De primaire sleutel moet uniek zijn op basis van de eerder gespecificeerde regels. Als de primaire sleutel deze regels niet volgt, kun je de tabel niet publiceren voor transactionele replicatie.

Verschillen tussen Oracle Publishing en Standard Transactionele Replicatie

  • Een Oracle Publisher mag niet dezelfde naam hebben als: de SQL Server-distributeur; een van de SQL Server Publishers die gebruikmaken van de distributeur; of abonnees die de publicatie ontvangen. Publicaties die door dezelfde distributeur worden onderhouden, moeten elk een unieke naam hebben.

  • Een tabel die is gepubliceerd in een Oracle-publicatie, kan geen gerepliceerde gegevens ontvangen. Daarom biedt Oracle-publicatie geen ondersteuning voor publicaties met onmiddellijke updates of abonnementen in de wachtrij; of topologieën waarin publicatietabellen ook fungeren als abonnementstabellen, zoals peer-to-peer en bidirectionele replicatie.

  • Primaire sleutel naar vreemde sleutelrelaties in de Oracle-database wordt niet gerepliceerd naar abonnees. De relaties worden echter bijgehouden in de gegevens wanneer er wijzigingen worden aangebracht.

  • Standaard transactionele publicaties ondersteunen tabellen van maximaal 1000 kolommen. Oracle transactionele publicaties ondersteunen 995 kolommen (replicatie voegt vijf kolommen toe aan elke gepubliceerde tabel).

  • COLLATE-clausules worden toegevoegd aan de CREATE TABLE statements om hoofdlettergevoelige vergelijkingen mogelijk te maken, wat belangrijk is voor primaire sleutels en UNIQUE-beperkingen. Dit gedrag wordt beheerd met de schemaoptie 0x1000, die wordt opgegeven met de @schema_option parameter van sp_addarticle (Transact-SQL).

  • Als u opgeslagen procedures gebruikt om een Oracle Publisher te configureren of te onderhouden, plaatst u de procedures niet binnen een expliciete transactie. Dit wordt niet ondersteund via de gekoppelde server die wordt gebruikt om verbinding te maken met Oracle Publisher.

  • Als u een pull-abonnement maakt op een Oracle-publicatie met een wizard, moet u de wizard Nieuw abonnement gebruiken die is geleverd met SQL Server 2005 (9.x) en latere versies. Voor eerdere versies van SQL Server kunt u echter de opgeslagen procedure en SQL-DMO interfaces gebruiken om pull-abonnementen op Oracle-publicaties in te stellen.

  • Als u opgeslagen procedures gebruikt om wijzigingen door te geven aan abonnees (de standaardinstelling), moet u er rekening mee houden dat de MCALL-syntaxis wordt ondersteund, maar het heeft een ander gedrag wanneer de publicatie afkomstig is van een Oracle Publisher. Normaal gesproken biedt MCALL een bitmap die laat zien welke kolommen zijn bijgewerkt in Publisher. Met een Oracle-publicatie laat de bitmap altijd zien dat alle kolommen zijn bijgewerkt. Zie Opgeven hoe wijzigingen worden doorgegeven voor transactionele artikelen voor meer informatie over het gebruik van opgeslagen procedures.

Ondersteuning voor transactionele replicatiefuncties

  • Oracle-publicaties ondersteunen niet alle schema-opties die SQL Server-publicaties ondersteunen. Voor meer informatie over schema-opties, zie sp_addarticle (Transact-SQL).

  • Abonnees van Oracle-publicaties kunnen geen abonnementen voor directe updates of updates in de wachtrij gebruiken, en kunnen geen knooppunt zijn in een peer-to-peer- of bidirectionele topologie.

  • Abonnees van Oracle-publicaties kunnen niet automatisch worden geïnitialiseerd vanuit een back-up.

  • SQL Server ondersteunt twee typen validatie: binair en rowcount. Oracle Publishers biedt ondersteuning voor validatie van rijenaantallen. Zie Gerepliceerde gegevens valideren voor meer informatie.

  • SQL Server biedt twee momentopname-indelingen: systeemeigen bcp-modus en tekenmodus. Oracle Publishers bieden ondersteuning voor momentopnamen van tekenmodus.

  • Schemawijzigingen in gepubliceerde Oracle-tabellen worden niet ondersteund. Als u schemawijzigingen wilt aanbrengen, moet u eerst de publicatie verwijderen, de wijzigingen aanbrengen en vervolgens de publicatie en eventuele abonnementen opnieuw maken.

    Opmerking

    Als je schemawijzigingen aanbrengt en de publicatie en abonnementen verwijdert en opnieuw aanmaakt wanneer er geen activiteit plaatsvindt op de gepubliceerde tabellen, kun je de optie replication support only voor de abonnementen specificeren. Deze optie synchroniseert ze zonder een snapshot naar elke abonnee te kopiëren. Zie Een transactioneel abonnement initialiseren zonder momentopname voor meer informatie.

Replicatiebeveiligingsmodel

Het replicatiebeveiligingsmodel voor Oracle-publicatie is hetzelfde als het beveiligingsmodel voor standaard transactionele replicatie, met de volgende uitzonderingen:

Zie Instellingen voor replicatiebeveiliging weergeven en wijzigen voor meer informatie over replicatiebeveiliging.