Datastream は、単一のコンテナ データベース(CDB)に 1 つ以上のプラグイン対応データベース(PDB)が含まれている Oracle マルチテナント アーキテクチャをサポートしています。各プラグイン対応データベースは一意の ID と名前を持つ自己完結型のデータベースであり、個別に管理できます。
このページでは、変更データ キャプチャ(CDC)を構成して、プラグ可能な Oracle データベースから サポートされている宛先(BigQuery や Cloud Storage など)にデータをストリーミングする方法について説明します。次の CDC メソッドで使用するように、プラグイン対応 Oracle データベースを構成できます。
バイナリログ リーダーと LogMiner API の詳細については、Oracle データベースの REDO ログファイルの操作をご覧ください。
これらの各方法で移行元 Oracle データベースを構成する手順については、以降のセクションをご覧ください。
バイナリログ リーダー用にプラグイン可能な Oracle データベースを構成する
バイナリログ リーダー CDC メソッドで使用するようにプラグイン可能な Oracle データベースを構成する手順は次のとおりです。
- ログファイルにアクセスするには、次のいずれかの方法を選択します。 - 自動ストレージ管理(ASM): このオプションを選択した場合は、専用の ASM 接続を作成し、接続プロファイルの作成時にその詳細を指定する必要があります。
- データベース ディレクトリ: このオプションを選択する場合は、REDO ログファイルとアーカイブ ログファイルを指すデータベース ディレクトリ オブジェクトを作成し、データベース ユーザーにディレクトリへの READアクセス権を付与する必要があります。
 - CREATE DIRECTORY DIRECTORY_NAME_1 as 'ONLINE_REDO_LOGS_PATH'; CREATE DIRECTORY DIRECTORY_NAME_2 as 'ARCHIVED_REDO_LOGS_PATH'; GRANT READ ON DIRECTORY DIRECTORY_NAME_1 to USER_NAME; GRANT READ ON DIRECTORY DIRECTORY_NAME_2 to USER_NAME; - 次のように置き換えます。 - DIRECTORY_NAME_1: オンライン REDO ログファイルのディレクトリの名前。
- DIRECTORY_NAME_2: アーカイブされた redo ログファイルのディレクトリの名前。
- ONLINE_REDO_LOGS_PATH: オンライン REDO ログファイルを保存するディレクトリのパス。
- ARCHIVED_REDO_LOGS_PATH: アーカイブされたログファイルが保存されるディレクトリのパス。
- USER_NAME: READアクセス権を付与するデータベース ユーザーの名前。
 - バイナリログ リーダー メソッドを選択してデータベース ディレクトリを使用する場合は、ストリームの作成時に redo ログとアーカイブ ログのディレクトリ名を指定する必要があります。 
- データベースが - ARCHIVELOGモードで実行中であることを確認します。- これを行うには、Oracle データベースにログインし、SQL プロンプトで次のコマンドを実行します。 - SELECT LOG_MODE FROM V$DATABASE;- 結果が ARCHIVELOGの場合は、次のステップに進みます。
- 結果が NOARCHIVELOGの場合は、データベースでARCHIVELOGモードを有効にする必要があります。
- SYSDBAとしてログインした場合は、次のコマンドを実行します。- SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; 
- アーカイブされたログファイルはディスク容量を消費するため、データベースに - DB_RECOVERY_FILE_DEST_SIZEパラメータを構成されることをお勧めします。このパラメータを使用して、ターゲット データベースの復元ファイルで使用される合計容量のハードリミット(バイト単位)を指定します。このパラメータを設定すると、ディスク容量が不足しないようにデータベースを保護する場合と、ログ位置の損失が原因でストリームが失敗する場合のトレードオフを管理できます。
 
- 結果が 
- 次の Oracle Recovery Manager(RMAN)コマンドを実行して、データベースのデータ保持ポリシーを定義します。 - TARGET / CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS; - バックアップとアーカイブのログは少なくとも 4 日間保持し、7 日間保持することをおすすめします。 
- Oracle ログファイルのローテーション ポリシーの構成に使用しているデータベース ツールの SQL プロンプトに戻ります。ログファイルの最大サイズは 512 MB までに設定することをおすすめします。 
- 追加ログデータを有効にします。これを行うには、次のコマンドを実行して、まず、データベース レベルの最小限の補足ロギングを有効にします。 - ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; - 次に、特定のテーブルまたはデータベース全体のロギングを有効にするかどうかを選択します。 - 特定のテーブルの変更のみをログに記録するには、複製するテーブルごとに次のコマンドを実行します。 - ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; - 以下を置き換えます。 - SCHEMA: テーブルを含むスキーマの名前。
- TABLE: 変更を記録するテーブルの名前。
 - データベース内のほとんどまたはすべてのテーブルを複製するには、データベース全体でロギングを有効にすることを検討してください。次のコマンドを実行して、データベース全体で補足ログデータを有効にします。 - ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; 
