Amazon RDS Oracle データベースを構成する

  1. データベースが ARCHIVELOG モードで実行中であることを確認します。これを行うには、Oracle データベースにログインし、SQL プロンプトで次のコマンドを実行します。

    SELECT LOG_MODE FROM V$DATABASE;

    1. 結果が ARCHIVELOG の場合は、ステップ c に進みます。
    2. 結果が NOARCHIVELOG の場合は、データベースで ARCHIVELOG モードを有効にする必要があります。
    3. アーカイブされたログファイルはディスク容量を消費するため、データベースに DB_RECOVERY_FILE_DEST_SIZE パラメータを構成されることをお勧めします。このパラメータを使用して、ターゲット データベースの復元ファイルで使用される合計容量のハードリミット(バイト単位)を指定します。このパラメータを設定すると、ディスク容量が不足しないようにデータベースを保護する場合と、ログ位置の損失が原因でストリームが失敗する場合のトレードオフを管理できます。
    4. 次のコマンドを実行して、データベースのデータ保持ポリシーを定義します。
      exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
      バックアップとアーカイブのログは少なくとも 4 日間保持し、7 日間保持することをおすすめします。
    5. Oracle ログファイルのローテーション ポリシーを構成します。ログファイルの最大サイズは 1 GB 未満に設定することをおすすめします。
  2. 追加ログデータを有効にします。これを行うには、次のコマンドを実行して、まず、データベース レベルの最小限の補足ロギングを有効にします。

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');

    次に、特定のテーブルまたはデータベース全体のロギングを有効にするかどうかを選択します。

    特定のテーブルの変更のみをログに記録するには、複製するテーブルごとに次のコマンドを実行します。

    ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS

    以下を置き換えます。

    • SCHEMA: テーブルを含むスキーマの名前。
    • TABLE: 変更を記録するテーブルの名前。

    データベース内のほとんどまたはすべてのテーブルを複製するには、データベース全体でロギングを有効にすることを検討してください。

    SQL プロンプトで次のコマンドを実行して、データベース全体の補足ログデータを有効にします。

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
  3. データベースへの接続に使用されるユーザー アカウントに、適切な権限を付与します。これを行うには、次のコマンドを実行します。

    GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','USER_NAME','SELECT');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR','USER_NAME','EXECUTE');
    exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR_D','USER_NAME','EXECUTE');
    GRANT SELECT ANY TRANSACTION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;
    

    組織で GRANT SELECT ANY TABLE 権限を付与できない場合は、Datastream のよくある質問ページの Oracle 変更データ キャプチャ(CDC)セクションで説明されているソリューションを使用してください。

    ソース データベースが Oracle 12c 以降である場合は、次の追加権限を付与します。

    GRANT LOGMINING TO USER_NAME;
  4. ユーザー アカウントに、データベースの DBA_EXTENTS ビューに対する SELECT アクセス権を付与します。この権限により、Oracle ソースに対して ROWID ベースのバックフィルを使用できます。

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;