Überlegungen zum Entwurf und Einschränkungen für Oracle-Verleger

Gilt für:SQL Server

Die Veröffentlichung aus einer Oracle-Datenbank ist so konzipiert, dass sie nahezu identisch mit der Veröffentlichung aus einer Microsoft SQL Server-Datenbank funktioniert. Beachten Sie jedoch die folgenden Punkte und Einschränkungen:

  • Die Option Oracle (Gateway) bietet eine bessere Leistung im Vergleich zur Option Oracle (Vollständig), allerdings ist es mit dieser Option nicht möglich, dieselbe Tabelle in mehreren Transaktionsveröffentlichungen zu veröffentlichen. Eine Tabelle kann in höchstens eine Transaktionsveröffentlichung und in beliebig viele Momentaufnahmeveröffentlichungen aufgenommen werden. Wenn Sie dieselbe Tabelle in mehreren Transaktionsveröffentlichungen veröffentlichen müssen, wählen Sie die Option Oracle (Vollständig) aus.

  • Die Replikation unterstützt das Veröffentlichen von Tabellen, Indizes und materialisierten Sichten. Andere Objekte werden nicht repliziert.

  • Es gibt einige kleine Unterschiede zwischen der Speicherung und Verarbeitung von Daten in Oracle- und SQL Server-Datenbanken, die sich auf die Replikation auswirken.

  • Zahlreiche Unterschiede bestehen dahingehend, wie Replikationsfunktionen bei der Verwendung eines Oracle-Verlegers unterstützt werden.

Unterstützung für das Veröffentlichen von Objekten aus Oracle-Datenbanken

Das Replizieren der folgenden Objekte aus Oracle-Datenbanken wird von der Replikation unterstützt:

  • Tabellen

  • Durch Indizes organisierte Tabellen

  • Indizes

  • Materialisierte Sichten (als Tabellen repliziert)

Folgendes kann bei veröffentlichten Tabellen vorhanden sein, wird jedoch nicht repliziert:

  • Domänenbasierte Indizes

  • Funktionsbasierte Indizes

  • Standards

  • Check-Einschränkungen

  • Fremdschlüssel

  • Speicheroptionen (Tabellenbereiche, Cluster usw.)

Die folgenden Objekte können nicht repliziert werden:

  • Geschachtelte Tabellen

  • Ansichten

  • Pakete, Paketkörper, Prozeduren und Trigger

  • Warteschlangen

  • Sequenzen

  • Synonyme

Informationen zu unterstützten Datentypen finden Sie unter Data Type Mapping for Oracle Publishers.

Unterschiede zwischen Oracle und SQL Server

  • Bei Oracle unterscheidet sich die maximal zulässige Größe für einige Objekte. Alle objekte, die in der Oracle-Publikationsdatenbank erstellt wurden, sollten die maximalen Größenbeschränkungen für die entsprechenden Objekte in SQL Server einhalten. Informationen zu Grenzwerten in SQL Server finden Sie unter "Maximale Kapazitätsspezifikationen für SQL Server".

  • Standardmäßig werden Oracle-Objektnamen in Großbuchstaben erstellt. Stellen Sie sicher, dass Sie die Namen von Oracle-Objekten im Großbuchstaben angeben, wenn sie über einen SQL Server-Distributor veröffentlicht werden, wenn sie in der Oracle-Datenbank großgeschrieben sind. Stimmt die Schreibweise nicht überein, gibt möglicherweise eine Fehlermeldung an, dass das Objekt nicht gefunden werden kann.

  • Oracle hat einen etwas anderen SQL-Dialekt als SQL Server; Zeilenfilter sollten in Oracle-kompatibler Syntax geschrieben werden.

Überlegungen zu großen Objekten

Daten großer Objekte (LOB, Large OBjects) werden in der Artikelprotokolltabelle gespeichert. Updates an LOB-Daten werden stets direkt aus der veröffentlichten Tabelle abgerufen. Eine Replikation von Updates erfolgt bei Transaktionsveröffentlichungen nur dann, wenn der Vorgang, der das LOB betrifft, den Replikationstrigger für die replizierte Tabelle auslöst. Oracle-Trigger werden beim Einfügen oder Löschen von Zeilen ausgelöst, die LOBs enthalten; Updates an LOB-Spalten lösen jedoch keine Trigger aus. Das Update einer LOB-Spalte wird nur dann sofort repliziert, wenn in derselben Zeile eine Spalte, die sich nicht auf ein LOB bezieht, mit derselben Oracle-Transaktion ebenfalls aktualisiert wird. Anderenfalls wird die LOB-Spalte nicht auf dem Abonnenten aktualisiert, wenn das nächste Update an einer Spalte, die sich nicht auf ein LOB bezieht, in derselben Zeile stattfindet. Stellen Sie sicher, dass dieses Verhalten bei Ihrer Anwendung toleriert werden kann.

