Openflow Connector for Oracle:Oracleデータベースを構成する

注釈

このコネクタは、 Snowflakeコネクタ規約 に従うものとします。

注釈

|OracleOFC|には、標準のコネクタ利用規約以外の追加利用規約も適用されます。詳しくは、`Openflow Connector for Oracle Addendum<https://www.snowflake.com/en/legal/optional-offerings/offering-specific-terms/openflow-oracle-terms/>`_を参照してください。

このトピックでは、|OracleOFC|のOracleデータベースを設定する方法について説明します。

注釈

Oracleデータベースの設定は、組織のセキュリティポリシーとデータベースアーキテクチャによって異なります。たとえば、テーブルがコンテナデータベース(CDB)、プラガブルデータベース(PDB)、複数のPDBs、またはその組み合わせに存在する場合です。

このトピックで説明するステップは例のみです。環境に応じて変更します。

Oracleデータベース管理者として、ソースデータベースに対して次の手順を実行します。

  1. アーカイブREDOログの保持期間を設定する

  2. XStreamと補足ログを有効にする

  3. XStream管理者ユーザーを作成する

  4. XStream管理者権限を付与する

  5. XStreamサーバーの接続ユーザーを設定する

  6. XStreamアウトバウンドサーバーを作成する

  7. XStreamアウトバウンドサーバー接続ユーザーを設定する

  8. XStreamアウトバウンドサーバーキャプチャユーザーを設定する

注釈

このトピックのステップは、コンテナデータベース(CDB)および1つ以上のプラガブルデータベース(PDB)を使用するマルチテナントアーキテクチャ用に記述されています。Oracleデータベースがシングルテナントアーキテクチャを使用している場合は、:ref:`label-setup_xstream_single_tenant`を参照してください。

アーカイブREDOログの保持期間を設定する

変更データが複製に利用できるようにするには、``ARCHIVELOG``モードを有効にする必要があります。

OracleでAWS RDSを使用する場合は、アーカイブREDOログの保持期間も設定する必要があります。ソースデータベースの変更量とストレージ容量に基づいて、この期間を決定します。

保持期間を設定するには(例: 24時間)、以下の表の手順に従います。

データベースバージョン

プロシージャ

AWS RDS(標準)

次を実行します。

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

詳しくは、`アーカイブREDOログの保持<https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.RetainRedoLogs.html>`_を参照してください。

AWS RDSカスタム

  1. ``/opt/aws/rdscustomagent/config/redo_logs_custom_configuration.json``という名前のテキストファイルを作成します。

  2. このファイルにJSONオブジェクトを次の形式で追加します。{"archivedLogRetentionHours" : "24"}

詳しくは、`OracleインスタンスのRDSカスタムの復元<https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-backup.pitr.html>`_を参照してください。

XStreamと補足ログを有効にする

注釈

XStreamはOracle Databaseに含まれており、追加のソフトウェアは必要ありません。

変更データをキャプチャしてストリームするようにXStreamの複製を有効にして構成するには、以下のコマンドを実行します。

  1. XStream複製を有効にする

ALTER SYSTEM SET enable_goldengate_replication=TRUE SCOPE=BOTH;

ALTER SYSTEM SET STREAMS_POOL_SIZE = 2560M;
Copy

注釈

Snowflakeは、ストリームのプールサイズを2.5GBに設定することをお勧めします。この割り当ては、次をカバーします。

  • キャプチャの1GB

  • 適用の1GB

  • 追加の25%のバッファー

REDOログが論理複製に必要な情報を確実にキャプチャするように補足ログを有効にするには、次のコマンドを実行します。

  1. 次の例に示すように、データベースがARCHIVELOGモードであることを確認します。

    SELECT LOG_MODE, FORCE_LOGGING FROM V$DATABASE;
    
    Copy

    Snowflakeでは、データベースまたはテーブルスペースレベルでのログを強制することを推奨します。

  2. コンテナをルートコンテナに設定し、データベースに補足ログを追加します。

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

    あるいは、次の例に示すように、特定のテーブルでのみログを有効にすることもできます。

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

XStream管理者ユーザーを作成する

アウトバウンドサーバーの作成と変更を含む、XStreamコンポーネントを管理するには、XStream管理者ユーザーが必要です。必要なXStream管理権限が付与されていれば、この目的のための専用ユーザーを作成することも、既存のユーザーを使用することもできます(次のセクションを参照)。

次の例では、CDBのルートコンテナにおける専用のXStream管理者ユーザーの設定について詳しく説明します。

注釈

次の例では、データベースに、複製されるテーブルを含むPDBもあることを想定しています。

SYSDBA、または適切な権限を持つユーザーとして接続し、次のコマンドを実行します。

-- 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

XStream管理者権限を付与する

Oracle Databaseバージョンに基づいて、必要な権限をXStream管理者ユーザーに付与します。

  • Oracle Database 19cおよび21c

    1. SYSDBA、または適切な権限を持つユーザーとして接続します。

    2. 次のコマンドを実行して、必要なシステム権限をXStream管理者に付与します。

      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
  • Oracle Database 23c

    1. SYSDBA、または適切な権限を持つユーザーとして接続します。

    2. 次のコマンドを実行して、Oracle Database 23cに必要なシステム権限とXStreamロールを付与します。

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

XStreamサーバーの接続ユーザーを設定する

