Daten aus Oracle-Datenbanken streamen

Mit Datastream können Sie Verlaufsdaten und laufende Änderungen aus einer Oracle-Quelldatenbank in Ihr Ziel streamen, um Echtzeitanalysen und Datenbanksynchronisierung durchzuführen.

Bevor Sie eine Oracle-Quelle konfigurieren, sollten Sie sich mit dem Replikationsverhalten, den unterstützten Versionen und Datenbanktypen, der Datenbankeinrichtung, den Best Practices und den bekannten Einschränkungen in Datastream vertraut machen.

Verhalten

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

Bei der Methode mit dem 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 festgeschriebene Änderungen in das Ziel. Nicht übernommene oder zurückgesetzte Transaktionen werden nicht repliziert.

  • Der binäre Reader unterstützt die Replikation von Oracle-VARCHAR2-Spalten mit mehr als 4.000 Zeichen.

Datastream unterstützt auch die Oracle LogMiner-Funktion, um Änderungen an den Daten offenzulegen. Die Methode verhält sich so:

  • 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 der Datenbearbeitungssprache (Data Manipulation Language, DML), z. B. 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 ROWID enthält.

ROWID-basierter Backfill

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

Zu den Aktionen, die die ROWID-Werte ändern können, gehören:

  • Physisches Verschieben 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.
    • ALTER TABLE (...) MOVE-Befehl: Wenn Sie eine Tabelle in einen anderen Tablespace verschieben, kann sich der physische Speicher ändern und es kann zu ROWID-Änderungen kommen.
    • ALTER TABLE (...) SHRINK SPACE-Befehl: Dieser Befehl komprimiert die Tabelle, wodurch möglicherweise Zeilen verschoben und ihre ROWID-Werte beeinflusst werden.
    • Partitionierungsvorgänge: Durch das Aufteilen, Zusammenführen oder Verschieben von Partitionen kann sich die physische Platzierung von Zeilen und deren ROWID-Werte ändern.
  • Flashback-Vorgänge:

    • FLASHBACK TABLE-Befehl: 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. Das Rollback einer Transaktion kann zu ROWID-Änderungen führen, wenn Zeilen innerhalb der Transaktion gelöscht oder aktualisiert wurden.

Fehlerbehebung beim Backfill von Oracle 11.2.0.4-Partitionstabellen

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: Entziehen Sie dem Datastream-Nutzer (z. B. REVOKE SELECT ON sys.dba_extents FROM USER_NAME;) vorübergehend die Berechtigung SELECT ON DBA_EXTENTS. Dadurch wird Datastream gezwungen, den 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 so filtern, dass nur Datensätze mit dem Filter APPLIED = 'YES' enthalten sind.

Dazu können 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 Managed Recovery Process (MRP) der Standby-Datenbank die Logs anwendet und die Spalte APPLIED auf YES aktualisiert, bevor Änderungen extrahiert werden. Wenn der MRP-Prozess verzögert oder pausiert wird, z. B. wenn Sie den Standby-Anwendungsprozess aussetzen, wirkt sich dies direkt auf die Aktualität der replizierten Daten aus. Datastream startet eine Wiederholungsschleife und verzögert die Verarbeitung, bis die neu angewendeten archivierten Logs verfügbar sind.

