Daten aus Oracle-Datenbanken streamen

Dieser Abschnitt enthält Informationen über:

  • Der Umgang von Datastream mit Daten, die aus einer Oracle-Quelldatenbank abgerufen werden
  • Die von Datastream unterstützten Versionen der Oracle-Datenbank
  • Eine Übersicht über das Einrichten einer Oracle-Quelldatenbank, damit Daten daraus an ein Ziel gestreamt werden können
  • Bekannte Einschränkungen bei Verwendung der Oracle-Datenbank als Quelle

Verhalten

Datastream unterstützt zwei Methoden zum Extrahieren von Änderungen an den Daten aus Online-Redo-Logdateien: den Oracle-Binärlog-Reader (Vorabversion) und Oracle LogMiner.

Bei der Methode „Binärlog-Reader“ (Vorabversion) wird folgendes Verhalten beobachtet:

  • Wenn beim Extrahieren der Änderungen aus den Online-Logdateien eine Leseverzögerung auftritt, extrahiert Datastream die Änderungen aus archivierten Logdateien.

  • Datastream repliziert nur Änderungen, für die ein Commit durchgeführt wurde, in das Ziel. Transaktionen, für die kein Commit durchgeführt wurde oder die zurückgesetzt wurden, werden nicht repliziert.

  • Der Binärlog-Reader unterstützt die Replikation von VARCHAR2-Spalten von Oracle, die länger als 4.000 Zeichen sind.

Datastream unterstützt auch das Oracle LogMiner-Feature, um Änderungen an den Daten aufzuzeigen. Die Methode hat folgendes Verhalten:

  • Es können alle Schemas oder bestimmte Schemas einer bestimmten Datenbank sowie alle Tabellen der Schemas oder bestimmte Tabellen ausgewählt werden.
  • Alle Verlaufsdaten werden repliziert.
  • Alle Änderungen an der Datenbearbeitungssprache (DML) wie Einfügungen, Aktualisierungen und Löschungen aus den angegebenen Datenbanken und Tabellen werden repliziert.
  • Datastream repliziert sowohl Änderungen, für die ein Commit durchgeführt wurde, also auch (in einigen Fällen) Änderungen, für die kein Commit durchgeführt wurde. Datastream liest Änderungen, für die kein Commit durchgeführt wurde. Bei einem Rollback enthalten die Datastream-Ausgabedatensätze auch den umgekehrten Vorgang. Wenn es beispielsweise einen Rollback-Vorgang INSERT gibt, enthalten die Ausgabedatensätze auch einen entsprechenden DELETE-Vorgang. In diesem Fall wird das Ereignis als DELETE-Ereignis angezeigt, das nur die ROWID enthält.

Backfill auf Basis von ROWID

ROWID ist in Oracle eine Pseudospalte, in der eindeutige IDs für Zeilen in einer Tabelle gespeichert werden. Datastream verwendet die ROWID-Werte für seine Backfill-Vorgänge. Aus diesem Grund empfehlen wir, keine Aktionen auszuführen, die die ROWID-Werte in Ihrer Oracle-Quelldatenbank ändern könnten, bis der Backfill-Vorgang abgeschlossen ist.

Die folgenden Aktionen können die ROWID-Werte ändern:

  • Physische Verschiebung von Zeilen:

    • Export- und Importvorgänge: Wenn Sie eine Tabelle exportieren und dann wieder importieren, kann sich der physische Speicherort der Zeilen ändern, was zu neuen ROWID-Werten führt.
    • Befehl ALTER TABLE (...) MOVE: Wenn Sie eine Tabelle in einen anderen Tablespace verschieben, kann sich der physische Speicher ändern und zu ROWID-Änderungen führen.
    • Befehl ALTER TABLE (...) SHRINK SPACE: Mit diesem Befehl wird die Tabelle komprimiert, wodurch möglicherweise Zeilen verschoben und ihre ROWID-Werte beeinflusst werden.
    • Partitionierungsvorgänge: Wenn Sie Partitionen aufteilen, zusammenführen oder verschieben, kann sich die physische Platzierung von Zeilen und ihre ROWID-Werte ändern.
  • Flashback-Vorgänge:

    • Befehl FLASHBACK TABLE: Wenn Sie eine Tabelle in einen früheren Zustand zurückversetzen, werden Zeilen gelöscht und neu eingefügt, wodurch neue ROWID-Werte erstellt werden.
    • FLASHBACK_TRANSACTION_QUERY: Ähnlich wie FLASHBACK TABLE. Wenn Sie einen Rollback für eine Transaktion durchführen, können sich die ROWID-Werte ändern, wenn Zeilen in der Transaktion gelöscht oder aktualisiert wurden.

