データベースリンク経由で直接 Oracle Data Pump Import を使用して、オンプレミスの Oracle データベースを Amazon RDS for Oracle に移行する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

データベースリンク経由で直接 Oracle Data Pump Import を使用して、オンプレミスの Oracle データベースを Amazon RDS for Oracle に移行する

作成者: Rizwan Wangde (AWS)

環境:本稼働

ソース: オンプレミスの Oracle データベース

ターゲット: Amazon RDS for Oracle

R タイプ: リプラットフォーム

ワークロード: ‬Oracle

テクノロジー: 移行、データベース

AWS サービス: AWS DMS、AWSDirect Connect、Amazon RDS

多数のパターンでは、大規模な Oracle ワークロードを移行する推奨方法であるネイティブ Oracle ユーティリティである Oracle Data Pump を使用して、オンプレミスの Oracle データベースを Amazon RDS for Oracle に移行します。これらのパターンには、通常、アプリケーションスキーマまたはテーブルをダンプファイルにエクスポートし、ダンプファイルを Amazon RDS for Oracle のデータベースディレクトリに転送し、アプリケーションスキーマとデータをダンプファイルからインポートします。

このアプローチを使用すると、データのサイズとダンプファイルを Amazon RDSインスタンスに転送するのにかかる時間によっては、移行に時間がかかる場合があります。さらに、ダンプファイルは Amazon RDSインスタンスの Amazon Elastic Block Store (Amazon EBS) ボリュームに存在します。このボリュームは、データベースとダンプファイルに対して十分な大きさである必要があります。インポート後にダンプファイルが削除されると、空のスペースは取得できなくなるため、未使用のスペースについては引き続きお支払いいただきます。

このパターンは、データベースリンクで Oracle Data Pump API (DBMS_DATAPUMP) を使用して Amazon RDSインスタンスに直接インポートすることで、これらの問題を軽減します。このパターンは、移行元のデータベースと移行先のデータベース間のエクスポートとインポートの同時パイプラインを開始します。このパターンでは、ダンプファイルがEBSボリュームに作成または保存されないため、ダンプファイルのボリュームのサイズ設定は必要ありません。この方法では、未使用のディスク容量にかかる毎月のコストを節約できます。

前提条件

  • アクティブな Amazon Web Services (AWS) アカウント。

  • Amazon RDSインスタンスのネットワークインフラストラクチャを提供するために、少なくとも 2 つのアベイラビリティーゾーンにプライベートサブネットで設定された仮想プライベートクラウド (VPC)。

  • オンプレミスデータセンターの Oracle データベース。

  • 単一のアベイラビリティーゾーン内の既存の Amazon RDS Oracle インスタンス。1 つのアベイラビリティゾーンを使用すると、移行中の書き込みパフォーマンスが向上します。マルチ AZ 配置は、カットオーバーの 24~48 時間前に有効化できます。

  • AWS Direct Connect (大規模なデータベースに推奨)。

  • Amazon RDSインスタンスからオンプレミスの Oracle データベースへのインバウンド接続を許可するように設定されたオンプレミスのネットワーク接続とファイアウォールルール。

機能制限

  • Amazon RDS for Oracle のデータベースサイズ制限は 64 TiB (2022 年 12 月現在) です。

製品バージョン

  • ソースデータベース: Oracle データベースバージョン 10g リリース 1 以降。

  • ターゲットデータベース: Amazon でサポートされているバージョンとエディションの最新リストについてはRDS、AWSドキュメントの「Amazon RDS for Oracle」を参照してください。

ソーステクノロジースタック

  • オンプレミスでもクラウドでも、セルフマネージド Oracle データベース

ターゲットテクノロジースタック

  • Amazon RDS for Oracle

ターゲット アーキテクチャ

次の図は、オンプレミスの Oracle データベースからシングル AZ 環境で Amazon RDS for Oracle に移行するためのアーキテクチャを示しています。矢印の方向は、アーキテクチャ内のデータフローを示しています。この図には、どのコンポーネントが接続を開始しているかは示されていません。

