View a markdown version of this page

AWS DMS を使用して Amazon RDS for Oracle を Amazon RDS for PostgreSQL に移行します - AWS 規範ガイダンス

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

AWS DMS を使用して Amazon RDS for Oracle を Amazon RDS for PostgreSQL に移行します

Amazon Web Services、Pinesh Singal

概要

このパターンは、Amazon Relational Database Service (Amazon RDS) を、Amazon Amazon Web Services (AWS) クラウド上の Amazon RDS for PostgreSQL データベースに移行する際のガイダンスを提供します。データベース間の接続を暗号化するために、このパターンでは Amazon RDS と AWS Database Migration Service (AWS DMS) の認証局 (CA) と SSL モードを使用します。

このパターンは、トランザクション数が多い数テラバイトの Oracle ソースデータベースに対して、ダウンタイムをほとんどまたはまったく発生させないオンライン移行戦略を示しています。データセキュリティのため、このパターンではデータ転送時に SSL を使用します。

このパターンでは、AWS Schema Conversion Tool (AWS SCT) を使用して Amazon RDS for Oracle データベーススキーマを Amazon RDS for PostgreSQL スキーマに変換します。このパターンでは、AWS SCT を使用してデータを Amazon RDS for Oracle から Amazon RDS for PostgreSQL に移行します。

前提条件と制限事項

前提条件

  • アクティブな AWS アカウント 

  • rds-ca-rsa2048-g1 のみで設定された Amazon RDS データベース認証局 (CA)

    • rds-ca-2019 証明書は、2024 年 8 月に失効しました。

    • rds-ca-2015 証明書は、2020 年 3 月 5 日に失効しました。

  • AWS SCT

  • AWS DMS

  • pgAdmin

  • SQL ツール (SQL Developer や SQL*Plus など)

制限事項

  • Amazon RDS for Oracle — 最小要件は、エンタープライズエディションおよびスタンダード 2 エディションの Oracle バージョン 19c です。

  • Amazon RDS for PostgreSQL — 最小要件は PostgreSQL バージョン 12 以降 (バージョン 9.x 以降用) です。

製品バージョン

  • Amazon RDS for Oracle DB インスタンスバージョン 12.1.0.2 以降

  • Amazon RDS for PostgreSQL データベースバージョン 11.5 インスタンス

アーキテクチャ

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

  • バージョン 12.1.0.2.v18 の Amazon RDS for Oracle データベースインスタンス。

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

  • AWS DMS

  • バージョン 11.5 以降のAmazon RDS for PostgreSQL データベースインスタンス

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

次の図は、Oracle (ソース) データベースと PostgreSQL (ターゲット) データベース間のデータ移行アーキテクチャのアーキテクチャを示しています。このアーキテクチャには以下が含まれます。

  • 仮想プライベートクラウド (VPC)

  • アベイラビリティゾーン

  • プライベートサブネット

  • Amazon RDS for Oracle のデータベース

  • AWS DMS レプリケーションインスタンスを作成します。

  • RDS for PostgreSQL データベース

ソースデータベースとターゲットデータベースの接続を暗号化するには、Amazon RDS と AWS DMS で CA と SSL モードを有効にする必要があります。

RDS for Oracle と AWS DMS 間、および AWS DMS と RDS for PostgreSQL 間でデータを移動します。

ツール

AWS サービス

  • AWS Database Migration Service (AWS DMS)」 を使用して、データストアを AWS クラウドへ、またはクラウドセットアップとオンプレミスセットアップの組み合わせの間に移行します。

  • OracleのAmazon Relational Database Service (Amazon RDS)」 によって、AWS クラウドで Oracleリレーショナルデータベースをセットアップ、運用、スケーリングができます。

  • Amazon Relational Database Service (Amazon RDS)」 を使用して、AWS クラウドでの PostgreSQL リレーショナルデータベースをセットアップ、運用、スケーリングできます。

  • AWS Schema Conversion Tool (AWS SCT)」は、ソースデータベーススキーマとカスタムコードの大部分をターゲットデータベースと互換性のある形式に自動的に変換することで、異種データベース移行をサポートします。

