Openflow Connector for Oracle: Konfigurieren der Oracle-Datenbank

Bemerkung

Der Openflow Connector for Oracle unterliegt zusätzlichen Nutzungsbedingungen, die über die Standardnutzungsbedingungen für Konnektoren hinausgehen. Weitere Informationen dazu finden Sie unter Openflow Connector für Oracle-Zusatz.

Unter diesem Thema wird beschrieben, wie Sie die Oracle-Datenbank für den Openflow Connector for Oracle einrichten.

Bemerkung

Das Einrichten Ihrer Oracle-Datenbank hängt von den Sicherheitsrichtlinien Ihrer Organisation und der Datenbankarchitektur ab. Also davon, ob sich Tabellen in einer Container Database (CDB ), einer Pluggable Database (PDB ), mehrerenPDBs oder einer Kombination befinden.

Die unter diesem Thema angegebenen Schritte sind nur Beispiele. Ändern Sie diese je nach Ihrer Umgebung.

Führen Sie als Oracle-Datenbankadmin die folgenden Prozeduren für Ihre Quelldatenbank aus:

  1. Konfigurieren der Aufbewahrungsfrist für archivierte Redo-Protokolle

  2. Aktivieren von XStream und zusätzlicher Protokollierung

  3. Erstellen des XStream-Admins

  4. Gewähren von XStream-Administratorberechtigungen

  5. Konfigurieren des Connector-Benutzerenden für den XStream-Server

  6. Erstellen eines XStream-Ausgangsservers

  7. Einrichten des Connector-Benutzers für den XStream-Ausgangsserver

  8. Einrichten eines Capture-Benutzers für den XStream-Ausgangsserver

Bemerkung

Die Schritte unter diesem Thema wurden für eine Multi-Tenant-Architektur mit einer Container Database (CDB) und einer oder mehreren Pluggable Databases (PDB) geschrieben. Wenn Ihre Oracle-Datenbank eine Single-Tenant-Architektur verwendet, finden Sie entsprechende Informationen unter Einrichten von XStream für Single-Tenant-Datenbanken.

Konfigurieren der Aufbewahrungsfrist für archivierte Redo-Protokolle

Sie müssen den ARCHIVELOG-Modus aktivieren, um sicherzustellen, dass Änderungsdaten für die Replikation verfügbar sind.

Wenn Sie AWS RDS für Oracle verwenden, müssen Sie auch die Aufbewahrungsfrist für archivierte Redo-Protokolle konfigurieren. Bestimmen Sie diesen Zeitraum auf Grundlage des Umfangs der Änderungen in der Quelldatenbank und Ihrer Speicherkapazität.

Um die Aufbewahrungsfrist z. B. auf 24 Stunden einzustellen, gehen Sie wie in der folgenden Tabelle beschrieben vor:

Datenbankversion

Prozedur

AWS RDS (Standard)

Führen Sie Folgendes aus:

begin
    rdsadmin.rdsadmin_util.set_configuration(
        name  => 'archivelog retention hours',
        value => '24');
end;
/
commit;
Copy

Weitere Informationen dazu finden Sie im Abschnitt zur Aufbewahrung archivierter Redo-Protokolle.

AWS RDS Custom

  1. Erstellen Sie eine Textdatei namens /opt/aws/rdscustomagent/config/redo_logs_custom_configuration.json.

  2. Fügen Sie ein JSON-Objekt zu dieser Datei im folgenden Format hinzu: {"archivedLogRetentionHours" : "24"}.

Weitere Informationen dazu finden Sie im Abschnitt zum Wiederherstellen einerRDS Custom for Oracle-Instanz.

Aktivieren von XStream und zusätzlicher Protokollierung

Bemerkung

XStream ist in Oracle Database enthalten und erfordert keine zusätzliche Software.

Um die XStream-Replikation zum Erfassen und Streamen von Änderungsdaten zu aktivieren und konfigurieren, führen Sie die folgenden Befehle aus:

  1. Aktivieren der XStream-Replikation:

ALTER SYSTEM SET enable_goldengate_replication=TRUE SCOPE=BOTH;

ALTER SYSTEM SET STREAMS_POOL_SIZE = 2560M;
Copy

Bemerkung

Snowflake empfiehlt, die Größe des Streampools auf 2,5 GB festzulegen. Diese Zuteilung deckt Folgendes ab:

  • 1 GB für Capture

  • 1 GB für Apply

  • Ein zusätzlicher Puffer von 25 %

