ソース Oracle データベースの構成

Database Migration Service は、Oracle Database の一部である Oracle LogMiner API を活用して、アーカイブされた REDO ログファイルをク��リします。REDO ログファイルには、データベース上のアクティビティの履歴に関する情報が含まれています。Database Migration Service がこれらのログファイルをどのように使用するかについて詳しくは、 Oracle 移行のデータフローについてをご覧ください。

ソース Oracle データベースの構成

Database Migration Service を使用して移行元 Oracle データベースからデータを pull する前に、次の方法でデータベースを構成する必要があります。

  • INSERTUPDATEDELETERENAME オペレーションなど、データベースの変更を追跡する アーカイブ ロギングを設定します。

  • データベースへの接続とスキーマ オブジェクトとコード オブジェクトへのアクセスに使用するユーザー アカウントに、適切な権限を付与します。

    デフォルトでは、Database Migration Service は DBA_VIEWS を介してすべてのオブジェクト定義にアクセスしようとします。DBA_VIEWS へのアクセスは、SELECT ANY DICTIONARY 権限で付与されます。移行ユーザー アカウントが DBA ビューにアクセスできない場合、Database Migration Service は ALL_VIEWS にフォールバックします。このアプローチでは、要件に最も適したセキュリティ モデルを定義する際に最大限の柔軟性を得ることができます。

    Database Migration Service がオブジェクト定義の特定のサブセットにのみアクセスするようにするに���、SELECT ANY DICTIONARY では�����、よりきめ細かい権限構成を持つロールを移行ユーザーに付与します。

  • データベースのデータ保持ポリシーを定義することで、アーカイブするデータ、データの保持期間、保持期間の終了時にデータをアーカイブまたは破棄する必要があるかどうかなどを決定します。

Database Migration Service は、次の種類の Oracle データベースに対応しています。

Amazon RDS for Oracle データベースの構成

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

    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 ログファイルのローテーション ポリシーを構成します。ログファイルの最大サイズは 512 MB までに設定することをおすすめします。ログ ローテーションの管理の詳細については、 Oracle データベース ログファイルの操作をご覧ください。

  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 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 DICTIONARY TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

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

    GRANT LOGMINING TO USER_NAME;

セルフホスト型 Oracle データベースを構成する

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

    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. 次の Oracle Recovery Manager(RMAN)コマンドを実行して、データベースのデータ保持ポリシーを定義します。

    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

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

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

  4. 追加ログデータを有効にします。これを行うには、まず、次のコマンドを実行して、データベースのサプリメンタル ロギングを有効にします。

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

    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME;
    GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOGMNR_LOGS TO USER_NAME;
    GRANT EXECUTE ON DBMS_LOGMNR TO USER_NAME;
    GRANT EXECUTE ON DBMS_LOGMNR_D TO USER_NAME;
    GRANT SELECT ANY TRANSACTION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;
    GRANT SELECT ANY DICTIONARY TO USER_NAME;
    GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;

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

    GRANT LOGMINING TO USER_NAME;

自己ホスト型の Oracle プラグイン可能データベースを構成する

Database Migration Service は、単一の コンテナ データベース(CDB)に 1 つ以上のプラグイン対応データベース(PDB)が含まれている Oracle マルチテナント アーキテクチャをサポートしています。各プラグイン対応データベースは一意の ID と名前を持つ自己完結型のデータベースであり、個別に管理できます。

自己ホスト型の Oracle プラグイン対応データベースを構成して Database Migration Service で使用できるようにするには、次の手順を行います。

  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 を持ちます。共通ユーザーは、ルートに接続し、ルート内、および権限があるプラグイン対応データベース内で操作できます。共通ユーザー名は 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 ANY DICTIONARY TO USER_NAME;
      GRANT SELECT ON SYS.V_$DATABASE 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 DBA_EXTENTS TO USER_NAME;