Oracle ソースデータベースから PostgreSQL ターゲットデータベース用の Amazon Relation Database Service (Amazon RDS) にデータを移行したいです。AWS Database Migration Service (AWS DMS) を使用して Oracle から PostgreSQL にデータを移行する場合、どのようなベストプラクティスに従うことができますか?
解決方法
Oracle から PostgreSQL データベースに移行するためのベストプラクティス
- データの移行を開始する前に、必要な前提条件を使用して Oracle ソースデータベースを設定します。
- 他の QA/DEV データベース環境で同じ本番データを使用して移行をテストします。その結果に基づいて、本番環境の移行を続行できます。テストと本番環境の両方の移行には、必ず同じ AWS DMS 設定を使用してください。
- 移行中のリソース競合を回避するために、十分な CPU、メモリ、ストレージ、および IOPS で AWS DMS インスタンスをプロビジョニングします。詳細については、「移行に適切な AWS DMS レプリケーションインスタンスを選択する」および「レプリケーションインスタンスに最適なサイズを選択する」を参照してください。インスタンスのアップグレードに関連するコストの詳細については、「AWS Database Migration Service の料金」を参照してください。同じ考慮事項でターゲット Amazon RDS インスタンスをプロビジョニングします。
- ソースデータベースに大量のテーブルが含まれており、ワークロードが高い場合は、テーブルを複数の AWS DMS タスクに分割します。ソース、アプリケーショントラフィックパターン、および LOB 列の有無に基づいてテーブルを分割します。テーブルに多くの LOB 列があり、ソースでの書き込みトラフィックが多い場合は、そのテーブル用に別のタスクを作成します。
- 並列フルロードを使用して、重いワークロードの移行時間を短縮します。詳細については、「選択したテーブルおよびビューさらにコレクションで並列ロードを使用する」を参照してください。
- 移行中は、ターゲットデータベースのバックアップと、バイナリ、一般、監査、PG クエリログなどのデータベース固有のログをオフにします。問題のトラブルシューティングを行うには、それらをオンに戻します。
- 移行中は、ターゲットデータベースでトリガー、プロシージャ、その他の cron ジョブ、イベントスケジューラをオフにします。
- 移行中は、ターゲット RDS データベースでマルチ AZ コンセプトを使用しないでください。
- 移行中は、他の外部クライアントトラフィックをターゲットデータベースに印加しないでください。
- レプリケーションの変更データキャプチャ (CDC) フェーズを開始する前に、ターゲットデータベースにセカンダリインデックスを追加します。
- 移行前にターゲットの外部キーをオフにします。これを行うには、ターゲットの追加接続属性 (ECA)/エンドポイント設定を使用します。詳細については、「PostgreSQL データベースを AWS Database Migration Service のターゲットとして使用する」を参照してください。
afterConnectScript=SET session_replication_role='replica'
-
移行には、制限付き LOB やインライン LOB など、最適化された LOB 設定を使用します。
-
バッチ適用 CDC メソッドを使用する前に、デフォルトのトランザクション CDC 適用を使用してワークロードをテストします。詳細については、「DMS バッチ適用機能を使用して CDC レプリケーションパフォーマンスを向上させるにはどうすればよいですか?」を参照してください。
-
ターゲットエンドポイント設定の executeTimeout の値を増やします。この値は、PostgreSQL インスタンスのクライアントステートメントのタイムアウトを設定します。デフォルト値は60秒です。
-
ID 列にシーケンスを使用している場合は、ターゲットの値をソースよりも高く設定します。移行のカットオーバー日において、ターゲット値がソースよりも高いことを確認します。このアプローチは、移行後のシーケンス ID の衝突を防ぎます。
-
全負荷フェーズでパフォーマンスを向上させるには、次のような設定を使用します。
- MaxFullLoadSubTasks - デフォルト値は 8 で、最大値は 49 です。この設定は便利ですが、十分なリソースがあることを確認してください。
- CommitRate - この設定を使用して、まとめて転送できるレコードの最大数を示します。
- 全ロードフェーズのフル LOB モードの場合 - ソースから N 行 = N 個の挿入 + N 個の更新がターゲット = N 個のイベント、CommitRate=N になります。
- 全ロードフェーズの制限付きLOBモードの場合 - CSV ファイルに N 行を書き込み、CommitRate=N とします)。
- 大きなテーブルの場合は、CSV ファイルのサイズを大きくします。これは、ターゲットエンドポイント設定の maxFileSize によって制御されます。
Oracle データベースを PostgreSQL データベースに移行する
注: これらの手順を続行する前に、「前提条件」の説明に従ってソース Oracle データベースを準備します。
1. SQL ドライヤーと AWS Schema Conversion Tool (AWS SCT) をローカルマシンにインストールします。
2. Oracle ソースと PostgreSQL ターゲットデータベースを設定します。
3. AWS SCT を使用して Oracle スキーマを PostgreSQL に変換します。
4. AWS DMS レプリケーションインスタンスを作成します。
5. AWS DMS のソースエンドポイントとターゲットエンドポイントを作成します。
6. AWS DMS タスクを作成して実行します。
7. [テーブルマッピング] で、変換ルールを適用します。convert-lowercase の値を指定して rule-action パラメーターを追加します。Oracle エンジンはデフォルトですべてのオブジェクト名を大文字で保存しますが、PostgreSQL ではすべてのオブジェクト名を小文字で保存します。
8. 全ロードおよび CDC AWS DMS タスクを作成して、データをレプリケートします。全ロードフェーズが完了したら、StopTaskCachedChangesNotApplied を使用してタスクを停止します。次に、セカンダリインデックスを作成します。
9. PostgreSQL にカットオーバーします。
関連情報
PostgreSQL への Oracle データベースの移行
Oracle データベースを PostgreSQL に移行する方法