Data Transmission Service (DTS) を使用して、PolarDB-X 2.0 インスタンスから MaxCompute プロジェクトにデータを移行します。DTS は、一回限りの完全移行と継続的な増分移行をサポートしているため、許容可能なダウンタイムに基づいて戦略を選択できます。
移行の仕組み
DTS は、以下の 3 種類の移行タイプをサポートしており、これらを組み合わせて使用できます。
| 移行タイプ | 転送内容 | 増分 CDC のサポート |
|---|---|---|
| スキーマ移行 | テーブル定義およびインデックス | いいえ |
| 完全なデータ移行 | ある時点での既存のすべての行 | いいえ |
| 増分データ移行 | 完全移行完了後に発生した変更データ (INSERT、UPDATE、DELETE、ADD COLUMN) | はい |
MaxCompute における命名規則
DTS は、MaxCompute に作成されるテーブルに対して特定の命名規則を使用します。
スキーマ移行:DTS は、ソーステーブル名に
_baseサフィックスを追加します。たとえば、ソーステーブル名がcustomerの場合、MaxCompute の宛先テーブル名はcustomer_baseになります。_baseサフィックス付きの宛先テーブルは、全量ベースラインテーブルと呼ばれます。完全なデータ移行:履歴データは対応する
_baseテーブル(例:customer→customer_base)に移行されます。これは、後続の増分同期のベースラインとして機能します。増分移行:DTS は MaxCompute に増分ログテーブルを作成します。テーブル名は
DestinationTableName_log形式(例:customer_log)に従います。増分データはこのテーブルにリアルタイムで移行されます。
移行戦略の選択
| 目的 | 選択する移行タイプ |
|---|---|
| 許容可能なダウンタイムがある一回限りの転送 | スキーマ移行 + 完全なデータ移行 |
| 最小限のダウンタイムで継続的に同期 | スキーマ移行 + 完全なデータ移行 + 増分データ移行 |
完全なデータ移行のみを選択する場合は、移行中にソースデータベースへのすべての書き込みを停止し、ソースと宛先間のデータの不整合を回避してください。データ整合性を確保するには、スキーマ移行、完全なデータ移行、および増分データ移行を移行タイプとして選択することを推奨します。
増分データ移行でサポートされる SQL 操作
| 操作タイプ | サポートされる文 |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | ADD COLUMN(属性列を含む ADD COLUMN 操作はサポートされません) |
前提条件
開始前に、以下の準備が完了していることを確認してください。
MaxCompute を有効化し、MaxCompute プロジェクトを作成済みであること。詳細については、「MaxCompute の有効化」および「MaxCompute プロジェクトの作成」をご参照ください。
MaxCompute のホワイトリストを構成し、DTS が MaxCompute にアクセスできるようにすること。詳細については、「Alibaba Cloud サービスが MaxCompute にアクセスできるようにホワイトリストを設定する」をご参照ください。
送信先 MaxCompute プロジェクトを所有する Alibaba Cloud アカウント用の AccessKey ペアを作成しました。詳細については、「AccessKey ペアの作成」をご参照ください。
あるいは、RAM ユーザーを作成し、その RAM ユーザーを MaxCompute プロジェクトのスーパー管理者として設定することもできます。
制限事項
移行タスクを開始する前に、以下の制限事項を確認してください。
ソースデータベースの制限事項
テーブルには PRIMARY KEY または UNIQUE 制約(すべてのフィールドが一意)が必要です。これらの制約がないテーブルは、MaxCompute に重複レコードを生成する可能性があります。
Enterprise Edition PolarDB-X 2.0 の読み取り専用インスタンスはサポートされていません。
移行中にテーブル名またはカラム名を変更する(オブジェクト名マッピング)場合、1 つのタスクで最大 1,000 テーブルまでサポートされます。1,000 テーブルを超える場合は、複数のタスクに分割するか、データベース全体を移行してください。
TABLEGROUP および Locality 属性を持つデータベースまたはスキーマはサポートされていません。
予約語を名前とするテーブル(例:
select)はサポートされていません。
増分データ移行のバイナリログ要件
増分データ移行を含める場合は、開始前にソース PolarDB-X 2.0 インスタンスで以下のバイナリログ設定を構成してください。
| 設定項目 | 必要な値 | 注記 |
|---|---|---|
| バイナリログ | 有効 | DTS が変更データを読み取るために必要 |
binlog_row_image | full | 事前チェック時に他の値は拒否されます |
| バイナリログ保持期間(増分のみのタスク) | > 24 時間 | 保持期間が不足すると、タスクが失敗したりデータが損失したりする可能性があります。この場合、DTS SLA は適用されません |
| バイナリログ保持期間(完全 + 増分タスク) | >= 7 日 | 完全移行完了後は、保持期間を 24 時間超に短縮できます |
運用上の制限
スキーマ移行および完全なデータ移行中は、ソースデータベースで DDL 操作(スキーマ変更)を実行しないでください。DDL 操作が検出されると、タスクは失敗します。
完全および増分移行中、DTS はセッションレベルで制約チェックおよび外部キーのカスケード操作を一時的に無効にします。ソースデータベースでカスケード更新または削除操作を実行すると、宛先でデータの不整合が発生する可能性があります。
移行中に PolarDB-X 2.0 インスタンスのネットワークタイプを変更する場合は、DTS 移行タスクのネットワーク接続設定も更新してください。
その他の制限
データ移行を開始する前に、ソースおよび宛先データベースのパフォーマンスを評価してください。データ移行はオフピーク時間帯に実施することを推奨します。完全なデータ移行は、ソースおよび宛先データベースの読み取り・書き込みリソースを消費し、データベース負荷が増加します。
DTS は、過去 7 日以内に作成された失敗した移行タスクの再開を試みます。そのため、業務を宛先インスタンスに切り替える前に、タスクを終了またはリリースするか、
revokeコマンドを使用して、宛先データベースに対する DTS アカウントの書き込み権限を取り消す必要があります。これにより、タスクが自動的に再開され、宛先のデータが上書きされるのを防げます。インスタンスが失敗した場合、DTS ヘルプデスクは 8 時間以内にインスタンスの回復を試みます。回復プロセス中に、インスタンスの再起動やパラメーター調整などの操作が実行される場合があります。パラメーター調整時には、DTS インスタンスのパラメーターのみが変更され、データベースのパラメーターは変更されません。
DTS は定期的に、ソースデータベース内の
dts_health_check.ha_health_checkテーブルを更新し、バイナリログオフセットを進めます。
必要な権限
DTS が使用するデータベースアカウントに、以下の権限を付与してください。
| データベース | スキーマ移行 | 完全なデータ移行 | 増分データ移行 |
|---|---|---|---|
| PolarDB-X 2.0 | SELECT | SELECT | REPLICATION SLAVE、REPLICATION CLIENT、および移行対象オブジェクトに対する SELECT |
| MaxCompute | — | 読み取りおよび書き込み | 読み取りおよび書き込み |
PolarDB-X 2.0 アカウントへの権限付与手順については、「データ同期中のアカウント権限に関する問題」をご参照ください。
課金
| 移行タイプ | タスク構成料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行 + 完全なデータ移行 | 無料 | Cloud Instance アクセスを使用する場合は無料です。送信先アクセス方法をパブリック IP アドレスに設定した場合、インターネットトラフィック料金が発生します。「課金概要」をご参照ください。 |
| 増分データ移行 | 課金済み。課金概要を参照してください。 | — |
移行タスクの作成
以下の手順は DTS コンソールを使用します。また、DMS コンソール を使用することもできます — Data + AI > DTS (DTS) > データ移行 に移動し、ステップ 2 以降の同じ手順に従ってください。
実際の DMS コンソールのレイアウトは異なる場合があります。 詳細については、「シンプルモード」と「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
ステップ 1:データ移行ページを開く
ステップ 2:タスクを作成し、ソースおよび宛先データベースを構成する
ソースおよび宛先インスタンスを選択した後、ページ上部の 制限事項 を確認し、移行タスクを正常に作成・実行できることを確認してください。
タスクの作成 をクリックします。
ソースデータベースを構成します。
パラメーター 説明 タスク名 DTS が自動的に名前を生成します。識別しやすいように、わかりやすい名前を入力してください。名前は一意である必要はありません。 既存の接続を選択 PolarDB-X 2.0 インスタンスがすでに DTS に登録されている場合は、ドロップダウンリストから選択して、以下のパラメーターを自動入力します。登録されていない場合は、パラメーターを手動で構成してください。 データベースタイプ PolarDB-X 2.0 を選択します。 アクセス方法 クラウドインスタンス を選択します。 インスタンスリージョン ソース PolarDB-X 2.0 インスタンスが配置されているリージョンを選択します。 クロスアカウント 同一 Alibaba Cloud アカウント内での移行の場合は、いいえ を選択します。 インスタンス ID ソース PolarDB-X 2.0 インスタンスの ID を選択します。 データベースアカウント データベースアカウントを入力します。必要な権限については、「必要な権限」をご参照ください。 データベースパスワード データベースアカウントのパスワードを入力します。 宛先データベースを構成します。
パラメーター 説明 データベースタイプ MaxCompute を選択します。 アクセス方法 クラウドインスタンス を選択します。 インスタンスリージョン 宛先 MaxCompute プロジェクトが配置されているリージョンを選択します。 プロジェクト 宛先 MaxCompute プロジェクトの名前を入力します。 Alibaba Cloud アカウントの AccessKey ID 前提条件 で作成した AccessKey ID を入力します。 Alibaba Cloud アカウントの AccessKey Secret AccessKey Secret を入力します。 接続テストを実行して次へ進む をクリックします。
OK をクリックして、DTS が宛先 MaxCompute プロジェクトにアクセスするために必要な権限を付与します。
ステップ 3:移行するオブジェクトを構成する
オブジェクトの構成 ページで、以下のパラメーターを構成します。
| パラメーター | 説明 |
|---|---|
| 移行タイプ | 戦略に基づいて移行タイプを選択します。「移行戦略の選択」をご参照ください。スキーマ移行 をスキップする場合は、MaxCompute に宛先テーブルを手動で作成し、選択済みオブジェクト でオブジェクト名マッピングを有効にしてください。 |
| 競合テーブルの処理モード | 事前チェックしてエラーを報告:宛先に同名のテーブルが存在する場合、事前チェックが失敗します。エラーを無視して続行:名前の競合チェックをスキップします。完全移行中、DTS はプライマリキーが競合するレコードをスキップし、既存の宛先レコードを保持します。増分移行中、DTS は既存の宛先レコードを上書きします。ソースと宛先のスキーマが異なる場合、一部のカラムのみが移行されるか、タスクが失敗する可能性があります。 |
| 追加カラムルール | DTS は宛先テーブルにメタデータカラムを追加します。スキーマに基づいて 新規ルール または 旧ルール を選択します。選択前に、名前の競合の可能性を評価してください。 |
| 増分データテーブルのパーティション定義 | 必要に応じてパーティション名を選択します。「パーティション」をご参照ください。 |
| 宛先インスタンスでのオブジェクト名の大文字小文字の扱い | 宛先インスタンスでのオブジェクト名の大文字と小文字の区別の指定宛先でのデータベース、テーブル、カラム名の大文字小文字の扱いを制御します。「」をご参照ください。 |
ソースオブジェクト セクションで、移行するオブジェクトを選択します。選択済みオブジェクト セクションに移動させます。
送信先で単一のオブジェクトの名前を変更するには、[選択したオブジェクト] セクションでそのオブジェクトを右クリックします。詳細については、「単一のオブジェクトの名前をマップする」をご参照ください。
複数のオブジェクトを一度に名前変更するには、[バッチ編集] を [選択済みオブジェクト] セクションの右上隅でクリックします。詳細については、「複数のオブジェクト名を一度にマップする」をご参照ください。
ステップ 4:詳細設定を構成する
次へ:詳細設定 をクリックし、以下の設定を行います。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。安定性を向上させるには、専用クラスターを購入して指定します。「DTS 専用クラスターとは」をご参照ください。 |
| 接続失敗時の再試行時間 | DTS がデータベース接続の失敗を再試行し、タスクを失敗とマークするまでの時間です。有効値:10~1,440 分。デフォルト:720 分。最低でも 30 分に設定してください。再試行中も DTS インスタンス料金が発生します。 |
| その他の問題発生時の再試行時間 | DDL または DML 操作の失敗を DTS が再試行する時間です。有効値:1~1,440 分。デフォルト:10 分。最低でも 10 分に設定してください。この値は 接続失敗時の再試行時間 より短くする必要があります。 |
| 完全なデータ移行のスロットリングを有効化 | 完全なデータ移行中に、ソースおよび宛先の読み取り・書き込み負荷を制限します。ソースデータベースへの QPS、RPS(1 秒あたりの行数)、移行速度(MB/s)を構成します。完全なデータ移行 が選択されている場合のみ利用可能です。 |
| 増分データ移行のスロットリングを有効化 | 増分データ移行中に、宛先の負荷を制限します。RPS および移行速度(MB/s)を構成します。増分データ移行 が選択されている場合のみ利用可能です。 |
| ハートビートテーブルに対する SQL 操作を削除するかどうか | はいアラート通知設定:DTS はハートビートテーブルに書き込みません。DTS インスタンスに遅延インジケーターが表示される場合があります。いいえ:DTS はハートビートテーブルに書き込みます。これにより、ソースデータベースの物理バックアップおよびクローン作成に影響を与える可能性があります。 |
| 環境タグ | 任意。本番環境やテスト環境など、環境を識別するためのタグです。 |
| ETL の構成 | ETL(抽出・変換・書き出し)を有効にするかどうかを指定します。[はい]を選択すると、データ処理文を入力できます。詳細については、「ETL をデータ移行またはデータ同期タスクで設定する」をご参照ください。 |
| モニタリングとアラート | アラートを設定するかどうかを指定します。タスクが失敗した場合、または移行遅延がしきい値を超えた場合、アラート連絡先に通知が送信されます。[はい] を選択して、アラートのしきい値と通知設定を設定します。「モニタリングとアラートの設定」をご参照ください。 |
ステップ 5:事前チェックを実行する
次へ:タスク設定の保存と事前チェック をクリックします。
事前チェックに合格した場合は、次のステップに進みます。
事前チェックに失敗した場合は、詳細を表示 をクリックして報告された問題を修正し、事前チェックを再実行します。
アラート項目については、問題を修正するか、アラートが許容可能な場合は アラートの詳細を確認 > 無視 > OK > 再度事前チェック をクリックします。
ステップ 6:インスタンスを購入してタスクを開始する
事前チェックの結果が 成功率 100% になったら、次へ:インスタンスの購入 をクリックします。
インスタンスの購入 ページで、以下の設定を行います。
パラメーター 説明 リソースグループ 移行インスタンスのリソースグループ。デフォルト: [デフォルト リソースグループ]。詳細については、「Resource Management とは?」をご参照ください。 インスタンスクラス インスタンスクラスは、移行速度を決定します。「データ移行インスタンスのインスタンスクラス」を参照してください。 Data Transmission Service (従量課金) サービス利用規約 を読み、同意します。
購入して開始 をクリックし、確認ダイアログで OK をクリックします。
移行タスクのモニタリング
データ移行 ページに移動して、進行状況をモニタリングします。
完全なデータ移行のみ:タスクは完了時に自動的に停止します。ステータスは 完了 と表示されます。
増分データ移行を含む:タスクは継続的に実行され、自動的に停止することはありません。ステータスは 実行中 と表示されます。
業務ワークロードを MaxCompute に切り替える前に、タスクを終了またはリリースするか、revoke コマンドを使用して、宛先データベースに対する DTS アカウントの書き込み権限を削除する必要があります。これは、DTS が過去 7 日以内に作成された失敗した移行タスクの再開を試みるためであり、タスクが自動的に再開されて宛先のデータが上書きされるのを防ぐために必要です。
増分ログテーブルの構造
DTS が増分データを MaxCompute に書き込む際、各増分ログテーブルには、ソーステーブルのカラムに加えて以下のメタデータフィールドが含まれます。
増分ログテーブルをクエリする前に、MaxCompute で set odps.sql.allow.fullscan=true; を実行してください。
| フィールド | 説明 |
|---|---|
record_id | 各ログレコードの一意で単調増加する ID です。UPDATE 操作の場合、DTS は変更を 2 つのレコード(更新前と更新後)に分割し、それらは同じ record_id を共有します。 |
operation_flag | 操作タイプ:I (INSERT)、D (DELETE)、または U (UPDATE)。 |
utc_timestamp | バイナリログエントリの協定世界時 (UTC) タイムスタンプ。 |
before_flag | 行に更新前のカラム値が含まれているかどうか。値:Y または N。 |
after_flag | 行に更新後のカラム値が含まれているかどうか。値:Y または N。 |
データ型マッピング
PolarDB-X 2.0 と MaxCompute 間のデータ型マッピングについては、「初期スキーマ同期のデータ型マッピング」をご参照ください。
次のステップ
オブジェクト名をマップする — ターゲットデータベースのテーブルまたはカラムの名前を変更します。
インスタンスのパラメーターを変更する — タスクの開始後に DTS インスタンスのパラメーターを調整します。
課金概要 — DTS の増分データ移行の課金について理解します。