オンプレミスの Oracle データベースのフルロード移行。
  1. Amazon RDS for Oracle インスタンスは、オンプレミスのソース Oracle データベースに接続して、データベースリンク経由でフルロード移行を実行します。

  2. AWS DMS はオンプレミスソースの Oracle データベースに接続し、変更データキャプチャ () を使用して継続的なレプリケーションを実行しますCDC。

  3. CDC 変更は Amazon RDS for Oracle データベースに適用されます。

AWS サービス

  • AWS Database Migration Service (AWS DMS) は、データストアをAWSクラウドに移行する際や、クラウドとオンプレミスのセットアップの組み合わせ間で移行する際に役立ちます。このパターンは CDC を使用し、データ変更のレプリケートのみの設定を使用します。

  • AWS Direct Connect は、標準のイーサネット光ファイバーケーブルを介して内部ネットワークを Direct Connect ロケーションにリンクします。この接続を使用すると、ネットワークパスでインターネットサービスプロバイダーをバイパスしながら、パブリックAWSサービスへの仮想インターフェイスを直接作成できます。

  • Amazon Relational Database Service (Amazon RDS) for Oracle は、AWSクラウドで Oracle リレーショナルデータベースをセットアップ、運用、スケーリングするのに役立ちます。

その他のツール

  • Oracle Data Pump を使用すると、あるデータベースから別のデータベースにデータやメタデータを高速に移動できます。

  • Oracle Instant ClientSQL Developer などのクライアントツールは、データベースに接続してSQLクエリを実行するために使用されます。

AWS Direct Connect はオンプレミスネットワークと 間の専用プライベートネットワーク接続を使用しますがAWS、転送中のデータのセキュリティとデータ暗号化を強化するには、次のオプションを検討してください。

タスク説明必要なスキル

移行先のデータベースから移行元のデータベースへのネットワーク接続を設定します。

ターゲット Amazon RDSインスタンスからオンプレミスソース Oracle データベースへの受信接続を許可するように、オンプレミスネットワークとファイアウォールを設定します。

ネットワーク管理者、セキュリティエンジニア

適切な権限を持つデータベースユーザーを作成します。

オンプレミスのソース Oracle データベースに、Oracle Data Pump を使用してソースとターゲットの間でデータを移行する権限を持つデータベースユーザーを作成します。

GRANT CONNECT to <migration_user>; GRANT DATAPUMP_EXP_FULL_DATABASE to <migration_user>; GRANT SELECT ANY TABLE to <migration_user>;
DBA

オンプレミスのソースデータベースをAWSDMSCDC移行用に準備します。

(オプション) Oracle Data Pump Full Load の完了後、オンプレミスソースの Oracle データベースをAWSDMSCDC移行用に準備します。

  1. Oracle Data Pump の移行FLASHBACK中に管理するために必要な追加の権限を設定します。

    GRANT FLASHBACK ANY TABLE to <migration_user>; GRANT FLASHBACK ARCHIVE ADMINISTER to <migration_user>;
  2. のセルフマネージド Oracle ソースに必要なユーザーアカウント権限を設定するにはAWSDMS、 AWS DMS ドキュメントを参照してください。

  3. CDC を使用するための Oracle セルフマネージドソースデータベースを準備するにはAWSDMS、AWSDMSドキュメント を参照してください。

DBA

SQL Developer をインストールして設定します。

ソースデータベースとターゲットデータベースに接続してSQLクエリを実行するように SQL Developer をインストールして設定します。

DBA、移行エンジニア

テーブルスペースを作成するスクリプトを生成します。

次のSQLクエリ例を使用して、ソースデータベースにスクリプトを生成します。

SELECT 'CREATE TABLESPACE ' tablespace_name ' DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE UNLIMITED;' from dba_tablespaces where tablespace_name not in ('SYSTEM', 'SYSAUX','TEMP','UNDOTBS1') order by 1;

スクリプトはターゲットデータベースに適用されます。

