------ 2025/05/27 ------ オンプレミスのOracle Database 11gからAmazon RDS for Oracle19cにデータベースを移行しようとしています。 RDSインスタンスを構築後、最初に、Oracle Datapumpを使用して全Oracleオブジェクトを一括移行しました。 その後、RDSの新環境で動作させるためにパラメータ・テーブルのデータを変更しました。 また、データベースリンクは再作成し、それを参照するマテリアライズドビューも定義を変更して再作成しました。 また、RDSになるとディレクトリオブジェクトのパスが変わり、名前も変更したため、 それを参照するストアドプロシージャも改修して再作成しました。 これらの準備ができた状態で、最終的な本番稼働のための移行を行うとき、 次の2つの手法案(パターン)のうちどちらが望ましいですか。それぞれのメリット、デメリットを比較してください。 パターン1. 最終移行直前に、RDS上で変更したデータベースリンク、マテリアライズドビュー、ディレクトリオブジェクト、ストアドプロシージャをエクスポートして退避しておく。 最終移行でも全オブジェクトをオンプレミスからエクスポート/インポートする。その後に、退避していたオブジェクトを上書きでインポートする。 パターン2. 最終移行では、RDS側のテーブルのデータをTRUNCATEし、シーケンスをDROPし、他のオブジェクトは触らない。 オンプレミスからテーブルのデータとシーケンスだけをエクスポート/インポートする。 ------ パターン1のメリット ・オンプレと同じ構成で移行できるため、オブジェクト自体は漏れなく最新版が移行ができ、整合性を確保しやすい ・Datapumpがオブジェクト間の依存関係が崩れないよう自動的に調整してくれるため、  上書きが不要なオブジェクトに関しては依存関係の問題が起きにくい ・再現性が高く、手順の一貫性がある。予期しない問題が移行途中のどこで起きても同じ手順で再移行できる ・多様な関係者、ステークホルダーにとって作業の全体像が理解しやすい。多様な人々の支援が得られやすいかも パターン1のデメリット ・変更がない・移行が不要なデータも全て移行するため時間が掛かる ・修正済オブジェクトを再インポートする手間と順序に注意が必要(特にDBLINK,ディレクトリ等) ・環境設定パラメータ系のデータに設定漏れがあると移行後の原因特定が複雑化、長期化しやすい ・一つ一つのスクリプトは単純だが総じて作業工程数が多く手順は複雑。事前に入念にリハーサルが必要 ・せっかくのDB移行の機会なのに、表のINITIALなどのDBパラメータ調整ができない。オンプレの設定をそのまま引き継いでしまう ・移行用、退避用のリソースを使う パターン2のメリット ・必要なオブジェクトを選んで移行できる・メタデータのロードがないので高速。余裕時間を確保できる ・最終本番移行の作業範囲をデータとシーケンスに限定できるため、移行中の問題発生リスクが低く、  RDS固有の環境設定を最終段階になって壊さないため、稼働後の問題発生時も調査個所を限定しやすい ・せっかくのDB移行の機会を生かして、オブジェクトによってはチューニングした設定が可能(19c特有の関数が使えるとか) ・移行用、退避用のリソースが最低限で済む ・「最終移行はデータだけ」という概念はAWS DMSに近い。AWS推奨のパターンと言えば手法選択の理解は得やすいかも パターン2のデメリット ・オンプレ側でオブジェクト構成が変わった(表や列が増えた、プロシージャを改修した等)際の反映漏れに注意が必要 ・オブジェクトの依存関係による処理順序の入念な事前調整が必要。FKやトリガーで特に問題が起きやすい ・移行途中に予期しない問題が起きた時、起きた場所次第で柔軟な再開方法をその場で考えることになりやすい ・作業工程数が少なく手順は簡潔だが一つ一つのスクリプトは総じて複雑になりやすい。事前に移行漏れがないか入念に確認が必要 パターン1はオンプレミスの最新状態を移行しやすい、問題が起きた場合も同じ手順で再移行できる。 パターン2の方が手順が明確で簡潔でミスが起きにくいが、オンプレミスの改修ソースの反映漏れの危険がある。 RDS移行と同時に表や表定義に変更を加える個所が多い、移行直前まで変更がありうる場合はパターン1が推奨。 最終移行前に、オンプレミスでの表定義やストアドプロシージャの改修などを確実に凍結できるならパターン2が推奨。 パターン1で行く場合は、移行手順が複雑なので詳細に作成し、リハーサルを行うのが良い。 パターン2で行く場合は、事前に毎日・毎週オンプレミス⇒RDSのロード処理を実行しておき、整合性が取れていることを確認するのが良い。 総じて、DB全体の完全性、一貫性の保証にはパターン1が有利。 対して移行後に問題が起きた場合の原因切り分け、迅速対応にはパターン2が有利。 ------