Data Transmission Service (DTS) を使用して、ダウンタイムを最小限に抑えながら、自己管理 Oracle データベースから自己管理 PostgreSQL データベースへデータを移行します。DTS はスキーマ移行、完全なデータ移行、および増分データ移行をサポートしており、これら 3 つの移行タイプを同時に実行することで、移行中も Oracle データベースをオンラインのまま利用できます。
前提条件
開始する前に、以下の点を確認してください。
Oracle データベースのバージョンが 9i、10g、11g、12c、18c、または 19c である
Oracle データベースはアーカイブログモードで実行中であり、アーカイブログファイルにアクセス可能で、適切な保存期間が設定されています — アーカイブされたリドログファイルの管理
補足ログ記録が有効になっています:
SUPPLEMENTAL_LOG_DATA_PKおよびSUPPLEMENTAL_LOG_DATA_UIの両方が [はい] に設定されています — 詳細については、「補足ログ記録」をご参照ください。移行対象の各テーブルにプライマリキーまたは UNIQUE NOT NULL インデックスが定義されている
ターゲットとなる PostgreSQL データベースが作成済みで、アクセス可能である
DTS の Oracle ソースに対する機能と制限を確認した上で、移行前に Advanced Database & Application Migration (ADAM) を使用してデータベースを評価してください。「Oracle データベースの準備」および「概要」をご参照ください。
課金
| 移行タイプ | タスク構成料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行および完全なデータ移行 | 無料 | Alibaba Cloud からインターネット経由でデータを移行する場合のみ課金されます。詳細については、「課金概要」をご参照ください。 |
| 増分データ移行 | 課金対象です。詳細については、「課金概要」をご参照ください。 | — |
移行タイプ
| タイプ | DTS の処理内容 |
|---|---|
| スキーマ移行 | 選択したオブジェクトのスキーマをターゲット PostgreSQL データベースに移行します。対応するオブジェクトタイプ:テーブル、ビュー、シノニム、トリガー、ストアドプロシージャ、ストアドファンクション、パッケージ、およびカスタム型。Oracle によって自動生成される組み込みオブジェクトは移行されません。 説明 このシナリオでは、DTS はトリガーと互換性がありません。データの不整合を回避するため、移行前にソースデータベースからトリガーを削除してください。詳細については、「トリガーを含むソースデータベース向けのデータ同期タスクの構成」をご参照ください。 |
| 完全なデータ移行 | Oracle データベースから既存のすべてのデータをターゲット PostgreSQL データベースに移行します。このフェーズ中は、移行済みオブジェクトに対して DDL 操作を実行しないでください。 |
| 増分データ移行 | 完全なデータ移行が完了した後、DTS は Oracle データベースからリドログファイルをポーリングし、進行中の変更を PostgreSQL にレプリケートします。これにより、移行中もアプリケーションを Oracle 上で継続して実行できます。 |
移行タイプの選択
スキーマ移行 + 完全なデータ移行のみ:切り替え時にソースデータベースをオフラインにできる一括移行に使用します。
スキーマ移行 + 完全なデータ移行 + 増分データ移行:ダウンタイムをほぼゼロに抑えた移行に使用します。DTS が進行中の変更を PostgreSQL にレプリケートしている間も、Oracle データベースはオンラインのままです。
増分データ移行を含めない場合は、データの不整合を回避するため、移行中にソースデータベースへの書き込みを停止してください。
増分移行でサポートされる SQL 操作
| 操作タイプ | 文 |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | CREATE TABLE(パーティション句、サブパーティション句、または関数を含む文、および CREATE TABLE AS SELECT はサポートされていません)、ALTER TABLE(ADD COLUMN、ADD INDEX、DROP COLUMN、DROP INDEX、MODIFY COLUMN、RENAME COLUMN)、DROP TABLE、RENAME TABLE、TRUNCATE TABLE、CREATE INDEX |
制限事項
ソースデータベースの制限事項:
ソースデータベースをホストするサーバーには十分なアウトバウンド帯域幅が必要です。帯域幅が不足すると、移行速度が低下します。
移行対象のテーブルには、すべてのフィールドが一意である PRIMARY KEY または一意制約(UNIQUE constraint)が設定されている必要があります。それ以外の場合、ターゲットデータベースに重複レコードが含まれる可能性があります。
Oracle のバージョンが 12c 以降の場合、テーブル名は 30 バイトを超えてはなりません。
テーブルを移行オブジェクトとして選択し、ターゲットでテーブルまたはカラムの名前を変更する必要がある場合:単一のタスクでは最大 1,000 個のテーブルをサポートします。1,000 個を超えるテーブルを移行する場合は、複数のタスクをバッチ処理で実行するか、データベース全体を 1 つのタスクで移行してください。
Oracle の VARCHAR2 型フィールドに空文字列(Oracle では NULL として扱われる)が含まれており、対応するターゲットカラムに NOT NULL 制約が設定されている場合、移行タスクは失敗します。
Express Connect 経由で接続される Oracle RAC データベースをソースデータベースとして使用する場合、ソースデータベースの構成時にデータベースの VIP を指定する必要があります。
Express Connect、VPN Gateway、Smart Access Gateway、Database Gateway、または Cloud Enterprise Network(CEN)経由で接続される Oracle RAC データベースをソースデータベースとして使用する場合、Single Client Access Name(SCAN)IP アドレスではなく、単一の VIP を使用できます。VIP を指定した後は、Oracle RAC データベースのノードフェイルオーバーはサポートされません。
増分移行の要件:
リドログおよびアーカイブログの有効化が必要です。
増分移行のみ:リドログおよびアーカイブログを 24 時間以上保持してください。
完全なデータ移行 + 増分データ移行:リドログおよびアーカイブログを最低 7 日間保持してください。完全なデータ移行が完了した後は、保持期間を 24 時間以上に短縮できます。
重要DTS が保持期間の不足によりリドログまたはアーカイブログを取得できない場合、タスクは失敗します。最悪の場合、データの不整合やデータ損失が発生する可能性があります。保持期間の不足は、DTS のサービスレベルアグリーメント(SLA)の対象外です。
移行中のソースデータベースで避けるべき操作:
スキーマ移行または完全なデータ移行中は、DDL 操作(スキーマ変更)を実行しないでください — タスクが失敗します。
完全なデータ移行のみのタスク実行中は、ソースデータベースへの書き込みを実行しないでください — データの不整合が発生する可能性があります。
どの移行フェーズにおいても、LONGTEXT カラムの更新は実行しないでください — タスクが失敗します。
その他の制限事項:
非ピーク時間帯にデータを移行してください。完全なデータ移行では、両方のデータベースで読み取りおよび書き込みリソースが使用されるため、サーバー負荷が増加します。
完全なデータ移行後、ターゲットクラスターの使用済み表領域はソースデータベースよりも大きくなります。これは、同時 INSERT 操作によるテーブルの断片化が原因です。
DTS は失敗した移行タスクを最大 7 日間再試行します。ワークロードをターゲットに切り替える前に、失敗したタスクを停止またはリリースするか、
REVOKEを使用して DTS のターゲットデータベースへの書き込み権限を取り消してください。そうしないと、再開されたタスクがターゲットのデータを上書きする可能性があります。ソースおよびターゲットデータベースの文字セットは互換性がある必要があります — 互換性がない文字セットはデータの不整合またはタスク失敗を引き起こします。
互換性のないデータ型によるタスク失敗を回避するため、DTS のスキーマ移行機能を使用してください。
ソースおよびターゲットデータベースのタイムゾーンは一致している必要があります。
NULL 終端文字
'\0'は PostgreSQL に書き込めません。移行データに'\0'が含まれている場合、DTS はこれを破棄しますが、これによりデータの不整合が発生する可能性があります。スキーマ移行中、Oracle の CHECK 制約は PostgreSQL では NOT NULL 制約に変換されます。
カスタム型オブジェクトは移行されますが、Oracle によって自動生成される組み込みオブジェクトは移行されません。
スキーマ移行中、DTS はソースからターゲットへ外部キーを移行します。
完全なデータ移行および増分データ移行中、DTS はセッションレベルで外部キー制約チェックおよびカスケード操作を一時的に無効化します。このフェーズ中にソースでカスケードまたは削除操作を実行すると、データの不整合が発生する可能性があります。
必要な権限の付与
ソース Oracle データベースにログインし、DTS 用のアカウントを作成して、必要な権限を付与します。
以下の権限を既に持つアカウントをお持ちの場合は、この手順をスキップしてください。
| データベース | スキーマ移行 | 完全なデータ移行 | 増分データ移行 |
|---|---|---|---|
| 自己管理 Oracle データベース | スキーマ所有者権限 | スキーマ所有者権限 | 詳細な権限 |
| 自己管理 PostgreSQL データベース | スキーマ所有者権限 | — | — |
アカウントの作成および権限の付与に関する手順は以下のとおりです。
Oracle: データベースアカウントの準備、CREATE USER、およびGRANT
PostgreSQL: CREATE USER および GRANT
移行タスクの作成
「データ移行タスク」ページに移動します。
Data Management(DMS)コンソール にログインします。
トップナビゲーションバーで、DTS をクリックします。
左側のナビゲーションウィンドウで、DTS(DTS) > データ移行 を選択します。
手順は DMS コンソールのレイアウトに基づいて異なる場合があります。「シンプルモード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。また、「新しい DTS コンソールのデータ移行タスクページ」に直接アクセスすることもできます。
データ移行タスク の横にあるドロップダウンリストから、データ移行インスタンスが配置されているリージョンを選択します。
新 DTS コンソールでは、左上隅のリージョンを選択します。
タスクの作成 をクリックし、ウィザードでソースおよびターゲットデータベースを構成します。
警告ソースおよびターゲットデータベースの構成後、次に進む前に、ページ上部に表示される 制限事項 を必ずご確認ください。
セクション パラメーター 説明 該当なし タスク名 DTS が自動的に名前を割り当てます。タスクを容易に識別できるように、意味のある名前を指定してください。タスク名は一意である必要はありません。 ソースデータベース データベースタイプ Oracle を選択します。 アクセス方法 この例では、[ECS 上のセルフマネージドデータベース] を選択します。他のアクセス方法の場合は、まず必要な環境を設定します。詳しくは、「準備の概要」をご参照ください。 インスタンスリージョン ソース Oracle データベースが配置されているリージョンです。 ECS インスタンス ID ソース Oracle データベースをホストする Elastic Compute Service(ECS)インスタンスの ID です。 ポート番号 ソース Oracle データベースのサービスポートです。デフォルト値:1521。 Oracle タイプ ソース Oracle データベースのアーキテクチャを選択します。非 RAC インスタンス の場合は SID パラメーターが必要です。RAC または PDB インスタンス の場合は サービス名 パラメーターが必要です。 データベースアカウント ソース Oracle データベース用の DTS アカウントです。「必要な権限の付与」で必要な権限をご確認ください。 データベースパスワード データベースアカウントのパスワードです。 ターゲットデータベース データベースタイプ PostgreSQL を選択します。 アクセス方法 この例では、ECS 上の自己管理データベース を選択します。 インスタンスリージョン ターゲット PostgreSQL データベースが配置されているリージョンです。 ECS インスタンス ID ターゲット PostgreSQL データベースをホストする ECS インスタンスの ID です。 ポート番号 ターゲット PostgreSQL データベースのサービスポートです。デフォルト値:3433。 データベース名 ターゲット PostgreSQL データベースの名前です。 データベースアカウント ターゲット PostgreSQL データベース用の DTS アカウントです。「必要な権限の付与」で必要な権限をご確認ください。 データベースパスワード データベースアカウントのパスワードです。 自己管理データベースに IP アドレスホワイトリストが設定されている場合、DTS サーバーの CIDR ブロックをホワイトリストに追加してください。その後、接続テストと続行 をクリックします。
警告DTS サーバーの CIDR ブロックをデータベースのホワイトリストまたは ECS のセキュリティグループルールに追加すると、セキュリティリスクが発生します。続行する前に、強力な認証情報を使用する、公開ポートを制限する、API 呼び出しを認証する、ホワイトリストルールを定期的に確認する、不正な CIDR ブロックをブロックするなどの予防措置を講じてください。あるいは、Express Connect、VPN Gateway、または Smart Access Gateway を使用してデータベースを DTS に接続し、データベースをインターネットに公開せずに済ませることもできます。
移行オブジェクトおよび高度な設定を構成します。
パラメーター 説明 移行タイプ 一括移行の場合は、スキーマ移行 および 完全なデータ移行 を選択します。移行中にソースデータベースをオンラインのままにする場合は、すべての 3 つ — スキーマ移行、完全なデータ移行、および 増分データ移行 — を選択します。 競合テーブルの処理モード 事前チェックを行い、エラーを報告:ターゲットデータベースにソーステーブルと同じ名前のテーブルが存在する場合、事前チェックは失敗します。同一のテーブル名が存在し、名前変更できない場合は、オブジェクト名マッピングを使用して、ターゲットデータベースに移行されるテーブルの名前を変更してください。「オブジェクト名のマッピング」をご参照ください。エラーを無視して続行:同一のテーブル名についての事前チェックをスキップします。 警告このオプションでは、プライマリキーが一致するレコードは移行されず、スキーマの差異により部分的な移行またはタスク失敗が発生する可能性があります。
ソースオブジェクト ソースオブジェクト からオブジェクトを選択し、矢印アイコンをクリックして 選択済みオブジェクト に移動します。 選択済みオブジェクト ターゲットで単一のオブジェクトの名前を変更するには、選択済みオブジェクト 内で右クリックします。「単一オブジェクトの名前のマッピング」をご参照ください。複数のオブジェクトを一度に名前変更するには、一括編集 をクリックします。「複数のオブジェクト名を一度にマッピング」をご参照ください。 説明オブジェクトの名前変更により、依存オブジェクトの移行が失敗する可能性があります。条件に基づいて行をフィルターするには、テーブルを右クリックして WHERE 句を指定します。「フィルター条件の設定」をご参照ください。特定のオブジェクトについて、増分的にレプリケートされる SQL 操作を制御するには、オブジェクトを右クリックして操作を選択します。
次へ:高度な設定 をクリックし、以下のパラメーターを構成します。
パラメーター 説明 タスクのスケジュールに使用する専用クラスターの選択 DTS はデフォルトで共有クラスターにスケジュールします。分離されたリソースを確保するには、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは 接続失敗時の再試行時間 タスク開始後にソースまたはターゲットデータベースに到達不能になった場合の DTS の再試行時間です。有効範囲:10~1440 分。デフォルト値:720。30 を超える値を設定することを推奨します。再試行ウィンドウ内に DTS が再接続できた場合、タスクは再開されます。それ以外の場合はタスクが失敗します。 説明複数のタスクが同じデータベースを共有する場合、最も最近設定された再試行時間が適用されます。再試行中は DTS インスタンスに対して課金されます — 再試行ウィンドウは要件に応じて設定し、不要になった時点で速やかにインスタンスをリリースしてください。
ソースおよびターゲットデータベースでその他の問題が発生した際の再試行までの待機時間 タスク開始後に DDL または DML 操作が失敗した場合の DTS の再試行時間です。有効範囲:1~1440 分。デフォルト値:10。10 を超える値を設定することを推奨します。 重要この値は 接続失敗時の再試行時間 より小さくする必要があります。
完全なデータ移行のスロットリングの有効化 完全なデータ移行中に DTS がデータベースに与える読み取り/書き込み負荷を制限します。ソースデータベースへの QPS、完全なデータ移行の RPS、および 完全移行のデータ移行速度(MB/s) を構成します。完全なデータ移行 が選択されている場合にのみ利用可能です。 増分データ移行のスロットリングの有効化 増分移行中の負荷を制限します。増分データ移行の RPS および 増分移行のデータ移行速度(MB/s) を構成します。増分データ移行 が選択されている場合にのみ利用可能です。 環境タグ DTS インスタンスを環境(例:本番またはステージング)でタグ付けします。任意設定です。 実際の書き込みコード ターゲットデータベースへのデータ書き込みに使用されるエンコード形式です。 ETL の構成 ETL (抽出・変換・書き出し) 機能を有効化して、データを転送中に変換します。詳細については、「ETL とは?」および「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。 モニタリングとアラート アラートを設定して、タスクが失敗した場合や移行遅延がしきい値を超えている場合に、指定された連絡先に通知されるようにします。詳細については、「新しい DTS タスクのモニタリングとアラートの設定」をご参照ください。 次へ:タスク設定の保存と事前チェック をクリックします。DTS はタスク開始前に事前チェックを実行します。事前チェックが失敗した場合:
各失敗項目の横にある 詳細の表示 をクリックし、問題を修正してから 再チェック をクリックします。
安全に無視できる警告が表示された場合は、警告の詳細の確認 > 無視 > OK をクリックし、その後 再チェック をクリックします。
この構成の API パラメーターを確認するには、次へ:タスク設定の保存と事前チェック の上にマウスを合わせ、API 呼び出しのプレビュー をクリックします。
事前チェックの 成功率 が 100% になるまで待ち、その後 次へ:インスタンスの購入 をクリックします。
インスタンスの購入 ページで、インスタンスクラスを構成します。
セクション パラメーター 説明 新規インスタンスクラス リソースグループ データ移行インスタンスのリソースグループです。デフォルト値:デフォルトリソースグループResource Management とは インスタンスクラス インスタンスクラスは、移行スループットを決定します。詳細については、「データ移行インスタンスの仕様」をご参照ください。 Data Transmission Service(従量課金)サービス利用規約 を読み、同意した上で、購入して開始 をクリックします。移行タスクが開始されます。タスク管理ページで進行状況を監視できます。