DBA

ユーザー、プロファイル、ロール、権限を作成するためのスクリプトを生成します。

データベースユーザー、プロファイル、ロール、および権限を作成するためのスクリプトを生成するには、Oracle サポートドキュメントの dbms_metadata.get_ddl (Doc ID 2739952.1) を使用した権限とロールを含むDDLユーザーの抽出方法 (Oracle アカウントが必要) のスクリプトを使用します。

スクリプトはターゲットデータベースに適用されます。

DBA
タスク説明必要なスキル

ソースデータベースへのデータベースリンクを作成し、接続を確認します。

オンプレミスのソースデータベースへのデータベースリンクを作成するには、次のコマンド例を使用できます。

CREATE DATABASE LINK link2src CONNECT TO <migration_user_account> IDENTIFIED BY <password> USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>) (PORT=<listener port>))(CONNECT_DATA=(SID=<remote SID>)))';

接続を確認するには、次のSQLコマンドを実行します。

select * from dual@link2src;

応答が X であれば、接続は成功です。

DBA

スクリプトを実行してターゲットインスタンスを準備します。

以前に生成されたスクリプトを実行して、ターゲット Amazon RDS for Oracle インスタンスを準備します。

  1. テーブルスペース

  2. プロファイル

  3. ロール

これにより、Oracle Data Pump の移行時にスキーマとそのオブジェクトを確実に作成できるようになります。

DBA、移行エンジニア
タスク説明必要なスキル

必要なスキーマを移行します。

必要なスキーマをソースオンプレミスデータベースからターゲット Amazon RDSインスタンスに移行するには、「追加情報」セクションのコードを使用します。

  • 1 つのスキーマを移行するには、「追加情報」セクションのコード 1 を実行します。

  • 複数のスキーマを移行するには、「追加情報」セクションのコード 2 を実行します。

移行のパフォーマンスを調整するには、次のコマンドを実行 parallel プロセスの数を調整できます。

DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4);
DBA

スキーマ統計を収集してパフォーマンスを向上させます。

「スキーマ統計の収集」コマンドは、データベースオブジェクトに関して収集された Oracle クエリオプティマイザー統計を返します。この情報を使用して、オプティマイザーはこれらのオブジェクトに対するあらゆるクエリに最適な実行プランを選択できます。

EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '<schema_name>');
DBA
タスク説明必要なスキル

ソースのオンプレミス Oracle データベースSCNで をキャプチャします。

ソースのオンプレミス Oracle データベースでシステム変更番号 (SCN) をキャプチャします。フルロードインポートSCNには を使用し、CDCレプリケーションの開始点として を使用します。

ソースデータベースSCNで現在の を生成するには、次のSQLステートメントを実行します。

SELECT current_scn FROM V$DATABASE;
DBA

スキーマのフルロード移行を実行します。

必要なスキーマ (FULL LOAD) をソースオンプレミスデータベースからターゲット Amazon RDSインスタンスに移行するには、以下を実行します。

  • 1 つのスキーマを移行するには、「追加情報」セクションのコード 3 を実行します。

  • 複数のスキーマを移行するには、「追加情報」セクションのコード 4 を実行します。

コードで、 をソースデータベースからキャプチャSCNした <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>に置き換えます。

DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>);

移行のパフォーマンスを調整するために、parallel プロセスの数を調整できます。

DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4);
DBA

移行したスキーマのトリガーを無効にします。

CDCのみAWSDMSのタスクを開始する前に、移行されたスキーマTRIGGERSで を無効にします。

DBA

スキーマ統計を収集してパフォーマンスを向上させます。

「スキーマ統計の収集」コマンドは、データベースオブジェクトに関して収集された Oracle クエリオプティマイザー統計を返します。この情報を使用して、オプティマイザーはこれらのオブジェクトに対するあらゆるクエリに最適な実行プランを選択できます。

EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS(ownname => '<schema_name>');
DBA

AWS DMS を使用して、ソースからターゲットへの継続的なレプリケーションを実行します。

