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