Um Updates an LOB-Spalten in Transaktionsveröffentlichungen zu replizieren, berücksichtigen Sie beim Schreiben der Anwendung eine der folgenden Strategien:

  • Führen Sie innerhalb einer Transaktion ein Löschen und erneutes Einfügen der Zeile aus, statt die Zeile zu aktualisieren: Geben Sie das neue LOB an, wenn Sie die Zeile erneut einfügen. Da beim Löschen und auch beim Einfügen Trigger ausgelöst werden, wird die Zeile repliziert.

  • Nehmen Sie zusammen mit der LOB-Spalte eine Spalte auf, die sich nicht auf ein LOB bezieht, oder aktualisieren Sie eine solche Spalte im Rahmen derselben Oracle-Transaktion. In beiden Fällen stellt das Aktualisieren der Spalte, die sich nicht auf ein LOB bezieht, das Auslösen des Triggers sicher.

Weitere Informationen zu LOBs finden Sie unter Data Type Mapping for Oracle Publishers.

Eindeutige Indizes und Einschränkungen

Bei der Momentaufnahme- und der Transaktionsreplikation unterliegen Spalten, die in eindeutigen Indizes und Einschränkungen (einschließlich PRIMARY KEY-Einschränkungen) enthalten sind, bestimmten Bedingungen. Werden diese Bedingungen nicht erfüllt, wird die Einschränkung oder der Index nicht repliziert.

  • Die maximale Anzahl von Spalten, die in einem Index in SQL Server zulässig sind, beträgt 16.

  • Alle in UNIQUE-Einschränkungen aufgenommene Spalten müssen unterstützte Datentypen aufweisen. Weitere Informationen zu Datentypen finden Sie unter Data Type Mapping for Oracle Publishers.

  • Alle in UNIQUE-Einschränkungen aufgenommene Spalten müssen veröffentlicht werden (sie können nicht gefiltert werden).

  • Für Spalten, die von UNIQUE-Einschränkungen betroffen sind, muss ein Wert ungleich NULL angegeben sein.

Berücksichtigen Sie außerdem die folgenden Punkte:

  • Oracle und SQL Server behandeln NULL anders: Oracle lässt mehrere Zeilen mit NULL-Werten für Spalten zu, die NULL zulassen und in eindeutigen Einschränkungen oder Indizes enthalten sind. SQL Server erzwingt Eindeutigkeit, indem nur eine einzelne Zeile mit einem NULL-Wert für dieselbe Spalte zulässig ist. UNIQUE-Einschränkungen oder -Indizes, die NULL zulassen, können nicht veröffentlicht werden. Anderenfalls würde eine Einschränkungsverletzung auf dem Abonnenten eintreten, wenn die veröffentlichte Tabelle für eine der im Index oder der Einschränkung enthaltenen Spalten mehrere Zeilen mit NULL-Werten enthält.

  • Beim Testen auf Eindeutigkeit werden nachfolgende Leerzeichen in einem Feld von SQL Server, aber nicht von Oracle ignoriert.

Wie bei der TRANSAKTIONSreplikation von SQL Server erfordern Tabellen in Oracle-Transaktionspublikationen einen Primärschlüssel; Der Primärschlüssel muss basierend auf den oben angegebenen Regeln eindeutig sein. Wenn der Primärschlüssel nicht den oben beschriebenen Regeln folgt, kann die Tabelle nicht für die Transaktionsreplikation veröffentlicht werden.

