Amazon RDS-Oracle-Datenbank konfigurieren

Sie können Ihre Oracle-Quelldatenbank für die Verwendung mit den folgenden CDC-Methoden konfigurieren:

Weitere Informationen zum Binärprotokollleser und zur LogMiner API finden Sie unter Mit Redo-Logdateien der Oracle-Datenbank arbeiten.

Eine detaillierte Anleitung zum Konfigurieren Ihrer Oracle-Quelldatenbank für jede dieser Methoden finden Sie in den folgenden Abschnitten.

Amazon RDS-Oracle-Datenbank für Binärleseprogramm konfigurieren

Bei Amazon RDS-Quellen unterstützt Datastream nur Datenbankverzeichnisobjekte als Protokollzugriffsmethode für den Binärprotokollleser. Sie müssen die Datenbankverzeichnisse erstellen, die auf die Online-Redo-Logdateien und die archivierten Protokolldateien verweisen. Die Namen dieser Verzeichnisse sind statisch und können später nicht mehr geändert werden. Sie müssen diese Namen bei der Erstellung des Streams angeben.

  1. Stellen Sie eine Verbindung zu Ihrer Quell-Amazon RDS-Instanz her.

  2. Führen Sie im Terminal oder im Amazon RDS-Dashboard die folgenden Befehle aus:

    BEGIN
    rdsadmin.rdsadmin_master_util.create_archivelog_dir;
    END;
    BEGIN
    rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
    END;
    COMMIT;
    GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME;
    GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME;
  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 an der SQL-Eingabeaufforderung den folgenden Befehl aus:

    SELECT LOG_MODE FROM V$DATABASE;

    1. Wenn das Ergebnis ARCHIVELOG ist, fahren Sie mit Schritt c fort.
    2. Wenn das Ergebnis NOARCHIVELOG ist, müssen Sie den ARCHIVELOG-Modus für Ihre Datenbank aktivieren.
    3. 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. Durch Festlegen dieses Parameters können Sie den Kompromiss zwischen dem Schutz der Datenbank vor einem Speicherplatzmangel und dem Absturz des Streams aufgrund des Verlusts der Protokollposition verwalten.
    4. Führen Sie den folgenden Befehl aus, um eine Datenaufbewahrungsrichtlinie für die Datenbank zu definieren:
      exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
      Wir empfehlen, Sicherungen und Archivlogs mindestens 4 Tage aufzubewahren. 7 Tage wird empfohlen.
    5. Konfigurieren Sie die Rotationsrichtlinie für Oracle-Logdateien. Wir empfehlen, eine maximale Logdateigröße von weniger als 1 GB festzulegen.
  4. Aktivieren Sie zusätzliche Logdaten. Aktivieren Sie dazu zuerst das minimale zusätzliche Logging auf Datenbankebene, indem Sie den folgenden Befehl ausführen:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');

    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: der Name des Schemas, das die Tabelle enthält.
    • TABLE: Der Name der Tabelle, für die Änderungen protokolliert werden sollen.

    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 an der SQL-Eingabeaufforderung den folgenden Befehl aus, um zusätzliche Logdaten für die gesamte Datenbank zu aktivieren:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
  5. Gewähren Sie dem Datenbanknutzer die folgenden Berechtigungen:

    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','USER_NAME','SELECT');
    GRANT SELECT ANY TRANSACTION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

    Ersetzen Sie USER_NAME durch den Namen des Nutzerkontos, mit dem Sie eine Verbindung zu Ihrer Datenbank herstellen möchten.

Amazon RDS-Oracle-Datenbank für LogMiner konfigurieren

  1. 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 an der SQL-Eingabeaufforderung den folgenden Befehl aus:

    SELECT LOG_MODE FROM V$DATABASE;

    1. Wenn das Ergebnis ARCHIVELOG ist, fahren Sie mit Schritt c fort.
    2. Wenn das Ergebnis NOARCHIVELOG ist, müssen Sie den ARCHIVELOG-Modus für Ihre Datenbank aktivieren.
    3. 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. Durch Festlegen dieses Parameters können Sie den Kompromiss zwischen dem Schutz der Datenbank vor einem Speicherplatzmangel und dem Absturz des Streams aufgrund des Verlusts der Protokollposition verwalten.
    4. Führen Sie den folgenden Befehl aus, um eine Datenaufbewahrungsrichtlinie für die Datenbank zu definieren:
      exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
      Wir empfehlen, Sicherungen und Archivlogs mindestens 4 Tage aufzubewahren. 7 Tage wird empfohlen.
    5. Konfigurieren Sie die Rotationsrichtlinie für Oracle-Logdateien. Wir empfehlen, eine maximale Logdateigröße von weniger als 1 GB festzulegen.
  2. Aktivieren Sie zusätzliche Logdaten. Aktivieren Sie dazu zuerst das minimale zusätzliche Logging auf Datenbankebene, indem Sie den folgenden Befehl ausführen:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');

    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: der Name des Schemas, das die Tabelle enthält.
    • TABLE: Der Name der Tabelle, für die Änderungen protokolliert werden sollen.

    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 an der SQL-Eingabeaufforderung den folgenden Befehl aus, um zusätzliche Logdaten für die gesamte Datenbank zu aktivieren:

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
  3. Gewähren Sie dem Nutzerkonto die entsprechenden Berechtigungen, mit dem Sie die Verbindung zu Ihrer Datenbank herstellen. 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;
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR','USER_NAME','EXECUTE');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR_D','USER_NAME','EXECUTE');
    GRANT SELECT ANY TRANSACTION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;

    Wenn in Ihrer Organisation die GRANT SELECT ANY TABLE-Berechtigung nicht gewährt werden darf, verwenden Sie die Lösung, die im Abschnitt Oracle Change Data Capture (CDC) auf der Seite mit den FAQs 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;
  4. Gewähren Sie dem Nutzerkonto SELECT Zugriff auf die Ansicht DBA_EXTENTS in Ihrer Datenbank. Mit diesem Berechtigung können Sie das ROWID-basierte Backfill für Ihre Oracle-Quelle verwenden:

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

Nächste Schritte