Selbstverwaltete Oracle-Datenbank für CDC konfigurieren

Wenn Sie Change Data Capture-Updates (CDC) aus einer selbstverwalteten Oracle-Datenbank in ein unterstütztes Ziel wie BigQuery oder Cloud Storage streamen möchten, können Sie Datastream so konfigurieren, dass Ihre Redo-Logdateien mit dem Binärlog-Reader (Vorabversion) oder der LogMiner API gelesen werden. Sie bereiten Ihre Datenbank vor, indem Sie den ARCHIVELOG-Modus aktivieren, eine Richtlinie zur Datenaufbewahrung festlegen, das zusätzliche Logging aktivieren und Nutzerberechtigungen gewähren. Weitere Informationen zu diesen CDC-Methoden finden Sie unter Mit Redo-Logdateien von Oracle-Datenbanken arbeiten.

Selbstverwaltete Oracle-Datenbank für Binärlog-Reader konfigurieren

Führen Sie die folgenden Schritte aus, um Ihre selbstverwaltete Oracle-Datenbank für die Verwendung mit der CDC-Methode des Binärlog-Lesers zu konfigurieren:

  1. Erstellen Sie ein Datenbanknutzerkonto, das von Datastream für die Verbindung mit Ihrer Datenbank verwendet werden soll:

    CREATE USER USER_NAME IDENTIFIED BY USER_PASSWORD;

    Ersetzen Sie Folgendes:

    • USER_NAME: der Name des Datenbanknutzerkontos, das Sie für die Verbindung mit Ihrer Datenbank verwenden möchten.
    • USER_PASSWORD: das Passwort für das Datenbanknutzerkonto.
  2. Wählen Sie eine der folgenden Methoden aus, um auf Ihre Protokolldateien zuzugreifen:

    • Automatische Speicherverwaltung (ASM): Wenn Sie diese Option auswählen, müssen Sie eine dedizierte ASM-Verbindung erstellen und die entsprechenden Details angeben, wenn Sie Ihr Verbindungsprofil erstellen. Das für die ASM-Verbindung verwendete Nutzerkonto muss die Berechtigung SYSASM haben.

      Führen Sie die folgenden Befehle aus, um einen neuen ASM-Nutzer mit der Berechtigung SYSASM zu erstellen:

      CREATE USER ASM_USER_NAME IDENTIFIED BY ASM_PASSWORD;
      GRANT SYSASM TO ASM_USER_NAME;

      Ersetzen Sie Folgendes:

      • ASM_USER_NAME: der Name des ASM-Nutzers.
      • ASM_PASSWORD: das Passwort für den ASM-Nutzer.
    • Datenbankverzeichnisse: Wenn Sie diese Option auswählen, müssen Sie Datenbankverzeichnisobjekte erstellen, die auf die Redo-Logdateien und die archivierten Logdateien verweisen, und Ihrem Datenbanknutzer READ-Zugriff auf die Verzeichnisse gewähren:

    CREATE DIRECTORY DIRECTORY_NAME_1 as 'ONLINE_REDO_LOGS_PATH';
    CREATE DIRECTORY DIRECTORY_NAME_2 as 'ARCHIVED_REDO_LOGS_PATH';
    GRANT READ ON DIRECTORY DIRECTORY_NAME_1 to USER_NAME;
    GRANT READ ON DIRECTORY DIRECTORY_NAME_2 to USER_NAME;

    Ersetzen Sie Folgendes:

    • DIRECTORY_NAME_1: der Name des Verzeichnisses für die Online-Redo-Logdateien
    • DIRECTORY_NAME_2: der Name des Verzeichnisses für die archivierten Redo-Logdateien
    • ONLINE_REDO_LOGS_PATH: der Pfad zum Verzeichnis, in dem Online-Redo-Logdateien gespeichert werden sollen
    • ARCHIVED_REDO_LOGS_PATH: der Pfad zum Verzeichnis, in dem archivierte Logdateien gespeichert werden sollen
    • USER_NAME: der Name des zuvor erstellten Datenbank-Nutzerkontos.

    Wenn Sie die Methode Binärlog-Reader auswählen und Datenbankverzeichnisse verwenden, müssen Sie beim Erstellen des Streams die Namen der Verzeichnisse für Redo-Logs und archivierte Logs angeben.

  3. Prüfen Sie, ob die Datenbank im Modus ARCHIVELOG ausgeführt wird.

    Melden Sie sich dazu in Ihrer Oracle-Datenbank an und führen Sie bei der SQL-Eingabeaufforderung den folgenden Befehl aus:

    SELECT LOG_MODE FROM V$DATABASE;

    1. Wenn das Ergebnis ARCHIVELOG lautet, fahren Sie mit dem nächsten Schritt fort.
    2. Wenn das Ergebnis NOARCHIVELOG lautet, müssen Sie den ARCHIVELOG-Modus für Ihre Datenbank aktivieren.
    3. Führen Sie die folgenden Befehle aus, wenn Sie als SYSDBA angemeldet sind:

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
    4. Archivierte Logdateien belegen Speicherplatz. Daher sollten Sie den Parameter DB_RECOVERY_FILE_DEST_SIZE für Ihre Datenbank konfigurieren. Verwenden Sie diesen Parameter, um (in Byte) die harte Grenze für den Gesamtspeicherplatz anzugeben, der von den Wiederherstellungsdateien der Zieldatenbank verwendet werden soll. Dadurch können Sie sowohl Speicherplatzmangel bei der Datenbank als auch ein Fehlschlagen des Streams durch den Verlust der Logposition vermeiden.

  4. Legen Sie eine Richtlinie zur Datenaufbewahrung für Ihre Datenbank fest, indem Sie die folgenden RMAN-Befehle (Oracle Recovery Manager) ausführen:

    TARGET /
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

    Sie sollten Sicherungen und Archivlogs mindestens 4 Tage aufbewahren. Eine Aufbewahrung von 7 Tage wird empfohlen.

  5. Kehren Sie zum SQL-Prompt des Datenbanktools zurück, das Sie zum Konfigurieren der Rotationsrichtlinie für Oracle-Logdateien verwenden. Wir empfehlen, eine maximale Logdateigröße von höchstens 512 MB festzulegen.

  6. Aktivieren Sie zusätzliche Logdaten. Aktivieren Sie dazu zuerst das minimale zusätzliche Logging auf Datenbankebene, indem Sie den folgenden Befehl ausführen:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

    Wählen Sie als Nächstes aus, ob das Logging für bestimmte Tabellen oder für die gesamte Datenbank aktiviert werden soll.

    Führen Sie den folgenden Befehl für jede zu replizierende Tabelle aus, um Änderungen nur für bestimmte Tabellen zu protokollieren:

    ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

    Ersetzen Sie Folgendes:

    • SCHEMA: Name des Schemas, das die Tabelle enthält
    • TABLE: Name der Tabelle, für die Sie Änderungen protokollieren möchten

    Wenn Sie die meisten oder alle Tabellen in Ihrer Datenbank replizieren möchten, sollten Sie das Logging für die gesamte Datenbank aktivieren. Führen Sie den folgenden Befehl aus, um zusätzliche Logdaten für die gesamte Datenbank zu aktivieren:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  7. Gewähren Sie dem Nutzerkonto, das für die Verbindung zur Datenbank verwendet wird, die entsprechenden Berechtigungen direkt. Beachten Sie, dass diese Berechtigungen nicht funktionieren, wenn sie beispielsweise einer Rolle zugewiesen sind. Dazu müssen Sie folgende Befehle ausführen:

    GRANT SELECT ON GV_$LOG TO USER_NAME;
    GRANT SELECT ON GV_$LOGFILE TO USER_NAME;
    GRANT SELECT ON GV_$ARCHIVED_LOG TO USER_NAME;
    GRANT SELECT ON GV_$INSTANCE TO USER_NAME;
    GRANT SELECT ON GV_$STANDBY_LOG TO USER_NAME;
    GRANT SELECT ON V_$INSTANCE TO USER_NAME;
    GRANT SELECT ON V_$PDBS TO USER_NAME;
    GRANT SELECT ON V_$TRANSPORTABLE_PLATFORM TO USER_NAME;
    GRANT SELECT ON V_$DATABASE TO USER_NAME;
    GRANT SELECT ON V_$PARAMETER TO USER_NAME;
    GRANT SELECT ON COL$ TO USER_NAME;
    GRANT SELECT ON DBA_OBJECTS TO USER_NAME;
    GRANT SELECT ON DBA_TABLESPACES TO USER_NAME;
    GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
    
    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;

    Ersetzen Sie USER_NAME durch den Namen des zuvor erstellten Datenbanknutzerkontos.