その他のサービス

  • pgAdmin」 は PostgreSQL 用のオープンソース管理ツールです。データベースオブジェクトの作成、管理、使用を支援するグラフィカルインターフェイスを提供します。

ベストプラクティス

Amazon RDS では、AWS セキュリティのベストプラクティスとして、新しい CA 証明書を提供しています。新しい証明書とサポートされている AWS リージョンの詳細については、「SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化」を参照してください。

RDS インスタンスの現在の CA 証明書が rds-ca-2019 で、これを rds-ca-rsa2048-g1 にアップグレードする場合は、「DB インスタンスまたはクラスターの変更による CA 証明書の更新」または「メンテナンスの適用による CA 証明書の更新」の手順に従います。

エピック

タスク説明必要なスキル

Oracle データベースインスタンスを作成します。

AWS アカウントにサインインし、AWS マネジメントコンソールを開いて Amazon RDS コンソールに移動します。コンソールで [データベースの作成] を選択し、[Oracle] を選択します。

AWS 全般、DBA

セキュリティグループを設定します。

インバウンドおよびアウトバウンドのセキュリティグループを設定します。

AWS 全般

オプショングループを作成します。

Amazon RDS for Oracle データベースと同じ VPC およびセキュリティグループにオプショングループを作成します。[オプション] では、[SSL] を選択します。[ポート] では、[2484] (SSL 接続用) を選択します。

AWS 全般

オプション設定を行います。

以下の設定を使用します。

  • SQLNET.CIPHER_SUITE: SSL_RSA_WITH_AES_256_CBC_SHA

  • SQLNET.SSL_VERSION: 1.2 or 1.0

AWS 全般

RDS for Oracle DB インスタンスを変更します。

rds-ca-rsa2048-g1 として CA 証明書を設定します。

[オプショングループ] で、以前に作成したオプショングループをアタッチします。

AWS 全般、DBA

RDS for Oracle DB インスタンスが使用可能であることを確認します。

Amazon RDS for Oracle データベースインスタンスが稼働中であり、データベーススキーマにアクセスできることを確認します。

RDS for Oracle DB に接続するには、sqlplus コマンドラインからコマンドを使用します。

