CDC 用にプラグイン対応 Oracle データベースを構成する

変更データ キャプチャ(CDC)の更新をプラグイン可能な Oracle データベースから BigQuery や Cloud Storage などのサポートされている宛先にストリーミングするには、データベースを Datastream に接続します。各プラガブル データベースは、マルチテナント コンテナ データベース(CDB)内で実行されます。ソースを準備するには、CDB で ARCHIVELOG モードとログ保持を構成し、両方のコンテナでサプリメンタル ロギングとユーザー権限を構成します。

バイナリ ログリーダー(プレビュー)または LogMiner API CDC メソッドを使用するように、プラガブル Oracle データベースを構成できます。これらの方法の詳細については、Oracle データベースの REDO ログファイルの操作をご覧ください。

バイナリログ リーダー用にプラグイン対応 Oracle データベースを構成する

バイナリログ リーダー CDC メソッドで使用するようにプラグイン対応の Oracle データベースを構成するには、次の手順を行います。

  1. 次のいずれかの方法でログファイルにアクセスします。

    • 自動ストレージ管理(ASM): このオプションを選択した場合は、専用の ASM 接続を作成し、接続プロファイルの作成時にその詳細を指定する必要があります。ASM 接続に使用するユーザー アカウントには、SYSASM 権限が必要です。

      SYSASM 権限を持つ新しい ASM ユーザーを作成するには、次のコマンドを実行します。

      CREATE USER ASM_USER_NAME IDENTIFIED BY ASM_PASSWORD;
      GRANT SYSASM TO ASM_USER_NAME;

      次のように置き換えます。

      • ASM_USER_NAME: ASM ユーザーの名前。
      • ASM_PASSWORD: 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 ログとアーカイブ ログのディレクトリ名を指定する必要があります。

  2. データベースが ARCHIVELOG モードで実行中であることを確認します。

    これを行うには、Oracle データベースにログインし、SQL プロンプトで次のコマンドを実行します。

    SELECT LOG_MODE FROM V$DATABASE;
    
    1. 結果が ARCHIVELOG の場合は、次のステップに進みます。
    2. 結果が NOARCHIVELOG の場合は、データベースで ARCHIVELOG モードを有効にする必要があります。
    3. SYSDBA としてログインした場合は、次のコマンドを実行します。

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
    4. アーカイブされたログファイルはディスク容量を消費するため、データベースに DB_RECOVERY_FILE_DEST_SIZE パラメータを構成されることをおすすめします。このパラメータを使用して、ターゲット データベースの復元ファイルで使用される合計容量のハードリミット(バイト単位)を指定します。このパラメータを設定すると、ディスク容量が不足しないようにデータベースを保護する場合と、ログ位置の損失が原因でストリームが失敗する場合のトレードオフを管理できます。

  3. 次の Oracle Recovery Manager(RMAN)コマンドを実行して、データベースのデータ保持ポリシーを定義します。

    TARGET /
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

    バックアップとアーカイブのログは少なくとも 4 日間保持し、7 日間保持することをおすすめします。

  4. Oracle ログファイルのローテーション ポリシーの構成に使用しているデータベース ツールの SQL プロンプトに戻ります。ログファイルの最大サイズは 512 MB までに設定することをおすすめします。

  5. 追加ログデータを有効にします。これを行うには、次のコマンドを実行して、まず、データベース レベルの最小限の補足ロギングを有効にします。

    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;
  6. プラガブル データベースへの接続に使用されるユーザー アカウントに、適切な権限を付与します。これを行うには、次のコマンドを実行します。

    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 SELECT ON DBA_SUPPLEMENTAL_LOGGING 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 で使用できるようにするには、次の手順を行います。

  1. データベースが ARCHIVELOG モードで実行中であることを確認します。この操作を行うには、CDB$ROOT コンテナから次のコマンドを実行します。

    SELECT LOG_MODE FROM V$DATABASE;

    1. 結果が ARCHIVELOG の場合は、ステップ 2 に進みます。
    2. 結果が NOARCHIVELOG の場合は、データベースで ARCHIVELOG モードを有効にする必要があります。
    3. SYSDBA としてログインした場合は、次のコマンドを実行します。

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
      
    4. アーカイブされたログファイルはディスク容量を消費するため、データベースに DB_RECOVERY_FILE_DEST_SIZE パラメータを構成されることをおすすめします。このパラメータを使用して、ターゲット データベースの復元ファイルで使用される合計容量のハードリミット(バイト単位)を指定します。このパラメータを設定すると、ディスク容量が不足しないようにデータベースを保護する場合と、ログ位置の損失が原因でストリームが失敗する場合のトレードオフを管理できます。

  2. CDB$ROOT コンテナから次の Oracle Recovery Manager(RMAN)コマンドを実行して、データベースのデータ保持ポリシーを定義します。

    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
    

    このコマンドは、コンテナ データベース内のすべてのプラグイン対応データベースのデータ保持ポリシーを定義します。

    バックアップとアーカイブのログは少なくとも 4 日間保持し、7 日間保持することをおすすめします。

  3. Oracle ログファイルのローテーション ポリシーの構成に使用しているデータベース ツールの SQL プロンプトに戻ります。ログファイルの最大サイズは 512 MB までに設定することをおすすめします。

  4. 追加ログデータを有効にします。これを行うには、まず、次のコマンドを実行して、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;
    
  5. 共通ユーザーを作成します。共通ユーザーは、CDB$ROOT コンテナとプラガブル データベースで同じ ID を持ちます。共通ユーザーは、CDB$ROOT コンテナに接続し、コンテナ内、および権限があるプラグイン対応データベース内で操作できます。共通ユーザー名は C## または c## で始まる必要があります。

  6. データベースへの接続に使用される共通ユーザーに、適切な権限を付与します。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 V_$PDBS TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOG TO USER_NAME; -- for primary databases
    GRANT SELECT ON SYS.V_$STANDBY_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;
    
  7. 共通ユーザーにデータベースの DBA_EXTENTS ビューに対する SELECT アクセス権を付与します。この権限により、Oracle ソースの ROWID ベースのバックフィルを使用できます。

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
  8. データベースで透過的データ暗号化(TDE)を使用している場合は、次の権限を付与します。

    GRANT SELECT ON DBA_TABLESPACES TO USER_NAME;
    GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;

次のステップ

  • Datastream が Oracle ソースと連携する仕組みについて学習します。