Snowflake Openflow Connectorでは、専用の接続ユーザーを利用してXStreamアウトバウンドサーバーへの接続を確立し、変更データを受信します。このユーザーには、複製を容易にするための特定の権限が必要です。

  • XStreamアウトバウンドサーバーからの読み取り:ユーザーは、構成されたXStreamアウトバウンドサーバーから変更データストリームにアクセスできる必要があります。

  • データディクショナリビューからの選択:接続ユーザーは、さまざまなデータディクショナリビューへのSELECTアクセスを必要とします。これは、SELECT_CATALOG_ROLEまたはSELECT ANY DICTIONARYを付与することで実現できます。会社のポリシーによりSELECT ANY DICTIONARYを付与することが望ましくない場合、ユーザーには特に次のビューへのSELECTアクセスが必要です。

    • ALL_USERS

    • ALL_TABLES

    • ALL_TAB_COLS

    • ALL_CONS_COLUMNS

    • ALL_CONSTRAINTS

    • V$DATABASE

  • ソーステーブルからの選択:ユーザーには、複製を目的とするすべてのテーブルに対するSELECT権限が必要です。

以下は、CDBのルートコンテナでそのようなユーザーを設定する方法の例です。この例では、データベースに、複製されるテーブルを含むPDBもあることを前提としています。

-- 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

XStreamアウトバウンドサーバーを作成する

XStreamアウトバウンドサーバーは、Openflow Connectorで利用するために、REDOログから変更内容をキャプチャします。複製するスキーマまたはテーブルを定義します。詳しくは、`DBMS_XSTREAM_ADM.CREATE_OUTBOUNDドキュメント<https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_XSTREAM_ADM.html#GUID-A602ED86-0F5A-4A27-92A0-55D5ADC0AF0D>`_を参照してください。

複製範囲に関する重要な考慮事項:

  • テーブルがXStreamアウトバウンドフィルタリングルールコマンドに含まれている場合、そのテーブルは複製されません。

  • ここに含まれるテーブルまたはスキーマは、複製されるためにコネクタパラメーターでも定義されている必要があります。サーバーフィルタリングルールにスキーマ全体を含めておき、後でコネクタパラメーターにおいて、そのスキーマ内の特定のテーブルのみを複製対象として指定することができます。

注釈

XStreamアウトバウンドサーバーは、ルートコンテナからのみ作成できます。ただし、Oracle Databaseバージョン23aiからは、PDBレベルで作成することもできます。

以下は、さまざまな複製のニーズに基づいてXStreamアウトバウンドサーバーを設定する方法の3つの例です。実際には、実稼働環境でXStreamアウトバウンドサーバーを設定する際、どの変更をキャプチャするかを慎重に選択する必要があります。すべてをキャプチャすると、データベースのパフォーマンスとリソースの使用量に重大な影響を与える可能性があります。CPUやネットワークへの大きな影響を回避し、キューが無関係なデータでいっぱいになるのを防ぐためには、きめ細かいアプローチを使用することが不可欠です。これを行うための最良の方法はDBMS_XSTREAM_ADM.ADD_TABLE_RULESプロシージャを使用することです。これにより、必要なテーブルだけを具体的に選択できます。

XStreamアウトバウンドサーバーの構成方法の詳しくは、Oracleのドキュメントを参照してください。`XStream Outを設定する<https://docs.oracle.com/en/database/oracle/oracle-database/19/xstrm/configuring-xstream-out.html#GUID-A1C8430E-565B-4F66-8E00-495F283AAAFB>`_

例1: ルートコンテナおよび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

例2: プラガブルデータベース(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

XStreamアウトバウンドサーバー接続ユーザーを設定する

XStreamアウトバウンドサーバーで接続ユーザーを設定します。これにより、以前に作成された接続ユーザーがXStreamアウトバウンドサーバー(XOUT1)に関連付けられ、変更データを受信できるようになります。

注釈

次の例では、接続ユーザーがc##connectuserであると想定しています。

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

XStreamアウトバウンドサーバーキャプチャユーザーを設定する

別のキャプチャユーザーを設定した場合は、それを使用するようにXStreamアウトバウンドサーバーを構成します。これにより、専用のキャプチャユーザーがXStreamアウトバウンドサーバー(XOUT1)に関連付けられ、変更データをキャプチャできるようになります。

サーバーを作成したときと同じユーザー(管理者)によってデータがキャプチャされる場合は、このステップをスキップします。

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

シングルテナントデータベースのXStreamを設定する

Oracle 12c以降のデフォルトアーキテクチャは、コンテナデータベース(CDB)および1つ以上のプラガブルデータベース(PDB)を使用するマルチテナントアーキテクチャです。

Oracleデータベースがシングルテナントアーキテクチャを使用している場合は、XStreamを設定する際の次の違いに注意してください。

  • ``ALTER SESSION SET CONTAINER``コマンドは使用しないでください。シングルテナントデータベースにはインスタンスが1つしかないため、コンテナの切り替えは適用されません。

  • ``xstream_adm_tbs``テーブルスペースは1つのみ作成します。PDBに2番目のテーブルスペースを作成しないでください。

  • ユーザー名に``C##``プレフィックスを使用しないでください。たとえば、``c##xstreamadmin``の代わりに``xstreamadmin``を、``c##connectuser``の代わりに``connectuser``を作成します。``C##``プレフィックスはマルチテナント環境でのみ必要です。

  • どのコマンドにも``CONTAINER=ALL``または``container => 'ALL'``を含めないでください。これらの句は、複数のコンテナにまたがる権限を付与するものであり、シングルテナントのデータベースには適用されません。

次のステップ

コネクタを構成する