移行元 Oracle データベースは、次の CDC メソッドで使用するように構成できます。
バイナリ ログ リーダーと LogMiner API の詳細については、Oracle データベースの REDO ログファイルの操作をご覧ください。
これらの各方法で移行元 Oracle データベースを構成する方法の詳細については、以降のセクションをご覧ください。
バイナリログ リーダー用に Amazon RDS Oracle データベースを構成する
Amazon RDS ソースの場合、Datastream は、バイナリログ リーダーのロギング アクセス方法としてデータベース ディレクトリ オブジェクトのみをサポートします。オンライン REDO ログファイルとアーカイブ ログファイルを指すデータベース ディレクトリを作成する必要があります。これらのディレクトリの名前は静的であり、後で変更することはできません。これらの名前は、ストリームを作成するときに Datastream に指定する必要があります。
ソースの Amazon RDS インスタンスに接続します。
ターミナルまたは Amazon RDS ダッシュボードで、次のコマンドを実行します。
BEGIN rdsadmin.rdsadmin_master_util.create_archivelog_dir; END; BEGIN rdsadmin.rdsadmin_master_util.create_onlinelog_dir; END; COMMIT; GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME; GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME;
データベースが
ARCHIVELOG
モードで実行中であることを確認します。これを行うには、Oracle データベースにログインし、SQL プロンプトで次のコマンドを実行します。SELECT LOG_MODE FROM V$DATABASE;
- 結果が
ARCHIVELOG
の場合は、ステップ c に進みます。 - 結果が
NOARCHIVELOG
の場合は、データベースでARCHIVELOG
モードを有効にする必要があります。 - アーカイブされたログファイルはディスク容量を消費するため、データベースに DB_RECOVERY_FILE_DEST_SIZE パラメータを構成されることをお勧めします。このパラメータを使用して、ターゲット データベースの復元ファイルで使用される合計容量のハードリミット(バイト単位)を指定します。このパラメータを設定すると、ディスク容量が不足しないようにデータベースを保護する場合と、ログ位置の損失が原因でストリームが失敗する場合のトレードオフを管理できます。
- 次のコマンドを実行して、データベースのデータ保持ポリシーを定義します。
バックアップとアーカイブのログは少なくとも 4 日間保持し、7 日間保持することをおすすめします。exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
- Oracle ログファイルのローテーション ポリシーを構成します。ログファイルの最大サイズは 1 GB 未満に設定することをおすすめします。
- 結果が
追加ログデータを有効にします。これを行うには、次のコマンドを実行して、まず、データベース レベルの最小限の補足ロギングを有効にします。
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');
データベース ユーザーに次の権限を付与します。
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'); GRANT SELECT ANY TRANSACTION TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME; GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
USER_NAME は、データベースへの接続に使用するユーザー アカウントの名前に置き換えます。
LogMiner 用に Amazon RDS Oracle データベースを構成する
データベースが
ARCHIVELOG
モードで実行中であることを確認します。これを行うには、Oracle データベースにログインし、SQL プロンプトで次のコマンドを実行します。SELECT LOG_MODE FROM V$DATABASE;
- 結果が
ARCHIVELOG
の場合は、ステップ c に進みます。 - 結果が
NOARCHIVELOG
の場合は、データベースでARCHIVELOG
モードを有効にする必要があります。 - アーカイブされたログファイルはディスク容量を消費するため、データベースに DB_RECOVERY_FILE_DEST_SIZE パラメータを構成されることをお勧めします。このパラメータを使用して、ターゲット データベースの復元ファイルで使用される合計容量のハードリミット(バイト単位)を指定します。このパラメータを設定すると、ディスク容量が不足しないようにデータベースを保護する場合と、ログ位置の損失が原因でストリームが失敗する場合のトレードオフを管理できます。
- 次のコマンドを実行して、データベースのデータ保持ポリシーを定義します。
バックアップとアーカイブのログは少なくとも 4 日間保持し、7 日間保持することをおすすめします。exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
- Oracle ログファイルのローテーション ポリシーを構成します。ログファイルの最大サイズは 1 GB 未満に設定することをおすすめします。
- 結果が
追加ログデータを有効にします。これを行うには、次のコマンドを実行して、まず、データベース レベルの最小限の補足ロギングを有効にします。
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');
データベースへの接続に使用されるユーザー アカウントに、適切な権限を付与します。これを行うには、次のコマンドを実行します。
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;
ユーザー アカウントに、データベースの
DBA_EXTENTS
ビューに対するSELECT
アクセス権を付与します。この権限を使用すると、Oracle ソースにROWID
ベースのバックフィルを使用できます。GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
次のステップ
- Datastream が Oracle ソースと連携する仕組みについて学習します。