Um die zusätzliche Protokollierung zu aktivieren, um sicherzustellen, dass die Redo-Protokolle die für die logische Replikation erforderlichen Informationen erfassen, führen Sie die folgenden Befehle aus:

  1. Stellen Sie sicher, dass sich die Datenbank im ARCHIVELOG-Modus befindet, wie im folgenden Beispiel gezeigt:

    SELECT LOG_MODE, FORCE_LOGGING FROM V$DATABASE;
    
    Copy

    Snowflake empfiehlt, die Protokollierung auf Datenbank- oder Tabellenbereichsebene zu erzwingen.

  2. Setzen Sie den Container auf den Stammcontainer und fügen Sie eine zusätzliche Protokollierung der Datenbank hinzu:

    ALTER SESSION SET CONTAINER = CDB$ROOT;
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    
    Copy

    Alternativ können Sie die Protokollierung auch nur für bestimmte Tabellen aktivieren, wie im folgenden Beispiel gezeigt:

    ALTER TABLE schema_name.table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    
    Copy

Erstellen des XStream-Admins

Ein XStream-Admin ist erforderlich, um XStream-Komponenten, einschließlich der Erstellung und Änderung von Ausgangsservern, zu verwalten. Sie können entweder einen dedizierten Benutzer für diese Zweck anlegen oder einen bestehenden Benutzer verwenden, sofern die erforderlichen XStream-Administrationsberechtigungen gewährt werden (siehe nächster Abschnitt).

Das folgende Beispiel zeigt die Einrichtung eines dedizierten XStream-Admins im Stammcontainer einer CDB.

Bemerkung

Im folgenden Beispiel wird davon ausgegangen, dass die Datenbank auch eine PDB mit den zu replizierenden Tabellen enthält.

Verbinden Sie sich als SYSDBA oder als Benutzender mit entsprechenden Berechtigungen und führen Sie die folgenden Befehle aus:

-- Switch to the root container.
ALTER SESSION SET CONTAINER = CDB$ROOT;

--  Create a tablespace for the XStream administrator user.
CREATE TABLESPACE xstream_adm_tbs DATAFILE '/path/to/your/cdb/xstream_adm_tbs.dbf'
   SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

-- Switch to the Pluggable Database (PDB) and create a tablespace there.
ALTER SESSION SET CONTAINER = YOUR_PDB_NAME;

CREATE TABLESPACE xstream_adm_tbs DATAFILE '/path/to/your/pdb/xstream_adm_tbs.dbf'
   SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

-- Switch back to the root container to create the common user.
ALTER SESSION SET CONTAINER = CDB$ROOT;

-- Create the XStream administrator user.
-- Note  'c##' prefix indicates a common user in a CDB environment, and CONTAINER=ALL grants privileges across all containers.
-- Replace "YOUR_XSTREAM_ADMIN_PASSWORD" with a strong, secure password.

CREATE USER c##xstreamadmin IDENTIFIED BY "YOUR_XSTREAM_ADMIN_PASSWORD"
   DEFAULT TABLESPACE xstream_adm_tbs
   QUOTA UNLIMITED ON xstream_adm_tbs
   CONTAINER=ALL;
Copy

Gewähren von XStream-Administratorberechtigungen

Gewähren Sie die erforderlichen Berechtigungen für den XStream-Admin, basierend auf Ihrer Oracle Database-Version.

  • Für Oracle Database 19c und 21c

    1. Verbinden Sie sich als SYSDBA oder als Benutzender mit entsprechenden Berechtigungen.

    2. Gewähren Sie dem XStream-Admin die erforderlichen Systemberechtigungen, indem Sie den folgenden Befehl ausführen:

      GRANT CREATE SESSION, SET CONTAINER, EXECUTE ANY PROCEDURE, LOGMINING TO c##xstreamadmin CONTAINER=ALL;
      
      -- Grant XStream administration privileges using DBMS_XSTREAM_AUTH.
      -- This procedure grants the necessary permissions to manage XStream capture processes across all containers.
      
      BEGIN
        DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE(
          grantee                 => 'c##xstreamadmin',
          privilege_type          => 'CAPTURE',
          grant_select_privileges => TRUE,
          container               => 'ALL');
      END;
      /
      
      Copy
  • Für Oracle Database 23c

    1. Verbinden Sie sich als SYSDBA oder als Benutzender mit entsprechenden Berechtigungen.

    2. Gewähren Sie die erforderlichen Systemberechtigungen undXStream-Rollen für Oracle Database 23c, indem Sie den folgenden Befehl ausführen:

      GRANT CREATE SESSION, SET CONTAINER, EXECUTE ANY PROCEDURE, LOGMINING, XSTREAM_CAPTURE
        TO c##xstreamadmin CONTAINER=ALL;
      
      Copy

Konfigurieren des Connector-Benutzerenden für den XStream-Server

