Freigeben über


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

Das Veröffentlichen aus Oracle-Datenbanken erfolgt nahezu auf die gleiche Weise wie das Veröffentlichen aus MicrosoftSQL Server-Datenbanken. 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 Snapshotverö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 bestehen einige geringfügige Unterschiede zwischen dem Speichern und Verarbeiten von Daten in Oracle- und in SQL Server-Datenbanken, die sich auf die Replikation auswirken.

  • Zahlreiche Unterschiede bestehen dahingehend, wie Replikationsfeatures 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

  • Standardwerte

  • CHECK-Einschränkungen

  • Fremdschlüssel

  • Speicheroptionen (Tabellenbereiche, Cluster usw.)

Die folgenden Objekte können nicht repliziert werden:

  • Geschachtelte Tabellen

  • Sichten

  • Pakete, Paketkörper, Prozeduren und Trigger

  • Warteschlangen

  • Sequenzen

  • Synonyme

Informationen zu unterstützten Datentypen finden Sie unter Datentypzuordnung für Oracle-Verleger.

Unterschiede zwischen Oracle und SQL Server

  • Bei Oracle unterscheidet sich die maximal zulässige Größe für einige Objekte. Die Größe der Objekte, die in der Oracle-Veröffentlichungsdatenbank erstellt werden, muss mit der maximal zulässigen Größe der entsprechenden Objekte in SQL Server übereinstimmen. Informationen zu Grenzwerten in SQL Server finden Sie unter Spezifikationen der maximalen Kapazität für SQL Server.

  • Standardmäßig werden Oracle-Objektnamen in Großbuchstaben erstellt. Stellen Sie sicher, dass beim Veröffentlichen von Oracle-Objekten über einen SQL Server-Verteiler die Namen der Objekte Großbuchstaben aufweisen, wenn sie in der Oracle-Datenbank in Großbuchstaben vorliegen. Stimmt die Schreibweise nicht überein, gibt möglicherweise eine Fehlermeldung an, dass das Objekt nicht gefunden werden kann.

  • Der SQL-Dialekt von Oracle und SQL Server unterscheidet sich leicht. Schreiben Sie Zeilenfilter in einer mit Oracle kompatiblen Syntax.

Überlegungen zu großen Objekten

Daten großer Objekte (LOB, Large OBjects) werden in der Artikelprotokolltabelle gespeichert. Aktualisierungen an LOB-Daten werden stets direkt aus der veröffentlichten Tabelle abgerufen. Eine Replikation von Aktualisierungen 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; Aktualisierungen an LOB-Spalten lösen jedoch keine Trigger aus. Die Aktualisierung 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 die nächste Aktualisierung 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 Aktualisierungen 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 Datentypzuordnung für Oracle-Verleger.

Eindeutige Indizes und Einschränkungen

Bei der Snapshot- 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 Zahl zulässiger Spalten in einem SQL Server-Index beträgt 16.

  • Alle in UNIQUE-Einschränkungen aufgenommene Spalten müssen unterstützte Datentypen aufweisen. Weitere Informationen zu Datentypen finden Sie unter Datentypzuordnung für Oracle-Verleger.

  • 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 verarbeiten NULL-Werte unterschiedlich: Oracle lässt mehrere Zeilen mit NULL-Werten für Spalten zu, bei denen NULL-Werte zulässig sind und die in UNIQUE-Einschränkungen oder -Indizes eingeschlossen sind. SQL Server erzwingt die Eindeutigkeit, indem nur eine einzige Zeile mit einem NULL-Wert für eine 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 der Eindeutigkeit ignoriert SQL Server nachfolgende Leerzeichen in einem Feld, nicht jedoch Oracle.

Tabellen in Oracle-Transaktionsveröffentlichungen erfordern wie bei der Transaktionsreplikation von SQL Server einen Primärschlüssel und müssen gemäß den oben stehenden 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

  • Oracle-Verleger können nicht den gleichen Namen aufweisen, wie deren SQL Server-Verteiler, einer der SQL Server-Verleger, die den Verteiler verwenden, oder einer der Abonnenten, die die Veröffentlichung 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 sofortiger Aktualisierung und mit verzögerter Aktualisierung oder Topologien, in denen Veröffentlichungstabellen auch als Abonnementtabellen dienen, z. B. bei der Peer-to-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 durch die Schemaoption 0x1000 gesteuert, die mit dem @schema_option-Parameter von 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-Veröffentlichung mithilfe eines Assistenten erstellen, müssen Sie den Assistent für neue Abonnements verwenden, der mit SQL Server 2005 und höheren Versionen bereitgestellt wird. Bei früheren Versionen von SQL Server können Sie jedoch die gespeicherte Prozedur und SQL-DOM-Schnittstellen verwenden, um Pullabonnements Oracle-Veröffentlichungen 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 zum Verwenden gespeicherter Prozeduren finden Sie unter Angeben der Weitergabemethode für Änderungen bei Transaktionsartikeln.

Unterstützte Features 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 sofort aktualisierbare Abonnements oder Abonnements mit verzögerter Aktualisierung über eine Warteschlange nicht verwenden und keine Knoten in einer Peer-to-Peer- oder bidirektionalen Topologie sein.

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

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

  • SQL Server stellt zwei Snapshotformate bereit: systemeigener BCP-Modus und Zeichenmodus. Oracle-Verleger unterstützen Snapshots 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.

    HinweisHinweis

    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 ein Snapshot auf jeden Abonnenten kopiert werden muss. Weitere Informationen finden Sie unter Initialisieren eines Transaktionsabonnements ohne Snapshot.

Replikationssicherheitsmodell

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

Weitere Informationen zur Replikationssicherheit finden Sie unter Sicherheit und Schutz (Replikation).