- プラガブル データベースへの接続に使用されるユーザー アカウントに、適切な権限を付与します。これを行うには、次のコマンドを実行します。 - GRANT SELECT ON GV_$LOG TO USER_NAME; GRANT SELECT ON GV_$LOGFILE TO USER_NAME; GRANT SELECT ON GV_$ARCHIVED_LOG TO USER_NAME; GRANT SELECT ON GV_$INSTANCE TO USER_NAME; GRANT SELECT ON GV_$STANDBY_LOG TO USER_NAME; GRANT SELECT ON V_$INSTANCE TO USER_NAME; GRANT SELECT ON V_$PDBS TO USER_NAME; GRANT SELECT ON V_$TRANSPORTABLE_PLATFORM TO USER_NAME; GRANT SELECT ON V_$DATABASE TO USER_NAME; GRANT SELECT ON V_$PARAMETER TO USER_NAME; GRANT SELECT ON COL$ TO USER_NAME; GRANT SELECT ON DBA_OBJECTS TO USER_NAME; GRANT SELECT ON DBA_TABLESPACES TO USER_NAME; GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME; GRANT SELECT ON DBA_EXTENTS TO USER_NAME; GRANT CONNECT TO USER_NAME; GRANT CREATE SESSION TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME; GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME; GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME; - USER_NAME は、データベースへの接続に使用するユーザー アカウントの名前に置き換えます。 
LogMiner 用にプラグイン対応 Oracle データベースを構成する
自己ホスト型の Oracle プラグイン対応データベースを構成して LogMiner API で使用できるようにするには、次の手順を行います。
- データベースが - ARCHIVELOGモードで実行中であることを確認します。この操作を行うには、- CDB$ROOTコンテナから次のコマンドを実行します。- SELECT LOG_MODE FROM V$DATABASE;- 結果が ARCHIVELOGの場合は、ステップ 2 に進みます。
- 結果が NOARCHIVELOGの場合は、データベースでARCHIVELOGモードを有効にする必要があります。
- SYSDBAとしてログインした場合は、次のコマンドを実行します。- SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
- アーカイブされたログファイルはディスク容量を消費するため、データベースに - DB_RECOVERY_FILE_DEST_SIZEパラメータを構成されることをお勧めします。このパラメータを使用して、ターゲット データベースの復元ファイルで使用される合計容量のハードリミット(バイト単位)を指定します。このパラメータを設定すると、ディスク容量が不足しないようにデータベースを保護する場合と、ログ位置の損失が原因でストリームが失敗する場合のトレードオフを管理できます。
 
- 結果が 
- CDB$ROOTコンテナから次の Oracle Recovery Manager(RMAN)コマンドを実行して、データベースのデータ保持ポリシーを定義します。- CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;- このコマンドは、コンテナ データベース内のすべてのプラグイン対応データベースのデータ保持ポリシーを定義します。 - バックアップとアーカイブのログは少なくとも 4 日間保持し、7 日間保持することをおすすめします。 
- Oracle ログファイルのローテーション ポリシーの構成に使用しているデータベース ツールの SQL プロンプトに戻ります。ログファイルの最大サイズは 512 MB までに設定することをおすすめします。 
- 追加ログデータを有効にします。これを行うには、まず、次のコマンドを実行して、 - CDB$ROOTコンテナレベルでデータベースのサプリメンタル ロギングを有効にします。- ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;- 次に、特定のテーブルまたはプラグイン対応データベース全体のロギングを有効にするかどうかを選択します。 - 特定のテーブルの変更のみをログに記録するには、プラグイン対応データベース コンテナに接続し、複製するテーブルごとに次のコマンドを実行します。 - ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;- 以下を置き換えます。 - SCHEMA: テーブルを含むスキーマの名前。
- TABLE: 変更を記録するテーブルの名前。
 - データベース内の複数のテーブルまたはすべてのテーブルを複製するには、データベース全体でロギングを有効にすることを検討してください。 - 次のコマンドを実行して、データベース全体で補足ログデータを有効にします。 - ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
- 共通ユーザーを作成します。共通ユーザーは、 - CDB$ROOTコンテナとプラガブル データベースで同じ ID を持ちます。共通ユーザーは、- CDB$ROOTコンテナに接続し、コンテナ内、および権限があるプラグイン対応データベース内で操作できます。共通ユーザー名は- C##または- c##で始まる必要があります。
- データベースへの接続に使用される共通ユーザーに、適切な権限を付与します。 - CDB$ROOTコンテナレベルとプラグイン対応データベース レベルでは、異なる権限が必要です。- CDB$ROOTコンテナに接続し、次のコマンドを実行します。
 - GRANT CREATE SESSION TO USER_NAME; GRANT SET CONTAINER TO USER_NAME; GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME; GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME; GRANT EXECUTE ON DBMS_LOGMNR TO USER_NAME; GRANT EXECUTE ON DBMS_LOGMNR_D TO USER_NAME; GRANT LOGMINING TO USER_NAME; GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;- プラグイン対応データベースに接続し、次のコマンドを実行します。
 - GRANT CREATE SESSION TO USER_NAME; GRANT SET CONTAINER TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME; GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME; GRANT SELECT ON SYS.V_$LOG TO USER_NAME; -- for primary databases GRANT SELECT ON SYS.V_$STANDY_LOG TO USER_NAME; -- for standby databases GRANT SELECT ON SYS.V_$LOGFILE TO USER_NAME; GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO USER_NAME; GRANT SELECT ON DBA_SUPPLEMENTAL_LOGGING TO USER_NAME; GRANT SELECT ON SYS.V_$PARAMETER TO USER_NAME;
- 共通ユーザーにデータベースの - DBA_EXTENTSビューに対する- SELECTアクセス権を付与します。この権限により、Oracle ソースの- ROWIDベースのバックフィルを使用できます。- GRANT SELECT ON DBA_EXTENTS TO USER_NAME; 
- データベースで透過的データ暗号化(TDE)を使用している場合は、次の権限を付与します。 - GRANT SELECT ON DBA_TABLESPACES TO USER_NAME; GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME; 
次のステップ
- Datastream が Oracle ソースと連携する仕組みについて学習します。