Fehlerbehebung beim Backfill von partitionierten Tabellen in Oracle 11.2.0.4

Wenn der Backfill für eine partitionierte Tabelle in Oracle 11.2.0.4 mit einem unerwarteten Abruffehler (Index außerhalb des zulässigen Bereichs) fehlschlägt, liegt das an einem Oracle-Metadatenfehler, bei dem Abfragen an ALL_OBJECTS keine Unterpartitionen zurückgeben.

  • Problemumgehung: Heben Sie die Berechtigung SELECT ON DBA_EXTENTS für den Datastream-Nutzer vorübergehend auf (z. B. REVOKE SELECT ON sys.dba_extents FROM USER_NAME;). Dadurch wird Datastream gezwungen, einen indexbasierten Backfill zu verwenden, wodurch das Metadatenproblem umgangen wird.

Standby-Datenbanken

Wenn Sie eine Oracle Active Data Guard-Standby-Datenbank als Quelle verwenden, liest Datastream die archivierten Redo-Logs. Damit Datastream nur Redo-Logs verarbeitet, die erfolgreich auf die Standby-Datenbank angewendet wurden, müssen Sie Standard-Oracle-Ansichten wie V$ARCHIVED_LOG und GV$ARCHIVED_LOG, filtern, damit nur Datensätze mit dem APPLIED = 'YES' Filter berücksichtigt werden.

Sie können dies erreichen, indem Sie benutzerdefinierte Ansichten erstellen. Achten Sie darauf, dass Sie Ihrem Datastream-Nutzer den entsprechenden Zugriff auf diese Ansichten gewähren. Beispiel:

CREATE OR REPLACE VIEW USER_NAME.local_v$archived_log AS 
SELECT * FROM sys.v_$ARCHIVED_LOG
WHERE RESETLOGS_CHANGE# = (SELECT resetlogs_change# FROM v$database)
  AND APPLIED = 'YES';

CREATE OR REPLACE VIEW USER_NAME.local_gv$archived_log AS 
SELECT * FROM sys.gv_$ARCHIVED_LOG
WHERE RESETLOGS_CHANGE# = (SELECT resetlogs_change# FROM v$database)
  AND APPLIED = 'YES';

CREATE SYNONYM USER_NAME.v$archived_log FOR USER_NAME.local_v$archived_log;
CREATE SYNONYM USER_NAME.gv$archived_log FOR USER_NAME.local_gv$archived_log;

Die Verwendung des Filters APPLIED = 'YES' hat Auswirkungen auf die Datenaktualität. Datastream wartet, bis der verwaltete Wiederherstellungsprozess (Managed Recovery Process, MRP) der Standby-Datenbank die Logs anwendet und die Spalte APPLIED in YES ändert, bevor Änderungen extrahiert werden. Wenn sich der MRP-Prozess verzögert oder pausiert wird, z. B. wenn Sie den Standby-Anwendungsprozess anhalten, wirkt sich dies direkt auf die Aktualität der replizierten Daten aus. Datastream wechselt in eine Wiederholungsschleife und verzögert die Verarbeitung, bis die neu angewendeten archivierten Logs verfügbar sind.

