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データベース管理者として、ソースデータベースに対して次の手順を実行します。
注釈
このトピックのステップは、コンテナデータベース(CDB)および1つ以上のプラガブルデータベース(PDB)を使用するマルチテナントアーキテクチャ用に記述されています。Oracleデータベースがシングルテナントアーキテクチャを使用している場合は、:ref:`label-setup_xstream_single_tenant`を参照してください。
アーカイブREDOログの保持期間を設定する¶
変更データが複製に利用できるようにするには、``ARCHIVELOG``モードを有効にする必要があります。
OracleでAWS RDSを使用する場合は、アーカイブREDOログの保持期間も設定する必要があります。ソースデータベースの変更量とストレージ容量に基づいて、この期間を決定します。
保持期間を設定するには(例: 24時間)、以下の表の手順に従います。
データベースバージョン |
プロシージャ |
|---|---|
AWS RDS(標準) |
次を実行します。
詳しくは、`アーカイブREDOログの保持<https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.RetainRedoLogs.html>`_を参照してください。 |
AWS RDSカスタム |
詳しくは、`OracleインスタンスのRDSカスタムの復元<https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-backup.pitr.html>`_を参照してください。 |
XStreamと補足ログを有効にする¶
注釈
XStreamはOracle Databaseに含まれており、追加のソフトウェアは必要ありません。
変更データをキャプチャしてストリームするようにXStreamの複製を有効にして構成するには、以下のコマンドを実行します。
XStream複製を有効にする
ALTER SYSTEM SET enable_goldengate_replication=TRUE SCOPE=BOTH;
ALTER SYSTEM SET STREAMS_POOL_SIZE = 2560M;
注釈
Snowflakeは、ストリームのプールサイズを2.5GBに設定することをお勧めします。この割り当ては、次をカバーします。
キャプチャの1GB
適用の1GB
追加の25%のバッファー
REDOログが論理複製に必要な情報を確実にキャプチャするように補足ログを有効にするには、次のコマンドを実行します。
次の例に示すように、データベースがARCHIVELOGモードであることを確認します。
SELECT LOG_MODE, FORCE_LOGGING FROM V$DATABASE;
Snowflakeでは、データベースまたはテーブルスペースレベルでのログを強制することを推奨します。
コンテナをルートコンテナに設定し、データベースに補足ログを追加します。
ALTER SESSION SET CONTAINER = CDB$ROOT; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
あるいは、次の例に示すように、特定のテーブルでのみログを有効にすることもできます。
ALTER TABLE schema_name.table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
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;
XStream管理者権限を付与する¶
Oracle Databaseバージョンに基づいて、必要な権限をXStream管理者ユーザーに付与します。
Oracle Database 19cおよび21c
SYSDBA、または適切な権限を持つユーザーとして接続します。
次のコマンドを実行して、必要なシステム権限を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; /
Oracle Database 23c
SYSDBA、または適切な権限を持つユーザーとして接続します。
次のコマンドを実行して、Oracle Database 23cに必要なシステム権限とXStreamロールを付与します。
GRANT CREATE SESSION, SET CONTAINER, EXECUTE ANY PROCEDURE, LOGMINING, XSTREAM_CAPTURE TO c##xstreamadmin CONTAINER=ALL;
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;
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;
/
例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;
/
XStreamアウトバウンドサーバー接続ユーザーを設定する¶
XStreamアウトバウンドサーバーで接続ユーザーを設定します。これにより、以前に作成された接続ユーザーがXStreamアウトバウンドサーバー(XOUT1)に関連付けられ、変更データを受信できるようになります。
注釈
次の例では、接続ユーザーがc##connectuserであると想定しています。
BEGIN
DBMS_XSTREAM_ADM.ALTER_OUTBOUND(
server_name => 'XOUT1',
connect_user => 'c##connectuser');
END;
/
XStreamアウトバウンドサーバーキャプチャユーザーを設定する¶
別のキャプチャユーザーを設定した場合は、それを使用するようにXStreamアウトバウンドサーバーを構成します。これにより、専用のキャプチャユーザーがXStreamアウトバウンドサーバー(XOUT1)に関連付けられ、変更データをキャプチャできるようになります。
サーバーを作成したときと同じユーザー(管理者)によってデータがキャプチャされる場合は、このステップをスキップします。
BEGIN
DBMS_XSTREAM_ADM.ALTER_OUTBOUND(
server_name => 'XOUT1',
capture_user => 'yourcaptureuser');
END;
/
シングルテナントデータベースの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'``を含めないでください。これらの句は、複数のコンテナにまたがる権限を付与するものであり、シングルテナントのデータベースには適用されません。