Mit Datastream können Sie CDC-Updates (Change Data Capture) aus einer
Amazon RDS for Oracle-Datenbank in ein unterstütztes
Ziel wie BigQuery oder
Cloud Storage streamen. Sie können die Quelle für den Binärlog
Reader
(Vorschau) oder die
LogMiner API konfigurieren, indem Sie den ARCHIVELOG Modus und die zusätzliche
Protokollierung aktivieren und Nutzerberechtigungen gewähren. Weitere Informationen zu diesen CDC
Methoden finden Sie unter Mit Redo-Logdateien von Oracle-Datenbanken arbeiten.
Amazon RDS for Oracle-Datenbank für den Binärlog-Reader konfigurieren
Bei Amazon RDS-Quellen unterstützt Datastream nur Datenbankverzeichnisobjekte als Logzugriffsmethode für den Binärlog-Reader. Sie müssen die Datenbankverzeichnisse erstellen, die auf die Online-Redo-Logdateien und die archivierten Logdateien verweisen. Die Namen dieser Verzeichnisse sind statisch und können später nicht mehr geändert werden. Sie müssen diese Namen Datastream beim Erstellen des Streams angeben.
Stellen Sie eine Verbindung zur Amazon RDS-Quellinstanz her.
Führen Sie im Terminal oder über das 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;
Prüfen Sie, ob die Datenbank im Modus
ARCHIVELOGausgefü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;- Wenn das Ergebnis
ARCHIVELOGist, fahren Sie mit Schritt c fort. - Wenn das Ergebnis
NOARCHIVELOGist, müssen Sie den ModusARCHIVELOGfür Ihre Datenbank aktivieren. - 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.
- Definieren Sie Richtlinien zur Datenaufbewahrung für Ihre Datenbank, indem Sie diesen Befehl ausführen:
Sie sollten Sicherungen und Archivlogs mindestens 4 Tage aufbewahren. Eine Aufbewahrung von 7 Tage wird empfohlen.exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
- Konfigurieren Sie die Rotationsrichtlinie für Oracle-Logdateien. Wir empfehlen, eine maximale Logdateigröße auf einen Wert unter 1 GB festzulegen.
- Wenn das Ergebnis
Aktivieren Sie zusätzliche Logdaten. Aktivieren Sie dazu zuerst die minimale zusätzliche Protokollierung 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: 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 am SQL-Prompt den folgenden Befehl aus, um zusätzliche Logdaten für die gesamte Datenbank zu aktivieren:
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
Gewähren Sie dem Datenbanknutzer die folgenden Berechtigungen:
exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$LOG','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$LOGFILE','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$ARCHIVED_LOG','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$INSTANCE','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('GV_$STANDBY_LOG','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$INSTANCE','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PDBS','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSPORTABLE_PLATFORM','USER_NAME',
'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('COL$','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_OBJECTS','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_ENCRYPTED_COLUMNS','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_EXTENTS','USER_NAME','SELECT'); 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 Nutzerkontos, mit dem Sie die Verbindung zu Ihrer Datenbank herstellen möchten.
Amazon RDS for Oracle-Datenbank für LogMiner konfigurieren
Prüfen Sie, ob die Datenbank im Modus
ARCHIVELOGausgefü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;- Wenn das Ergebnis
ARCHIVELOGist, fahren Sie mit Schritt c fort. Wenn das Ergebnis
NOARCHIVELOGist, müssen Sie den ModusARCHIVELOGfür Ihre Datenbank aktivieren.Wichtig: Damit Ihre Datenbank im Modus
ARCHIVELOGausgeführt werden kann, müssen Sie Sicherungen für die Datenbank aktivieren.Archivierte Logdateien belegen Speicherplatz. Daher sollten Sie den DB_RECOVERY_FILE_DEST_SIZE Parameter 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.
Definieren Sie Richtlinien zur Datenaufbewahrung für Ihre Datenbank, indem Sie diesen Befehl ausführen:
exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);Sie sollten Sicherungen und Archivlogs mindestens 4 Tage aufbewahren. Eine Aufbewahrung von 7 Tage wird empfohlen.
- Wenn das Ergebnis
Aktivieren Sie zusätzliche Logdaten. Aktivieren Sie dazu zuerst die minimale zusätzliche Protokollierung 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: 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 am SQL-Prompt den folgenden Befehl aus, um zusätzliche Logdaten für die gesamte Datenbank zu aktivieren:
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');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_$LOG','USER_NAME','SELECT'); -- for primary databases exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG','USER_NAME','SELECT'); -- for standby databases exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE','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('V_$PARAMETER','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 Ihre Datenbank die transparente Datenverschlüsselung (Transparent Data Encryption, TDE) verwendet, gewähren Sie die folgenden Berechtigungen:
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_ENCRYPTED_COLUMNS','USER_NAME','SELECT');
Wenn Ihre Organisation die Gewährung der
GRANT SELECT ANY TABLEBerechtigung nicht zulässt, verwenden Sie die Lösung, die im Abschnitt zu Oracle Change Data Capture (CDC) auf der Seite mit häufig gestellten Fragen 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;
Gewähren Sie dem Nutzerkonto
SELECT-Zugriff auf die AnsichtDBA_EXTENTSin Ihrer Datenbank. Mit dieser Berechtigung können Sie denROWIDbasierten Backfill für Ihre Oracle-Quelle verwenden:GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
Nächste Schritte
- Weitere Informationen zur Verwendung von Datastream mit Oracle-Quellen