Der Snowflake Openflow Connector verwendet einen dedizierten Connector-Benutzer, um eine Verbindung zum XStream-Ausgangsserver herzustellen und Änderungsdaten zu empfangen. Dieser Benutzer benötigt bestimmte Berechtigungen, um die Replikation zu vereinfachen:

  • Lesen vom XStream-Ausgangsserver: Der Benutzer muss in der Lage sein, vom konfigurierten XStream-Ausgangsserver auf den Änderungsdatenstream zuzugreifen.

  • Auswahl aus Data Dictionary-Ansichten: Der Connector-Benutzer benötigt SELECT-Zugriff auf verschiedene Data Dictionary-Ansichten. Dies kann durch das Gewähren von SELECT_CATALOG_ROLE oder SELECTANYDICTIONARY erreicht werden. Wenn das Gewähren von SELECT ANY DICTIONARY aufgrund von Unternehmensrichtlinien nicht erwünscht ist, benötigt der Benutzer ausdrücklich SELECT-Zugriff auf die folgenden Ansichten:

    • ALL_USERS

    • ALL_TABLES

    • ALL_TAB_COLS

    • ALL_CONS_COLUMNS

    • ALL_CONSTRAINTS

    • V$DATABASE

  • Auswahl aus Quelltabellen: Der Benutzer muss SELECT-Berechtigungen für alle Tabellen haben, die für die Replikation vorgesehen sind.

Im Folgenden finden Sie ein Beispiel dafür, wie Sie einen solchen Benutzer im Stammcontainer der CDB einrichten. Im Beispiel wird davon ausgegangen, dass die Datenbank auch eine PDB mit den zu replizierenden Tabellen enthält.

-- Connect as SYSDBA or a user with appropriate privileges
-- Switch to the root container.

ALTER SESSION SET CONTAINER = CDB$ROOT;

-- Create the connect user.
-- Replace "YOUR_CAPTURE_USER_PASSWORD" with a strong, secure password.
CREATE USER c##connectuser IDENTIFIED BY "YOUR_CAPTURE_USER_PASSWORD"
    CONTAINER=ALL;

-- Grant necessary privileges to the connect user.
-- You can choose to grant access to specific tables
-- instead of SELECT ANY TABLE for more granular control,
-- for example, GRANT SELECT ON schema.table TO c##connectuser;
GRANT CREATE SESSION, SELECT_CATALOG_ROLE TO c##connectuser CONTAINER=ALL;
GRANT SELECT ANY TABLE TO c##connectuser CONTAINER=ALL;
GRANT LOCK ANY TABLE TO c##connectuser CONTAINER=ALL;
Copy

Erstellen eines XStream-Ausgangsservers

Der XStream-Ausgangsserver erfasst Änderungen aus Redo-Protokollen für die Nutzung durch den Openflow Connector. Definieren Sie, welche Schemas oder Tabellen repliziert werden sollen. Weitere Informationen finden Sie unter DBMS_XSTREAM_ADM.CREATE_OUTBOUND. Dokumentation.

Wichtige Hinweise zum Replikationsbereich:

  • Wenn eine Tabelle im Befehl zu Filterregeln für den XStream-Ausgangsserver enthalten ist, wird sie nicht repliziert.

  • Tabellen oder Schemas, die hier enthalten sind, müssen auch in den Connector-Parametern definiert sein, damit sie repliziert werden. Sie können ein gesamtes Schema in die Filterregeln des Servers aufnehmen und später in den Connector-Parametern nur bestimmte Tabellen innerhalb dieses Schemas für die Replikation angeben.

Bemerkung

Der XStream-Ausgangsserver kann nur über den Stammcontainer erstellt werden. Ab Oracle Database Version 23ai kann er jedoch auch auf PDB-Ebene erstellt werden.

Im Folgenden finden Sie drei Beispiele für die Einrichtung des XStream-Ausgangsservers, basierend auf unterschiedlichen Replikationsanforderungen. In der Praxis sollten Sie beim Einrichten des XStream-Ausgangsservers für Ihre Produktionsumgebung gezielt angeben, welche Änderungen Sie erfassen möchten. Wenn Sie alles erfassen, kann dies schwerwiegende Folgen für die Leistung Ihrer Datenbank und die Ressourcennutzung haben. Um einen erheblichen Einfluss auf Ihre CPU und Ihr Netzwerk zu vermeiden und zu verhindern, dass Ihre Warteschlangen mit irrelevanten Daten gefüllt werden, ist ein granularer Ansatz unerlässlich. Am besten eignet sich hierfür die DBMS_XSTREAM_ADM.ADD_TABLE_RULES-Prozedur, mit der Sie nur die Tabellen auswählen können, die Sie benötigen.

Weitere Informationen zur Konfiguration des XStream-Ausgangsservers finden Sie in der Oracle-Dokumentation: Konfigurieren des XStream-Ausgangsservers.

Beispiel 1: Erfassen aller Tabellen aus allen Schemas im Stammcontainer und allen PDBs

-- Connect as a user with XStream admin privileges to the root container.
-- Ensure serveroutput is enabled to see messages from the PL/SQL block.
SET SERVEROUTPUT ON;