Diese Konfiguration ist besonders wichtig, wenn Sie Tabellen replizieren, die Spalten mit großen Objekten (Large Object, LOB) enthalten. Bei UPDATE-Vorgängen sind die detaillierten Werte von LOB-Spalten nicht in den Redo-Logs enthalten. Daher muss Datastream die Datenbank abfragen, um die zugehörige Zeile abzurufen. Wenn Datastream ein nicht angewendetes Redo-Log verarbeitet und versucht, den LOB-Wert aus der Standby-Datenbank abzurufen, wird möglicherweise ein falscher, veralteter Wert abgerufen. Wenn Sie die Logs filtern, um sicherzustellen, dass sie zuerst vollständig angewendet werden, ruft Datastream die richtigen Daten ab.

Versionen

Datastream unterstützt die folgenden Versionen der Oracle-Datenbank:

  • Oracle 11g, Version 11.2.0.4 (wird nur mit der LogMiner-CDC-Methode unterstützt)
  • Oracle 12c, Version 12.1.0.2
  • Oracle 12c, Version 12.2.0.1
  • Oracle 18c
  • Oracle 19c
  • Oracle 21c

Datastream unterstützt die folgenden Arten von Oracle-Datenbanken:

  • Selbst gehostet, lokal oder bei einem beliebigen Cloud-Anbieter
  • Amazon RDS for Oracle
  • Oracle Cloud
  • Oracle Exadata
  • Oracle RAC
  • Oracle Active Data Guard-Standby-Datenbank

Einrichtung

Damit Sie eine Oracle-Quelldatenbank so einrichten können, dass Daten aus ihr in ein Ziel gestreamt werden können, muss die Datenbank so konfiguriert werden, dass sie Zugriff gewährt, eine Logging-Funktion einrichtet und eine Aufbewahrungsrichtlinie definiert.

Unter Oracle-Quelldatenbank konfigurieren wird erläutert, wie Sie diese Datenbank so konfigurieren, dass Datastream Daten aus einem Datenbankziel abrufen kann.

Best Practices

In diesem Abschnitt werden empfohlene Best Practices für die Konfiguration Ihrer Oracle-Quelle zur Verwendung mit Datastream beschrieben.

Groß-/Kleinschreibung für den Binärlog-Reader

Wenn Sie eine Oracle-Quelle mit der CDC-Methode „Binärlog-Reader“ konfigurieren und Verzeichnisnamen für Redo- und Archivierungslogs angeben, müssen Sie beachten, dass bei den Namen die Groß-/Kleinschreibung berücksichtigt wird. Die Verzeichnisnamen, die Sie im Datastream-Verbindungsprofil angeben, müssen genau mit der Groß-/Kleinschreibung der Verzeichnisnamen in Ihrer Oracle-Datenbank übereinstimmen.

CDC-Parallelität

Um die Replikationsverzögerung zu minimieren, muss Datastream Redo-Logs so schnell verarbeiten können, wie sie von Ihrer Oracle-Quelle erstellt werden. Bei Verwendung der CDC-Methode „Binärlog-Reader“ erfolgt die Parallelität von Datastream auf der Ebene der Redo-Logdatei: Jede Aufgabe, die durch maxConcurrentCdcTasks definiert wird, verarbeitet jeweils eine Datei.

Wir empfehlen die folgende Methode:

  • Parallelität in Datastream optimieren: Ermitteln Sie die durchschnittliche Anzahl der Redo-Log-Switches während der Hauptgeschäftszeiten und konfigurieren Sie den maxConcurrentCdcTasks Parameter entsprechend. Weitere Informationen finden Sie unter Maximale Anzahl von CDC-Aufgaben.
  • Oracle-Log-Switching konfigurieren:Konfigurieren Sie Oracle so, dass Logs häufig gewechselt werden, z. B. alle 10 bis 20 Minuten. Dadurch wird ein stetiger Stream kleinerer Arbeitseinheiten erstellt, sodass die parallelen Aufgaben von Datastream effektiv parallel ausgeführt werden können.

