翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
データベースリンクを経由した直接 Oracle Data Pump Import を使用して、オンプレミスの Oracle データベースを Amazon RDS for Oracle に移行する
作成者: Rizwan Wangde (AWS)
環境:本稼働 | ソース: オンプレミスの Oracle データベース | ターゲット: Amazon RDS for Oracle |
R タイプ: リプラットフォーム | ワークロード: Oracle | テクノロジー:移行、データベース |
AWS サービス: AWS DMS、AWS Direct Connect、Amazon RDS |
[概要]
大規模な Oracle ワークロードを移行する場合に推奨される 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 データベース。
1 つのアベイラビリティゾーンにある既存の 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」
ターゲットアーキテクチャ
以下の図は、シングル AZ 環境でオンプレミスの Oracle データベースから Amazon RDS for Oracle に移行するためのアーキテクチャを示しています。矢印の方向は、アーキテクチャ内のデータフローを示しています。この図には、どのコンポーネントが接続を開始しているかは示されていません。
![""](images/pattern-img/d54e7777-dcd2-4039-9b76-97e1019ef112/images/78429a29-e110-485a-a501-9764decd7e92.png)
Amazon RDS for Oracle インスタンスは、オンプレミスのソース Oracle データベースに接続し、データベースリンクを介して全負荷移行を実行します。
AWS DMS はオンプレミスのソース Oracle データベースに接続し、変更データキャプチャ (CDC) を使用して継続的なレプリケーションを実行します。
CDC の変更は Amazon RDS for Oracle データベースに適用されます。
ツール
AWS サービス
「AWS Database Migration Service (AWS DMS)」 を使用して、データストアを AWS クラウドへ、またはクラウドセットアップとオンプレミスセットアップの組み合わせの間に移行します。このパターンでは CDC と [データ変更のみの複製] 設定を使用します。
AWS Direct Connect は、標準のイーサネット光ファイバーケーブルを介して内部ネットワークを Direct Connect の場所にリンクします。この接続を使用すると、ネットワークパス内のインターネットサービスプロバイダーをバイパスしながら、パブリック AWS サービスへの仮想インターフェイスを直接作成できます。
「OracleのAmazon Relational Database Service (Amazon RDS)」 によって、AWS クラウドで Oracleリレーショナルデータベースをセットアップ、運用、スケーリングができます。
その他のツール
Oracle Data Pump
を使用すると、データやメタデータをあるデータベースから別のデータベースに高速で移動できます。 Oracle インスタントクライアント
や SQL Developer などのクライアントツールを使用して、データベースに接続して SQL クエリを実行します。
ベストプラクティス
AWS Direct Connect
Amazon Site-to-Site VPN を使用する仮想プライベートネットワーク (VPN) またはオンプレミスのネットワークから AWS ネットワークへの IPSec VPN 接続
オンプレミスの Oracle データベースに構成された Oracle Database Native Network Encryption
TLS
を使用した暗号化
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
移行先のデータベースから移行元のデータベースへのネットワーク接続を設定します。 | ターゲット Amazon RDS インスタンスからオンプレミスのソース Oracle データベースへの受信接続を許可するように、オンプレミスネットワークとファイアウォールを設定します。 | ネットワーク管理者、セキュリティエンジニア |
適切な権限を持つデータベースユーザーを作成します。 | オンプレミスのソース Oracle データベースに、Oracle Data Pump を使用してソースとターゲットの間でデータを移行する権限を持つデータベースユーザーを作成します。
| DBA |
AWS DMS CDC 移行用のオンプレミスソースデータベースを準備します。 | (オプション) Oracle データポンプの全ロードが完了したら、オンプレミスのソース Oracle データベースを AWS DMS CDC 移行用に準備します。
| DBA |
SQL Developer をインストールして設定します。 | SQL Developer | DBA、移行エンジニア |
テーブルスペースを作成するスクリプトを生成します。 | 次の SQL クエリの例を使用して、ソースデータベースにスクリプトを生成します。
スクリプトはターゲットデータベースに適用されます。 | DBA |
ユーザー、プロファイル、ロール、権限を作成するためのスクリプトを生成します。 | データベースユーザー、プロファイル、ロール、権限を作成するスクリプトを生成するには、OracleSupport 文書「How to Extract DDL for User including Privileges and Roles Using dbms_metadata.get_ddl (Doc ID 2739952.1) スクリプトはターゲットデータベースに適用されます。 | DBA |
タスク | 説明 | 必要なスキル |
---|---|---|
ソースデータベースへのデータベースリンクを作成し、接続を確認します。 | オンプレミスのソースデータベースへのデータベースリンクを作成するには、次のコマンド例を使用できます。
接続を確認するには、次の SQL コマンドを実行します。
応答が | DBA |
スクリプトを実行してターゲットインスタンスを準備します。 | 以前に生成されたスクリプトを実行して、ターゲットの Amazon RDS for Oracle インスタンスを準備します。
これにより、Oracle Data Pump の移行時にスキーマとそのオブジェクトを確実に作成できるようになります。 | DBA、移行エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
必要なスキーマを移行します。 | 必要なスキーマをソースのオンプレミスデータベースからターゲット Amazon RDS インスタンスに移行するには、「追加情報」セクションのコードを使用してください。
移行のパフォーマンスを調整するには、次のコマンドを実行 parallel プロセスの数を調整できます。
| DBA |
スキーマ統計を収集してパフォーマンスを向上させます。 | 「スキーマ統計の収集」コマンドは、データベースオブジェクトに関して収集された Oracle クエリオプティマイザー統計を返します。この情報を使用して、オプティマイザーはこれらのオブジェクトに対するあらゆるクエリに最適な実行プランを選択できます。
| DBA |
タスク | 説明 | 必要なスキル |
---|---|---|
ソースオンプレミスの Oracle データベースで SCN を取得します。 | オンプレミスの Oracle データベースのシステム変更番号 (SCN) ソースデータベースで現在の SCN を生成するには、次の SQL 文を実行します。
| DBA |
スキーマのフルロード移行を実行します。 | 必要なスキーマ (
コード内で、ソースデータベースから取得した SCN の
移行のパフォーマンスを調整するために、parallel プロセスの数を調整できます。
| DBA |
移行したスキーマのトリガーを無効にします。 | AWS DMS CDC のみのタスクを開始する前に、移行したスキーマの下にある | DBA |
スキーマ統計を収集してパフォーマンスを向上させます。 | 「スキーマ統計の収集」コマンドは、データベースオブジェクトに関して収集された Oracle クエリオプティマイザー統計を返します。この情報を使用して、オプティマイザーはこれらのオブジェクトに対するあらゆるクエリに最適な実行プランを選択できます。
| DBA |
AWS DMS を使用して、ソースからターゲットへの継続的なレプリケーションを実行します。 | AWS DMS を使用して、ソース Oracle データベースからターゲット Amazon RDS for Oracle インスタンスへの継続的なレプリケーションを実行します。 詳細については、「Creating tasks for ongoing replication using AWS DMS」およびブログ投稿「How to work with native CDC support in AWS DMS | DBA、移行エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
カットオーバーの 48 時間前にインスタンスでマルチ AZ を有効にします。 | 本番インスタンスの場合は、Amazon RDS インスタンスでマルチ AZ 配置を有効にして、高可用性 (HA) とディザスタリカバリ (DR) のメリットを活用することをお勧めします。 | DBA、移行エンジニア |
AWS DMS CDC 専用タスクを停止します (CDC がオンになっている場合)。 |
| DBA |
トリガーを有効にします。 | CDC タスクが作成される前に無効にしたトリガーを有効にします。 | 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; /
混合移行アプローチの方がうまくいくシナリオ
ソースデータベースに数百万行のテーブルがあり、LOBSEGMEGT 列のサイズが非常に大きいというまれなシナリオでは、このパターンによって移行が遅くなります。Oracle では、ネットワークリンクを介して LOBSEGMENT を 1 つずつ移行します。ソーステーブルから (LOB カラムのデータとともに) 1 つの行を抽出し、その行をターゲットテーブルに挿入し、すべての行が移行されるまでこのプロセスを繰り返します。データベースリンクを介した Oracle Data Pump は、LOBSEGMENT の一括ロードまたはダイレクトパスロードのメカニズムをサポートしていません。
この状況では、次のことをお勧めします。
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 インスタンスにバッチで挿入します。これによりパフォーマンスが向上します。