Diese Konfiguration ist besonders relevant, wenn Tabellen mit LOB-Spalten (Large Object) repliziert werden. Bei UPDATE-Vorgängen sind die detaillierten Werte von LOB-Spalten nicht in den Redo-Logs vorhanden. 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. Durch das Filtern der Logs, 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 (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

Wenn Sie eine Oracle-Quelldatenbank so einrichten möchten, dass Daten daraus in ein Ziel gestreamt werden können, müssen Sie die Datenbank so konfigurieren, dass Zugriff gewährt wird, Logging einrichten und eine Aufbewahrungsrichtlinie definieren.

Unter Oracle-Quelldatenbank konfigurieren erfahren Sie, wie Sie diese Datenbank so konfigurieren, dass Datastream Daten daraus in ein Ziel abrufen kann.

Best Practices

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

Berücksichtigung der Groß-/Kleinschreibung für binären Reader

Wenn Sie eine Oracle-Quelle mit der CDC-Methode „Binärleser“ konfigurieren und Verzeichnisnamen für Redo- und Archivlogs angeben, beachten Sie, dass bei den Namen die Groß-/Kleinschreibung beachtet wird. Achten Sie darauf, dass die Verzeichnisnamen, die Sie im Datastream-Verbindungsprofil angeben, genau mit der Groß-/Kleinschreibung der Verzeichnisnamen in Ihrer Oracle-Datenbank übereinstimmen.

CDC-Nebenläufigkeit

Um die Replikationsverzögerung zu minimieren, muss Datastream Redo-Logs so schnell verarbeiten können, wie sie von der Oracle-Quelle erstellt werden. Bei Verwendung der CDC-Methode des Binärlog-Readers erfolgt die Datastream-Nebenläufigkeit auf der Ebene der Redo-Logdatei: Jede durch maxConcurrentCdcTasks definierte Aufgabe verarbeitet jeweils eine Datei.

Wir empfehlen die folgende Methode:

  • Nebenläufigkeit in Datastream optimieren: Ermitteln Sie die durchschnittliche Anzahl der Redo-Log-Wechsel während der Spitzenzeiten und konfigurieren Sie den Parameter maxConcurrentCdcTasks entsprechend. Weitere Informationen finden Sie unter Maximale Anzahl von CDC-Aufgaben.
  • Oracle-Logwechsel konfigurieren: Konfigurieren Sie Oracle so, dass Logs häufig gewechselt werden, z. B. alle 10–20 Minuten. Dadurch entsteht ein kontinuierlicher Strom kleinerer Arbeitseinheiten, sodass die gleichzeitigen Datastream-Aufgaben effektiv parallel ausgeführt werden können.

Wir empfehlen, die Einstellungen so zu optimieren, dass in Datastream genügend gleichzeitige Aufgaben vorhanden sind, um die häufige Erstellung kleinerer Redo-Logs von Oracle zu verarbeiten. Weitere Informationen finden Sie unter Steuerelemente für die Nebenläufigkeit von Streams.

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 Plug‑in-Datenbank in einem Stream replizieren.
  • Oracle Autonomous Database wird nicht unterstützt.
  • Bei Tabellen ohne Primärschlüssel verwendet Datastream die ROWID der Zeile, um einen Zusammenführungsvorgang auf der Nutzerseite auszuführen. Beachten Sie, dass die ROWID möglicherweise nicht eindeutig ist. Wenn Sie beispielsweise eine Zeile mit dem Export-/Import-Dienstprogramm von Oracle löschen und wieder einfügen, kann sich die ROWID der Zeile ändern. Wenn Sie eine Zeile löschen, kann Oracle die 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
    • Medien- 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, großen binären Objekten (BLOB), großen Zeichenobjekten (CLOB) und großen nationalen Zeichenobjekten (NCLOB) streamen möchten, müssen Sie das Flag streamLargeObjects in Ihre Streamkonfiguration aufnehmen. Wenn Sie das Flag nicht angeben, werden solche Spalten von Datastream nicht gestreamt und im Ziel durch NULL-Werte ersetzt. Weitere Informationen finden Sie unter Streaming großer Objekte für Oracle-Quellen aktivieren. Beim Streamen dieser Datentypen muss Datastream die Quelldatenbank abfragen, um fehlende LOB-Werte zu einem bestimmten Zeitpunkt abzurufen (in einem aktiven Suchprozess, der als Ergänzung bezeichnet wird). Dies geschieht in den folgenden Szenarien:

    • Wenn unveränderte LOB-Nutzlasten während eines UPDATE aus dem Redo-Log gelöscht werden
    • Während aller DML-Vorgänge mit binären XML-Typen
    • Während einer geparsten DML für eine 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 einem Einfügen möglicherweise nicht erfasst. Beachten Sie, dass DELETE-Vorgänge keine Ergänzung auslösen. Diese Einschränkung ist besonders relevant, wenn der Nur-Anhängen-Schreibmodus verwendet wird, bei dem alle Zwischenänderungen erfasst werden sollen.

  • 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 Verarbeitung der Ereignisse in nachgelagerten Systemen 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 die Replikation virtueller Spalten (GENERATED ALWAYS AS (...) VIRTUAL) nicht, da Oracle die Werte virtueller Spalten nicht auf dem Laufwerk speichert oder in Redo-Logs schreibt. Virtuelle Spalten werden im Zielschema weggelassen. Wenn eine virtuelle Spalte Teil eines zusammengesetzten Primärschlüssels ist, verwendet Datastream nur die nicht virtuellen Spalten als Primärschlüssel im Ziel. Dies kann zu Überschreibungen durch doppelte Schlüssel führen, wenn die verbleibenden Spalten nicht eindeutig sind.

  • 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 im Falle eines Rollbacks zu Datenabweichungen führen.

  • Bei Verwendung der Methode mit dem Binärleseprogramm werden dynamisch partitionierte Tabellen nicht unterstützt.

  • Wenn Sie die Oracle LogMiner-Methode verwenden, unterstützt Datastream nicht die 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 die Replikation von Datumswerten mit dem Wert „Null“ nicht. Solche Datumsangaben werden durch NULL-Werte ersetzt.

  • Datastream unterstützt keine direkte Verbindung zu Datenbanken über die SCAN-Funktion (Single Client Access Name) in Oracle Real Application Clusters (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 der Verwendung des binären Lesers

  • Die leistungsstarke Methode zum Lesen von Binärdateien 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ärleser 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 für das Binärlog-Leseprogramm unterstützt Oracle 11g und frühere Versionen nicht.

Nächste Schritte