Unterschiede zwischen dem Veröffentlichen mit Oracle und der Standardtransaktionsreplikation

  • Ein Oracle Publisher darf nicht denselben Namen haben wie: seinen SQL Server-Distributor; einer der SQL Server-Herausgeber, die den Distributor verwenden; oder alle Abonnenten, die die Publikation erhalten. Von demselben Verteiler bediente Veröffentlichungen müssen jeweils einen eindeutigen Namen haben.

  • Eine in einer Oracle-Veröffentlichung veröffentlichte Tabelle kann keine replizierten Daten erhalten. Daher unterstützen Oracle-Veröffentlichungen Folgendes nicht: Veröffentlichungen mit Abonnements mit sofortigem Update und mit verzögertem Update über eine Warteschlange oder Topologien, in denen Veröffentlichungstabellen auch als Abonnementtabellen dienen, z. B. bei der Peer-zu-Peer- und bidirektionalen Replikation.

  • Primärschlüssel/Fremdschlüssel-Beziehungen in der Oracle-Datenbank werden nicht auf die Abonnenten repliziert. Die Beziehungen bleiben jedoch in den Daten erhalten, wenn Änderungen übermittelt werden.

  • Transaktionsveröffentlichungen unterstützen standardmäßig Tabellen mit bis zu 1000 Spalten. Oracle-Transaktionsveröffentlichungen unterstützen 995 Spalten (bei der Replikation werden jeder veröffentlichten Tabelle fünf Spalten hinzugefügt).

  • Sortierklauseln werden den CREATE TABLE-Anweisungen hinzugefügt, damit Groß- und Kleinbuchstaben bei Vergleichen berücksichtigt werden, was bei Primärschlüsseln und UNIQUE-Einschränkungen eine wichtige Rolle spielt. Dieses Verhalten wird mit der Schemaoption 0x1000 gesteuert, die mit dem @schema_option Parameter sp_addarticle (Transact-SQL) angegeben wird.

  • Wenn Sie zur Konfiguration oder Verwaltung eines Oracle-Verlegers gespeicherte Prozeduren verwenden, nehmen Sie die Prozeduren nicht innerhalb einer expliziten Transaktion auf. Dies wird über den Verbindungsserver nicht unterstützt, mit dem die Verbindung mit dem Oracle-Verleger hergestellt wird.

  • Wenn Sie ein Pullabonnement für eine Oracle-Publikation mit einem Assistenten erstellen, müssen Sie den Assistenten für neue Abonnements verwenden, der mit SQL Server 2005 (9.x) und höheren Versionen bereitgestellt wird. Bei früheren Versionen von SQL Server können Sie jedoch die gespeicherten Prozeduren und SQL-DMO-Schnittstellen verwenden, um Pullabonnements für Oracle-Publikationen einzurichten.

  • Bei der Weitergabe von Änderungen mithilfe gespeicherter Prozeduren an Abonnenten (Standardverfahren) wird die MCALL-Syntax zwar unterstützt, weist jedoch ein anderes Verhalten auf, wenn die Veröffentlichung von einem Oracle-Verleger stammt. In der Regel stellt MCAL ein Bitmuster bereit, das die auf dem Verleger aktualisierten Spalten zeigt. Bei einer Oracle-Veröffentlichung zeigt das Bitmuster immer, dass alle Spalten aktualisiert wurden. Weitere Informationen zur Verwendung gespeicherter Prozeduren finden Sie unter Angeben der Weitergabemethode für Änderungen bei Transaktionsartikeln.

Unterstützte Funktionen der Transaktionsreplikation

  • Oracle-Veröffentlichungen unterstützen nicht alle Schemaoptionen, die von SQL Server-Veröffentlichungen unterstützt werden. Weitere Informationen zu Schemaoptionen finden Sie unter sp_addarticle (Transact-SQL).

  • Abonnenten von Oracle-Veröffentlichungen können keine Abonnements mit sofortigem Update oder Abonnements mit verzögertem Update über eine Warteschlange verwenden und keine Knoten in einer Peer-zu-Peer- oder bidirektionalen Topologie sein.

  • Abonnenten von Oracle-Veröffentlichungen können nicht automatisch von einer Sicherung initialisiert werden.

  • SQL Server unterstützt zwei Arten von Überprüfung: Binär- und Zeilenanzahl. Oracle-Verleger unterstützen die Zeilenanzahlüberprüfung. Weitere Informationen finden Sie unter Überprüfen von replizierten Daten.

  • SQL Server bietet zwei Momentaufnahmenformate: systemeigener Bcp-Modus und Zeichenmodus. Oracle-Verleger unterstützen Momentaufnahmen im Zeichenmodus.

  • Schemaänderungen an veröffentlichten Oracle-Tabellen werden nicht unterstützt. Wenn Sie das Schema ändern möchten, löschen Sie zuerst die Veröffentlichung, nehmen Sie die Änderungen vor, und erstellen Sie dann die Veröffentlichung und alle Abonnements neu.

    Hinweis

    Wenn die Schemaänderungen und das anschließende Löschen sowie Neuerstellen der Veröffentlichung und Abonnements dann vorgenommen werden, wenn keine Aktivität an den veröffentlichten Tabellen stattfindet, können Sie die Option 'Nur Replikationsunterstützung' für die Abonnements angeben. Die Abonnements werden dann synchronisiert, ohne dass eine Momentaufnahme auf jeden Abonnenten kopiert werden muss. Weitere Informationen finden Sie unter Initialize a Transactional Subscription Without a Snapshotinitialisiert wird.

Replikationssicherheitsmodell

Das Sicherheitsmodell für das Veröffentlichen mit Oracle ist mit dem der Standardtransaktionsreplikation identisch. Ausnahmen:

Weitere Informationen zur Replikationssicherheit finden Sie unter Anzeigen und Ändern von Replikationssicherheitseinstellungen.

Weitere Informationen

Überlegungen zu administrativen Aufgaben bei Oracle-Verlegern
Konfigurieren eines Oracle-Verlegers
Veröffentlichungen mit Oracle (Übersicht)