AWS DMS を使用して、ソース Oracle データベースからターゲット Amazon RDS for Oracle インスタンスへの継続的なレプリケーションを実行します。

詳細については、「 を使用した継続的なレプリケーションのタスクの作成AWSDMS」およびブログ記事AWS「 でのネイティブCDCサポートの操作方法DMS」を参照してください。

DBA、移行エンジニア
タスク説明必要なスキル

カットオーバーの 48 時間前にインスタンスでマルチ AZ を有効にします。

これが本番稼働用インスタンスの場合は、Amazon RDSインスタンスでマルチ AZ デプロイを有効にして、高可用性 (HA) とディザスタリカバリ (DR) の利点を提供することをお勧めします。

DBA、移行エンジニア

CDCのみAWSDMSのタスクを停止します (オンCDCになっている場合)。

  1. AWS DMS タスクの Amazon CloudWatch メトリクスのソースレイテンシーとターゲットレイテンシーが 0 秒であることを確認します。

  2. CDCのみAWSDMSのタスクを停止します。

DBA

トリガーを有効にします。

CDC タスクの作成前にTRIGGERS無効にした を有効にします。

DBA

AWS

Oracle のドキュメント

コード 1: フルロード移行のみ、単一アプリケーションスキーマ

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

コード 2: フルロード移行のみ、複数のアプリケーションスキーマ

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

コード 3: CDCのみのタスク、単一アプリケーションスキーマ前のフルロード移行

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN(operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''<schema_name>'')'); -- To migrate one selected schema DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

コード 4: CDC専用タスク前のフルロード移行、複数のアプリケーションスキーマ

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN (operation => 'IMPORT', job_mode => 'SCHEMA', remote_link => '<DB LINK Name to Source Database>', job_name => null); DBMS_DATAPUMP.ADD_FILE (handle => v_hdnl, filename => 'import_01.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'SCHEMA_LIST', '''<SCHEMA_1>'',''<SCHEMA_2>'', ''<SCHEMA_3>'''); -- To migrate multiple schemas DBMS_DATAPUMP.METADATA_FILTER (v_hdnl, 'EXCLUDE_PATH_EXPR','IN (''STATISTICS'')'); -- To prevent gathering Statistics during the import DBMS_DATAPUMP.SET_PARAMETER (handle => v_hdnl, name => 'FLASHBACK_SCN', value => <CURRENT_SCN_VALUE_IN_SOURCE_DATABASE>); -- SCN required for AWS DMS CDC only task. DBMS_DATAPUMP.SET_PARALLEL (handle => v_hdnl, degree => 4); -- Number of parallel processes performing export and import DBMS_DATAPUMP.START_JOB(v_hdnl); END; /

混合移行アプローチの方がうまくいくシナリオ

ソースデータベースに数百万行のテーブルと非常に大きなLOBSEGMENT列が含まれているまれなシナリオでは、このパターンにより移行が遅くなります。Oracle は、ネットワークリンクLOBSEGMENTs経由で一度に 1 つずつ移行します。ソーステーブルから 1 つの行 (LOB列データとともに) を抽出し、その行をターゲットテーブルに挿入し、すべての行が移行されるまでプロセスを繰り返します。データベースリンク上の Oracle Data Pump は、 の一括ロードまたは直接パスロードメカニズムをサポートしていませんLOBSEGMENTs。

この状況では、次のことをお勧めします。

  • Oracle Data Pump の移行中は、次のメタデータフィルタを追加して、特定されたテーブルをスキップしてください。

    dbms_datapump.metadata_filter(handle =>h1, name=>'NAME_EXPR', value => 'NOT IN (''TABLE_1'',''TABLE_2'')');
  • AWS DMS タスク (フルロード移行、必要に応じてCDCレプリケーション) を使用して、識別されたテーブルを移行します。AWS DMS は、ソース Oracle データベースから複数の行を抽出し、ターゲット Amazon RDSインスタンスにバッチに挿入して、パフォーマンスを向上させます。