$ sqlplus orcl/****@myoracledb.cokmvis0v46q.us-east-1.rds.amazonaws.com:1521/ORCL SQL*Plus: Release 12.1.0.2.0 Production on Tue Oct 15 18:11:07 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. Last Successful login time: Mon Dec 16 2019 23:17:31 +05:30 Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL>
DBA

RDS for Oracle データベースにオブジェクトとデータを作成します。

オブジェクトを作成し、スキーマにデータを挿入します。

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

RDS for PostgreSQL データベースを作成します。

Amazon RDS コンソールの [データベースの作成] ページで、[PostgreSQL] を選択して Amazon RDS for PostgreSQL データベースインスタンスを作成します。

AWS 全般、DBA

セキュリティグループを設定します。

インバウンドおよびアウトバウンドのセキュリティグループを設定します。

AWS 全般

パラメータグループを作成します。

PostgreSQL バージョン 11.x を使用している場合は、パラメータグループを作成して SSL パラメータを設定します。PostgreSQL バージョン 12 では、SSL パラメータグループはデフォルトで有効になっています。

AWS 全般

パラメータの編集。

rds.force_ssl パラメータを 1 (オン)に変更します。

デフォルトでは、 ssl パラメータが 1 (オン)です。rds.force_ssl パラメータを 1 に設定すると、すべての接続が SSL モードでのみ接続するように強制されます。

AWS 全般

RDS for PostgreSQL DB インスタンスを更新します。

rds-ca-rsa2048-g1 として CA 証明書を設定します。

PostgreSQL のバージョンに応じて、デフォルトのパラメータグループまたは以前に作成したパラメータグループを添付します。

AWS 全般、DBA

RDS for PostgreSQL DB インスタンスが使用可能であることを確認します。

Amazon RDS for PostgreSQL データベースが稼働していることを確認します。

この psql コマンドは、コマンドラインから sslmode set を使用して SSL 接続を確立します。

1 つの方法は、sslmode=1 パラメーターグループに設定し、psql コマンドに sslmode パラメーターを含めずに接続を使用することです。

次の出力は、SSL 接続が確立されたことを示しています。

$ psql -h mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com -p 5432 "dbname=pgdb user=pguser" Password for user pguser: psql (11.3, server 11.5) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help. pgdb=>

2 つ目の方法は、sslmode=1 パラメータグループに設定し、その sslmode パラメータを psql コマンドに含めることです。

次の出力は、SSL 接続が確立されたことを示しています。

$ psql -h mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com -p 5432 "dbname=pgdb user=pguser sslmode=require" Password for user pguser: psql (11.3, server 11.5) SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help. pgdb=>
DBA
タスク説明必要なスキル

AWS SCT をインストールします。

AWS SCT アプリケーションの最新バージョンをインストールします。

AWS 全般

JDBC ドライバーを使用して AWS SCT を設定します。

Oracle (「ojdbc8.jar」) と PostgreSQL (postgresql-42.2.5.jar) 用の Java データベース接続 (JDBC) ドライバーをダウンロードしてください。

AWS SCT でドライバを設定するには、[設定][グローバル設定][ドライバー] を選択します。

AWS 全般

AWS SCT プロジェクトを作成します。

Oracle をソース DB エンジンとして、Amazon RDS for PostgreSQL をターゲット DB エンジンとして使用して、AWS SCT プロジェクトとレポートを作成します。

  1. 接続の詳細を指定して、ソース Oracle データベースとターゲット Amazon RDS for PostgreSQL データベースへの接続をテストします。

    ソース Oracle データベースには、以下の権限または権限が必要です。

    • CONNECT

    • SELECT_CATALOG_ROLE

    • SELECT ANY DICTIONARY

    • SELECT on SYS.USER$ TO <sct_user>

    詳細については、「AWS SCTのソースとしての Oracle データベースの使用」 を参照してください。

    AWS SCT が移行レポートを開始する前に、ソース接続とターゲット接続の両方に成功する必要があります。

  2. レポートが表示されたら、変換するスキーマを入力し、[完了] を選択します。

AWS 全般

データベースオブジェクトを検証します。

  1. [スキーマをロード] を選択します。

    AWS SCT には、エラーのあるオブジェクトを含め、ソースオブジェクトと変換されたターゲットオブジェクトが表示されます。ターゲットデータベース上の不正なオブジェクトをすべて更新します。

  2. エラーを確認し、手動操作でクリアします。

  3. すべてのエラーがクリアされたら、[スキーマをロード] をもう一度選択します。

  4. [データベースに適用] を選択します。

  5. pgAdmin または PostgreSQL DB Connect をサポートする任意のツールに接続し、スキーマとオブジェクトを確認します。

AWS 全般、DBA
タスク説明必要なスキル

レプリケーションインスタンスを作成します。

  1. アカウントにサインインして AWS マネジメントコンソールを開いて AWS DMS コンソールに移動します。

  2. VPC、セキュリティグループ、アベイラビリティーゾーン、その他の接続属性の有効な設定を使用してレプリケーションインスタンスを作成します。

AWS 全般

証明書をインポートします。

AWS リージョンの証明書バンドル (PEM) をダウンロードします。

バンドルには、rds-ca-2019 中間証明書とルート証明書の両方が含まれています。またバンドルには、rds-ca-rsa2048-g1rds-ca-rsa4096-g1、および rds-ca-ecc384-g1 ルート CA 証明書も含まれています。アプリケーション信頼ストアでは、ルート CA 証明書の登録のみが必要です。

AWS 全般

ソースエンドポイントを作成します。

  1. RDS DB インスタンスを選択を選択し、作成した RDS for Oracle DB インスタンスを選択して、Amazon RDS for Oracle のソースエンドポイントを作成します。エンドポイント設定の詳細が自動的に入力されます。

  2. [アクセス情報を手動で提供する] を選択します。[ポート] には、必ず [2484] と入力してください。

  3. [Secure Socket Layer (SSL) モード] で、verify-ca を選択し、前に作成した CA 証明書を選択します。

  4. [エンドポイントの設定] で、サイズなしで NUMBER データ型をサポートする接続属性 NumberDataTypeScale=-2 を追加します。

詳細については、「AWS Database Migration Service に対して、 Oracle のデータベースをソースとして使用する」 を参照してください。

AWS 全般

ターゲットエンドポイントを作成します。

  1. [RDS DB インスタンスの選択] を選択し、PostgreSQL DB インスタンスの RDS を選択して、Amazon RDS for PostgreSQL のターゲットエンドポイントを作成します。エンドポイント設定の詳細が自動的に入力されます。

  2. [アクセス情報を手動で提供する] を選択します。[ポート] には、必ず [2484] と入力してください。

詳細については、「AWS データベース移行サービスのターゲットとして PostgreSQL データベースを使用する」 を参照してください。

AWS 全般

エンドポイントをテストします。

  1. ソースとターゲットのエンドポイントをテストして、両方が正常に動作し、使用可能であることを確認します。

  2. テストに失敗した場合は、セキュリティグループのインバウンドルールが有効であることを確認します。

AWS 全般

移行タスクを作成します。

フルロードと変更データキャプチャ (CDC) またはデータ検証用の移行タスクを作成するには、次の手順を実行します。

  1. データベース移行タスクを作成するには、レプリケーションインスタンス、ソースデータベースエンドポイント、ターゲットデータベースエンドポイントを選択します。移行タイプを次のいずれかに指定します。

    • [既存のデータを移行] (フルロード)

    • データ変更のみをレプリケートする

    • [既存のデータを移行し、進行中の変更を複製] (フルロードと CDC)

  2. [テーブルマッピング] では、選択ルールと変換ルールを GUI または JSON 形式で設定できます。

    • [選択ルール] で、スキーマを選択し、テーブル名を入力して、設定するアクション (「含める」または「除外」) を選択します。例えば、「スキーマ ORCL」、「テーブル名 %」、「アクションを含む」などです。

    • [変換ルール] で、以下のいずれかを行います。

      • スキーマを選択し、アクション (大文字と小文字、接頭辞、接尾辞) を選択します。たとえば、「ターゲットスキーマ ORCL」、「アクションは小文字にする」などです。

      • スキーマを選択し、テーブル名を入力して、アクション (大文字と小文字、接頭辞、接尾辞) を選択します。たとえば、ターゲットスキーマ ORCL、テーブル % 、アクションを小文字にするなどです。

  3. Amazon CloudWatch Logs モニタリングを有効にします。

  4. マッピングルールには、次の JSON コードを追加します。

    { "rules": [ { "rule-type": "transformation", "rule-id": "1", "rule-name": "1", "rule-target": "table", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "convert-lowercase", "value": null, "old-value": null }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "schema", "object-locator": { "schema-name": "ORCL", "table-name": "%" }, "rule-action": "convert-lowercase", "value": null, "old-value": null }, { "rule-type": "selection", "rule-id": "3", "rule-name": "3", "object-locator": { "schema-name": "ORCL", "table-name": "DEPT" }, "rule-action": "include", "filters": [] } ] }
AWS 全般

本番稼働を計画する。

アプリケーション所有者などの利害関係者とダウンタイムを確認し、本番システムで AWS DMS を実行してください。

移行リード

移行タスクを実行します。

  1. ステータスが [準備完了] である AWS DMS タスクを開始し、Amazon CloudWatch の移行タスクログにエラーがないか監視します。

    移行タイプとして [既存のデータを移行し、進行中の変更を複製] を選択し、ステータスが [継続的なレプリケーションのロード完了] である場合、CDC データ移行によるフルロードが完了し、検証が進行中です。

  2. 移行を開始すると、CloudWatch で追加の SSL 接続情報を取得できます。Oracle に対して、CloudWatch でコネクタの文字列を示しています。

    2019-12-17T09:15:11 [SOURCE_UNLOAD ]I: Connecting to Oracle: Beginning session (oracle_endpoint_conn.c:834)

    PostgreSQL 接続文字列は、次の例のようになります。

    2019-12-17T09:15:11 [TARGET_LOAD ]I: Going to connect to ODBC connection string: PROTOCOL=7.4-0;DRIVER={PostgreSQL};SERVER=mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com;DATABASE=pgdb;PORT=5432;sslmode=require;UID=pguser; (odbc_endpoint_imp.c:2218)

AWS 全般

データを検証します。

移行タスクの結果と、移行元の Oracle データベースと移行先の PostgreSQL データベースのデータを確認します。

  1. pgAdmin に接続し、スキーマ ORCL を使用して PostgreSQL データベース内のデータを確認します。

  2. CDC の場合は、ソース Oracle データベースにデータを挿入または更新して、進行中の変更を確認します。

DBA

移行タスクを停止します。

データ検証が正常に完了したら、移行タスクを停止します。

AWS 全般
タスク説明必要なスキル

AWS DMS タスクを削除します。

  1. AWS DMS コンソールで、[データベース移行タスク] に移動し、進行中または実行中の AWS DMS タスクを停止します。

  2. タスク、または複数のタスクを選択し、[アクション] を選択して、[削除] を選択します。

AWS 全般

AWS DMS エンドポイントを削除します。

作成したソースエンドポイントとターゲットエンドポイントを選択し、[アクション] を選択して、[削除] を選択します。

AWS 全般

AWS DMS レプリケーションインスタンスを削除します。

レプリケーションインスタンスを選択し、[アクション] を選択して、[削除] を選択します。

AWS 全般

PostgreSQL データベースを削除します。

  1. Amazon RDS コンソールで、[データベース] を選択します。

  2. 作成した PostgreSQL データベースインスタンスを選択し、[アクション] を選択してから [削除] を選択します。

AWS 全般

Oracle データベースを削除します。

Amazon RDS コンソールで Oracle データベースインスタンスを選択し、[アクション] を選択し、[削除] を選択します。

AWS 全般

トラブルシューティング

問題ソリューション

AWS SCT のソースとターゲットのテスト接続が失敗しています。

受信トラフィックを受け入れるように JDBC ドライバーバージョンと VPC セキュリティグループのインバウンドルールを設定します。

ソースまエンドポイントのテスト実行が失敗しました。

エンドポイントの設定と、レプリケーションインスタンスが使用可能かどうかを確認します。

AWS DMS タスクの全ロード実行が失敗します。

ソースデータベースとターゲットデータベースに、一致しているデータ型とサイズがあるかを確認します。

AWS DMS 検証移行タスクがエラーを返します。

  1. テーブルにプライマリキーがあるかどうかを確認します。プライマリキーのないテーブルは検証されません。

  2. テーブルには、プライマリキーがありますが、エラーが返された場合、ソースエンドポイントの追加の接続属性を確認します。追加の接続属性は、テーブル内のデータに基づいて動的にサイズなしで NUMBER データ型をサポートするために numberDataTypeScale=-2 を持っている必要があります。

関連リソース

データベース

SSL DB 接続

AWS SCT

AWS DMS

追加情報

Amazon RDS 認証局証明書 rds-ca-2019 は、2024 年 8 月に失効しました。RDS DB インスタンスまたはマルチ AZ DB クラスターに接続するために証明書検証付きの SSL または TLS を使用している場合、または使用する予定がある場合は、新しい CA 証明書 (rds-ca-rsa2048-g1rds-ca-rsa4096-g1、または rds-ca-ecc384-g1) のいずれかを使用することを検討してください。