DECLARE
    tables  DBMS_UTILITY.UNCL_ARRAY;
    schemas DBMS_UTILITY.UNCL_ARRAY;
BEGIN
   -- To replicate all tables in all schemas across all containers, set both to NULL.
   tables(1) := NULL;
   schemas(1) := NULL;
   DBMS_XSTREAM_ADM.CREATE_OUTBOUND(
       server_name => 'XOUT1',
       table_names => tables,
       schema_names => schemas,
       include_ddl => TRUE
   );
   DBMS_OUTPUT.PUT_LINE('XStream Outbound Server created.');
   EXCEPTION
   WHEN OTHERS THEN
       DBMS_OUTPUT.PUT_LINE('Error creating XStream Outbound Server: ' || SQLERRM);
       RAISE;
END;
/
Copy

Beispiel 2: Erfassen aller Tabellen aus einem einzigen Schema in einer Pluggable Database (PDB)

-- Connect as a user with XStream admin privileges to the root container.
-- Ensure serveroutput is enabled to see messages from the PL/SQL block.
SET SERVEROUTPUT ON;

DECLARE
    tables  DBMS_UTILITY.UNCL_ARRAY;
    schemas DBMS_UTILITY.UNCL_ARRAY;
BEGIN
    -- To replicate all tables in a schemas in the single PDB, set source_container_name.
    tables(1) := NULL;
    schemas(1) := 'schema_name';
    DBMS_XSTREAM_ADM.CREATE_OUTBOUND(
        server_name => 'XOUT1',
        table_names => tables,
        schema_names => schemas,
        include_ddl => TRUE,
        source_container_name => 'YOUR_PDB_NAME'
    );
    DBMS_OUTPUT.PUT_LINE('XStream Outbound Server created.');
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error creating XStream Outbound Server: ' || SQLERRM);
      RAISE;
END;
/
Copy

Einrichten des Connector-Benutzers für den XStream-Ausgangsserver

Legen Sie den Connector-Benutzer für den XStream-Ausgangsserver fest. Dadurch wird sichergestellt, dass der zuvor erstellte Connector-Benutzer mit dem XStreamAusgangsserver (XOUT1) verknüpft ist, sodass er Änderungsdaten empfangen kann.

Bemerkung

Im folgenden Beispiel wird davon ausgegangen, dass der Connector-Benutzer „c##connectuser“ ist.

BEGIN
    DBMS_XSTREAM_ADM.ALTER_OUTBOUND(
        server_name  => 'XOUT1',
        connect_user => 'c##connectuser');
   END;
/
Copy

Einrichten eines Capture-Benutzers für den XStream-Ausgangsserver

Wenn Sie einen separaten Capture-Benutzer konfiguriert haben, konfigurieren Sie den XStream-Ausgangsserver entsprechend für dessen Verwendung. Dadurch wird sichergestellt, dass der dedizierte Capture-Benutzer mit dem XStream-Ausgangsserver (XOUT1) verknüpft ist, sodass er Änderungsdaten erfassen kann.

Wenn Sie möchten, dass die Daten von demselben Benutzer erfasst werden, der den Server erstellt hat (der Admin), überspringen Sie diesen Schritt.

BEGIN
    DBMS_XSTREAM_ADM.ALTER_OUTBOUND(
        server_name  => 'XOUT1',
      capture_user => 'yourcaptureuser');
END;
/
Copy

Einrichten von XStream für Single-Tenant-Datenbanken

Die Standardarchitektur für Oracle 12c und höher ist eine Multi-Tenant-Architektur mit einer Container Database (CDB) und einer oder mehreren Pluggable Databases (PDB).

Wenn Ihre Oracle-Datenbank eine Single-Tenant-Architektur verwendet, beachten Sie die folgenden Unterschiede beim Einrichten vonXStream:

  • Verwenden Sie keine ALTER SESSION SET CONTAINER-Befehle. In einer Single-Tenant-Datenbank gibt es nur eine Instanz, sodass kein Containerwechsel möglich ist.

  • Erstellen Sie nur einen``xstream_adm_tbs``-Tabellenbereich. Erstellen Sie keinen zweiten Tabellenbereich in einer PDB.

  • Verwenden Sie nicht das C##-Präfix für Benutzernamen. Erstellen Sie zum Beispiel``xstreamadmin`` anstelle von``c##xstreamadmin`` und``connectuser`` anstelle von``c##connectuser``. Das``C##``-Präfix ist nur in Multi-Tenant-Umgebungen erforderlich.

  • Schließen Sie nicht CONTAINER=ALL oder``container => ‚ALL‘`` in Befehle ein. Diese Klauseln gewähren Berechtigungen für mehrere Container und gelten nicht für Single-Tenant-Datenbanken.

Nächste Schritte

Konnektor konfigurieren