Überlegungen zum Entwurf und Einschränkungen für Oracle-Verleger
Gilt für: SQL Server
Das Veröffentlichen über Oracle-Datenbanken erfolgt nahezu auf die gleiche Weise wie das Veröffentlichen über Microsoft SQL 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 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 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 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
Standardwerte
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. 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. Weitere Informationen zu Einschränkungen 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. 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 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 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 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 die gleiche 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 SQL Server-Transaktionsreplikation 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 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 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 (9.x) und höheren Versionen bereitgestellt wird. Bei früheren Versionen von SQL Server können Sie jedoch die gespeicherte Prozedur und SQL-DMO-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 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 Ü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 Momentaufnahmeformate bereit: 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:
Das Konto, unter dem der Momentaufnahme-Agent und der Protokolllese-Agent Verbindungen vom Verteiler zum Verleger herstellen, wird mit einer der folgenden Methoden angegeben:
Mit dem
@security_mode
-Parameter von sp_adddistpublisher (Transact-SQL) (Sie geben bei Verwendung der Oracle-Authentifizierung auch Werte für@login
und@password
an)In der Verbindung mit Server Dialogbox in SQL Server Management Studio, die Sie verwenden, wenn Sie den Oracle Publisher am SQL Server Distributor konfigurieren.
Das Konto wird bei der standardmäßigen Transaktionsreplikation mit sp_addpublication_snapshot (Transact-SQL) und sp_addlogreader_agent (Transact-SQL) angegeben.
Das Konto, unter dem der Momentaufnahmeagent und der Protokollleseagent Verbindungen herstellen, kann nicht mithilfe von sp_changedistpublisher (Transact-SQL) oder einem Eigenschaftenblatt geändert werden. Das Kennwort können Sie jedoch ändern.
Wenn Sie den Wert 1 (integrierte Windows-Authentifizierung) für den
@security_mode
-Parameter von sp_adddistpublisher (Transact-SQL) angeben, gilt Folgendes:Das Prozesskonto und das Kennwort für den Momentaufnahmen-Agent und den Protokolllese-Agent (die
@job_login
- und@job_password
-Parameter von sp_addpublication_snapshot (Transact-SQL) und sp_addlogreader_agent (Transact-SQL)) müssen identisch mit dem Konto und dem Kennwort für die Verbindung mit dem Oracle-Verleger sein.Sie können den
@job_login
-Parameter nicht über sp_changepublication_snapshot (Transact-SQL) oder sp_changelogreader_agent (Transact-SQL) ändern, das Kennwort kann jedoch geändert werden.
Weitere Informationen zur Replikationssicherheit finden Sie unter Anzeigen und Ändern von Replikationssicherheitseinstellungen.