Wir empfehlen, die Einstellungen so zu optimieren, dass in Datastream genügend parallele Aufgaben vorhanden sind, um die häufige Erstellung kleinerer Redo-Logs aus Oracle zu verarbeiten. Weitere Informationen finden Sie unter Steuerelemente für die Stream-Parallelität.

Bekannte Einschränkungen

Bekannte Einschränkungen bei Verwendung der Oracle-Datenbank als Quelle:

  • Streams sind auf 10.000 Tabellen beschränkt. Wenn ein Stream mehr als 10.000 Tabellen enthält, können Fehler auftreten.
  • Datastream unterstützt die mehrmandantenfähige Architektur von Oracle (CDB/PDB). Sie können jedoch nur eine einzelne Pluggable Database in einem Stream replizieren.
  • Oracle Autonomous Database wird nicht unterstützt.
  • Für Tabellen ohne Primärschlüssel verwendet Datastream die ROWID der Zeile, um auf Nutzerseite einen Zusammenführungsvorgang auszuführen. Beachten Sie, dass die ROWID möglicherweise nicht eindeutig ist. Wenn Sie beispielsweise eine Zeile mit dem Oracle-Dienstprogramm „Export/Import“ löschen und neu einfügen, kann sich die ROWID der Zeile ändern. Wenn Sie eine Zeile löschen, kann Oracle ihre ROWID einer neuen Zeile zuweisen, die später eingefügt wird.
  • Indexbasierte Tabellen (Index-organized Tables, IOTs) werden nicht unterstützt.
  • Temporäre Tabellen werden nicht unterstützt.
  • Die folgenden Oracle-Datentypen werden nicht unterstützt und nicht repliziert. Spalten dieser Typen werden im Ziel als NULL-Werte repliziert:
    • ANYDATA, ANYDATASET, ANYTYPE
    • VARRAY (Oracle-Arrays)
    • BFILE, BFILENAME
    • INTERVAL DAY TO SECOND, INTERVAL YEAR TO MONTH
    • LONG, LONG RAW
    • UROWID
    • UDT
    • Media- und räumliche Typen: ORDAUDIO, ORDDATASOURCE, ORDDICOM, ORDDOC, ORDIMAGE, ORDVIDEO, SDO_GEOMETRY und alle anderen MDSYS.SDO_*-Typen.
  • Wenn Sie Spalten mit großen Objektdatentypen wie XMLTYPE, binären großen Objekten (BLOB), Zeichen-LOBs (CLOB) und nationalen Zeichen-LOBs (NCLOB) streamen möchten, müssen Sie das Flag streamLargeObjects in Ihre Stream-Konfiguration aufnehmen. Wenn Sie das Flag nicht einfügen, streamt Datastream solche Spalten nicht und sie werden im Ziel durch NULL-Werte ersetzt. Weitere Informationen finden Sie unter Streaming großer Objekte für Oracle-Quellen aktivieren. Beim Streaming dieser Datentypen muss Datastream die Quelldatenbank abfragen, um fehlende LOB-Werte zu einem bestimmten Zeitpunkt abzurufen (in einem aktiven Suchvorgang, der als Ergänzung bezeichnet wird). Dies tritt in den folgenden Szenarien auf:

    • Wenn unveränderte LOB-Nutzlasten während eines UPDATE-Vorgangs aus dem Redo-Log entfernt werden
    • Bei allen DML-Vorgängen mit binären XML-Typen
    • Bei allen geparsten DML-Vorgängen in einer Tabelle mit LOBs, wenn der Stream die LogMiner-Methode verwendet

    Da Datastream diese Spalten durch Abfragen der Datenbank streamt, werden Zwischenänderungen in Szenarien mit schnellen, aufeinanderfolgenden Aktualisierungen oder einem schnellen Löschen nach dem Einfügen möglicherweise nicht erfasst. Beachten Sie, dass DELETE-Vorgänge keine Ergänzung auslösen. Diese Einschränkung ist besonders relevant, wenn Sie den Schreibmodus „Nur anhängen“ verwenden, bei dem alle Zwischenänderungen erfasst werden müssen.

  • Bei Oracle 11g werden Tabellen mit Spalten vom Datentyp ANYDATA oder UDT nicht unterstützt und die gesamte Tabelle wird nicht repliziert.

  • Oracle Label Security (OLS) wird nicht repliziert.

  • Datastream ruft regelmäßig das neueste Schema aus der Quelle ab, während Ereignisse verarbeitet werden. Wenn sich ein Schema ändert, werden möglicherweise einige Ereignisse aus dem neuen Schema gelesen, während das alte Schema noch angewendet wird. In diesem Fall erkennt Datastream die Schemaänderung, löst einen Schemaabruf aus und verarbeitet die fehlgeschlagenen Ereignisse noch einmal.

  • Nicht alle Änderungen am Quellschema können automatisch erkannt werden. Dies kann zu Datenbeschädigungen führen. Die folgenden Schemaänderungen können zu Datenbeschädigungen oder Fehlern bei der nachgelagerten Verarbeitung der Ereignisse führen:

    • Spalten entfernen
    • Spalten in der Mitte einer Tabelle einfügen
    • Datentyp einer Spalte ändern
    • Spalten neu sortieren
    • Tabellen löschen (relevant, wenn dieselbe Tabelle anschließend mit neuen Daten neu erstellt wird)
    • Tabellen kürzen
  • Datastream unterstützt keine Replikation von Ansichten.

  • Datastream unterstützt materialisierte Ansichten. Für neue Ansichten, die während der Ausführung des Streams erstellt werden, erfolgt jedoch kein automatischer Backfill.

  • Bei Verwendung der Oracle LogMiner-Methode werden SAVEPOINT Anweisungen nicht unterstützt und können bei einem Rollback zu Datenabweichungen führen.

  • Bei Verwendung der Methode „Binärlog-Reader“ werden dynamisch partitionierte Tabellen nicht unterstützt.

  • Bei Verwendung der Oracle LogMiner-Methode unterstützt Datastream keine Replikation von Tabellen und Spalten, deren Namen länger als 30 Zeichen sind.

  • Datastream unterstützt die folgenden Zeichensatzcodierungen für Oracle-Datenbanken:

    • AL16UTF16
    • AL32UTF8
    • IN8ISCII
    • IW8ISO8859P8
    • JA16SJIS
    • JA16SJISTILDE
    • KO16MSWIN949
    • US7ASCII
    • UTF8
    • WE8ISO8859P1
    • WE8ISO8859P9
    • WE8ISO8859P15
    • WE8MSWIN1252
    • ZHT16BIG5
  • Datastream unterstützt keine Replikation von Datumsangaben mit dem Wert 0. Solche Datumsangaben werden durch NULL-Werte ersetzt.

  • Datastream unterstützt keine direkte Verbindung zu Datenbanken mit dem Feature „Single Client Access Name“ (SCAN) in Oracle Real Application Cluster (RAC)-Umgebungen. Informationen zu möglichen Lösungen finden Sie unter Verhalten und Einschränkungen von Oracle-Quellen.

  • Wenn die Quelle eine Oracle Active Data Guard-Standby-Datenbank ist, unterstützt Datastream nur die Verschlüsselung auf Tablespace-Ebene und nicht die Verschlüsselung auf Spaltenebene.

Zusätzliche Einschränkungen bei Verwendung des Binärlog-Readers

  • Die leistungsstarke Methode „Binärlog-Reader“ wird nur für Oracle 12c und höher unterstützt. Für Oracle 11g und frühere Versionen müssen Sie LogMiner verwenden.

  • Der Binärlog-Reader unterstützt die folgenden Funktionen nicht:

    • Transparente Datenbankverschlüsselung (Transparent Database Encryption, TDE)
    • Hybride spaltenbasierte Komprimierung
    • Sichere Dateien
    • ASM wird für Amazon RDS-Quellen nicht unterstützt.
    • Die CDC-Methode „Binärlog-Reader“ unterstützt Oracle 11g und frühere Versionen nicht.

Nächste Schritte