Selbstverwaltete Oracle-Datenbank für LogMiner konfigurieren

  1. Erstellen Sie ein Datenbanknutzerkonto, das von Datastream für die Verbindung mit Ihrer Datenbank verwendet werden soll:

    CREATE USER USER_NAME IDENTIFIED BY USER_PASSWORD;

    Ersetzen Sie Folgendes:

    • USER_NAME: der Name des Datenbanknutzerkontos, das Sie für die Verbindung mit Ihrer Datenbank verwenden möchten.
    • USER_PASSWORD: das Passwort für das Datenbanknutzerkonto.
  2. Prüfen Sie, ob die Datenbank im Modus ARCHIVELOG ausgeführt wird.

    Melden Sie sich dazu in Ihrer Oracle-Datenbank an und führen Sie bei der SQL-Eingabeaufforderung den folgenden Befehl aus:

    SELECT LOG_MODE FROM V$DATABASE;

    1. Wenn das Ergebnis ARCHIVELOG lautet, fahren Sie mit dem nächsten Schritt fort.
    2. Wenn das Ergebnis NOARCHIVELOG lautet, müssen Sie den ARCHIVELOG-Modus für Ihre Datenbank aktivieren.
    3. Führen Sie die folgenden Befehle aus, wenn Sie als SYSDBA angemeldet sind:

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
    4. Archivierte Logdateien belegen Speicherplatz. Daher sollten Sie den Parameter DB_RECOVERY_FILE_DEST_SIZE für Ihre Datenbank konfigurieren. Verwenden Sie diesen Parameter, um (in Byte) die harte Grenze für den Gesamtspeicherplatz anzugeben, der von den Wiederherstellungsdateien der Zieldatenbank verwendet werden soll. Dadurch können Sie sowohl Speicherplatzmangel bei der Datenbank als auch ein Fehlschlagen des Streams durch den Verlust der Logposition vermeiden.

  3. Legen Sie eine Richtlinie zur Datenaufbewahrung für Ihre Datenbank fest, indem Sie die folgenden RMAN-Befehle (Oracle Recovery Manager) ausführen:

    TARGET /
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

    Sie sollten Sicherungen und Archivlogs mindestens 4 Tage aufbewahren. Eine Aufbewahrung von 7 Tage wird empfohlen.

  4. Kehren Sie zum SQL-Prompt des Datenbanktools zurück, das Sie zum Konfigurieren der Rotationsrichtlinie für Oracle-Logdateien verwenden. Wir empfehlen, eine maximale Logdateigröße von höchstens 512 MB festzulegen.

  5. Aktivieren Sie zusätzliche Logdaten. Aktivieren Sie dazu zuerst das minimale zusätzliche Logging auf Datenbankebene, indem Sie den folgenden Befehl ausführen:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

    Wählen Sie als Nächstes aus, ob das Logging für bestimmte Tabellen oder für die gesamte Datenbank aktiviert werden soll.

    Führen Sie den folgenden Befehl für jede zu replizierende Tabelle aus, um Änderungen nur für bestimmte Tabellen zu protokollieren:

    ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

    Ersetzen Sie Folgendes:

    • SCHEMA: Name des Schemas, das die Tabelle enthält
    • TABLE: Name der Tabelle, für die Sie Änderungen protokollieren möchten

    Wenn Sie die meisten oder alle Tabellen in Ihrer Datenbank replizieren möchten, sollten Sie das Logging für die gesamte Datenbank aktivieren. Führen Sie den folgenden Befehl aus, um zusätzliche Logdaten für die gesamte Datenbank zu aktivieren:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  6. Gewähren Sie dem Nutzerkonto, das für die Verbindung zur Datenbank verwendet wird, die entsprechenden Berechtigungen direkt. Beachten Sie, dass diese Berechtigungen nicht funktionieren, wenn sie beispielsweise einer Rolle zugewiesen sind. Dazu müssen Sie folgende Befehle ausführen:

    GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOG TO USER_NAME; -- for primary databases
    GRANT SELECT ON SYS.V_$STANDBY_LOG TO USER_NAME; -- for standby databases
    GRANT SELECT ON SYS.V_$LOGFILE TO USER_NAME;
    GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME;
    GRANT SELECT ON SYS.V_$PARAMETER TO USER_NAME;
    GRANT EXECUTE ON DBMS_LOGMNR TO USER_NAME;
    GRANT EXECUTE ON DBMS_LOGMNR_D TO USER_NAME;
    GRANT SELECT ANY TRANSACTION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;

    Wenn Ihre Datenbank die transparente Datenverschlüsselung (Transparent Data Encryption, TDE) verwendet, gewähren Sie die folgenden Berechtigungen:

    GRANT SELECT ON DBA_TABLESPACES TO USER_NAME;
    GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;

    Wenn Ihre Organisation die Berechtigung GRANT SELECT ANY TABLE nicht zulässt, verwenden Sie die Lösung, die im Abschnitt Oracle Change Data Capture (CDC) auf der FAQ-Seite zu Datastream beschrieben wird.

    Wenn Ihre Quelldatenbank Oracle 12c oder höher ist, gewähren Sie die folgende zusätzliche Berechtigung:

    GRANT LOGMINING TO USER_NAME;
  7. Gewähren Sie dem Nutzerkonto SELECT-Zugriff auf die Ansicht DBA_EXTENTS in Ihrer Datenbank. Mit dieser Berechtigung können Sie den ROWID-basierten Backfill für Ihre Oracle-Quelle verwenden:

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

Nächste Schritte