Oracle マテリアライズドビューを使用した移行 - Amazon Relational Database Service

Oracle マテリアライズドビューを使用した移行

大規模なデータセットを効率的に移行するために、Oracle マテリアライズドビューのレプリケーションを使用することができます。レプリケーションを使用すると、移行先テーブルと移行元テーブルとの同期を継続的に維持できます。このため、必要に応じて、後から Amazon RDS に切り替えることができます。

マテリアライズドビューを使用して移行する前に、以下の前提条件を満たしていることを確認してください。

  • 移行先のデータベースから移行元のデータベースへのアクセスを設定します。次の例では、移行元データベースでアクセスルールが有効になっており、移行先の RDS for Oracle データベースが SQL*Net を経由して移行元にアクセスすることが許可されています。

  • RDS for Oracle DB インスタンスから移行元のデータベースへのデータベースリンクを作成します。

マテリアライズドビューを使用してデータを移行するには
  1. 同じパスワードで認証できるユーザーアカウントを、移行元と移行先の RDS for Oracle インスタンスの両方に作成します。次の例では、dblink_user という名前のユーザーを作成します。

    CREATE USER dblink_user IDENTIFIED BY my-password DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; GRANT CREATE SESSION TO dblink_user; GRANT SELECT ANY TABLE TO dblink_user; GRANT SELECT ANY DICTIONARY TO dblink_user;
    注記

    セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

  2. 新しく作成したユーザーを使用して、移行先の RDS for Oracle インスタンスから移行元のインスタンスへのデータベースリンクを作成します。

    CREATE DATABASE LINK remote_site CONNECT TO dblink_user IDENTIFIED BY my-password USING '(description=(address=(protocol=tcp) (host=my-host) (port=my-listener-port)) (connect_data=(sid=my-source-db-sid)))';
    注記

    セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。

  3. リンクをテストします。

    SELECT * FROM V$INSTANCE@remote_site;
  4. 移行元のインスタンスで、プライマリキーを持つサンプルテーブルとマテリアライズドビューのログを作成します。

    CREATE TABLE customer_0 TABLESPACE users AS (SELECT ROWNUM id, o.* FROM ALL_OBJECTS o, ALL_OBJECTS x WHERE ROWNUM <= 1000000); ALTER TABLE customer_0 ADD CONSTRAINT pk_customer_0 PRIMARY KEY (id) USING INDEX; CREATE MATERIALIZED VIEW LOG ON customer_0;
  5. 移行先の RDS for Oracle DB インスタンスで、マテリアライズドビューを作成します。

    CREATE MATERIALIZED VIEW customer_0 BUILD IMMEDIATE REFRESH FAST AS (SELECT * FROM cust_dba.customer_0@remote_site);
  6. 移行先の RDS for Oracle DB インスタンスで、マテリアライズドビューを更新します。

    EXEC DBMS_MVIEW.REFRESH('CUSTOMER_0', 'f');
  7. マテリアライズドビューを削除し、PRESERVE TABLE 句を含めて、マテリアライズドビューコンテナテーブルとその内容を保持します。

    DROP MATERIALIZED VIEW customer_0 PRESERVE TABLE;

    保持したテーブル名は、削除したマテリアライズドビューと同じです。