Data Transmission Service (DTS) は、自己管理 Oracle データベースから ApsaraDB RDS for MySQL インスタンスへ、最小限のダウンタイムでデータを移行します。DTS はスキーマ移行、完全データ移行、増分データ移行をサポートしており、これら 3 つすべてを選択することで、データ転送中もアプリケーションを実行し続けることができます。
前提条件
開始する前に、以下が準備できていることを確認してください。
ソースの Oracle データベースと移行先の ApsaraDB RDS for MySQL インスタンス。RDS for MySQL インスタンスを作成するには、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
ソースの Oracle データベースがアーカイブログモードで実行されており、アーカイブログファイルにアクセス可能で、適切な保持期間が設定されていること。詳細は、Managing Archived Redo Log Files をご参照ください。
ソースの Oracle データベースで補足ログが有効になっており、
SUPPLEMENTAL_LOG_DATA_PKとSUPPLEMENTAL_LOG_DATA_UIがYesに設定されていること。詳細は、Supplemental Logging をご参照ください。サポートされているソースおよび移行先データベースのバージョンについては、「データ移行シナリオの概要」をご参照ください。
課金
| 移行タイプ | インスタンス構成料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行と完全データ移行 | 無料 | Alibaba Cloud からインターネット経由でデータが移行された場合にのみ課金されます。詳細については、「課金概要」をご参照ください。 |
| 増分データ移行 | 課金されます。課金概要をご参照ください。 | — |
移行タイプ
| 移行タイプ | 説明 |
|---|---|
| スキーマ移行 | 選択したオブジェクトのスキーマを移行先データベースに移行します。ネストしたテーブルはサポートされていません。クラスタ化テーブルと索引構成表 (IOT) は、通常のテーブルに変換されます。関数ベースのインデックス、ドメインインデックス、ビットマップインデックス、および逆方向キーインデックスは移行されません。ビュー、シノニム、ストアドプロシージャ、関数、パッケージ、およびユーザー定義型は移行されません。 |
| 完全データ移行 | ソースの Oracle データベースから既存のすべてのデータを移行先に移行します。 |
| 増分データ移行 | 完全データ移行が完了した後、DTS は REDO ログファイルを読み取り、増分変更を継続的に移行先に適用します。これにより、移行期間中もアプリケーションを中断することなく実行し続けることができます。 |
Oracle と MySQL ではデータ型システムが異なるため、作業を開始する前に「異種データベース間のデータ型マッピング」をご参照いただき、データがどのように変換されるかをご確認ください。
移行タイプの組み合わせの選択
| 目的 | 選択する移行タイプ |
|---|---|
| アプリケーションをオフラインにしてデータを移行する (完全移行のみ) | スキーマ移行 + 完全データ移行 |
| 最小限のダウンタイムでデータを移行する | スキーマ移行 + 完全データ移行 + 増分データ移行 |
最小限のダウンタイムでの移行の場合、完全データ移行が完了した後に、以下の手順を実行します。
増分移行の遅延がゼロに近くなるまで待ちます。
ソースの Oracle データベースへの書き込みを停止します。
最終的な変更が移行先にレプリケートされるのを待ちます。
必要に応じて、移行先で外部キー、トリガー、またはその他の制約を再度有効にします。
アプリケーションを移行先の RDS for MySQL インスタンスに切り替えます。
増分移行の SQL 操作
| 操作タイプ | SQL 文 |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | CREATE TABLE (ネストした関数を持つテーブルは除外)、ADD COLUMN、DROP COLUMN、RENAME COLUMN、ADD INDEX を伴う ALTER TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE、CREATE INDEX (現在のデータベースアカウント内の操作のみ) |
制限事項
外部キーの動作
スキーマ移行中、DTS はソースから移行先へ外部キーを移行します。完全データ移行および増分データ移行中、DTS はセッションレベルで外部キー制約チェックとカスケード操作を一時的に無効にします。移行の進行中にソースでカスケード操作や削除操作を実行すると、データの不整合が発生する可能性があります。
ソースデータベースの制約
帯域幅:ソースデータベースをホストするサーバーには、十分なアウトバウンド帯域幅が必要です。帯域幅が不足すると、移行速度が低下します。
Express Connect 経由の Oracle RAC:Single Client Access Name (SCAN) IP アドレスではなく、仮想 IP アドレス (VIP) を指定してください。VIP を設定した後、ノードのフェイルオーバーはサポートされません。
Express Connect、VPN Gateway、Smart Access Gateway、データベースゲートウェイ、または Cloud Enterprise Network (CEN) 経由の Oracle RAC:SCAN IP の代わりに単一の VIP を使用してください。VIP が設定された後、ノードのフェイルオーバーはサポートされません。
VARCHAR2 の空文字列:Oracle では、空の VARCHAR2 文字列は NULL として評価されます。移行先の対応する列に NOT NULL 制約がある場合、移行タスクは失敗します。
プライマリキーまたは一意性制約:移行するテーブルには、すべてのフィールドが一意であるプライマリキーまたは一意性制約が必要です。これがない場合、移行先に重複レコードが表示される可能性があります。
Oracle 12c 以降:テーブル名は 30 バイトを超えることはできません。
オブジェクト名変更時のテーブル数制限:移行対象としてテーブルを選択し、テーブル名または列名を変更する予定がある場合、1 つのタスクでサポートされるテーブルは最大 1,000 です。1,000 を超えるテーブルがある場合は、テーブルを複数のタスクに分割するか、代わりにデータベース全体を移行してください。
増分移行のログ保持
| 移行範囲 | 最小ログ保持期間 |
|---|---|
| 増分移行のみ | 24 時間以上 |
| 完全移行 + 増分移行 | 少なくとも 7 日間。完全移行が完了した後、24 時間以上に短縮できます。 |
ログ保持期間が不十分な場合、DTS が REDO ログやアーカイブログを失い、タスクの失敗やデータ損失を引き起こす可能性があります。ログ保持は、DTS のサービスレベルアグリーメント (SLA) の保証に直接影響します。
移行中に避けるべき操作
スキーマ移行および完全データ移行中:データベースまたはテーブルスキーマを変更する DDL 操作を実行しないでください。このフェーズでの DDL 変更は、移行タスクを失敗させます。
完全移行のみの場合:ソースデータベースにデータを書き込まないでください。データの整合性を維持するために、スキーマ移行 + 完全データ移行 + 増分データ移行を一緒に使用してください。
移行中のいかなる時点でも:LONGTEXT フィールドを更新しないでください。更新すると移行タスクが失敗します。
一般的な制約
移行はオフピーク時に実行してください。DTS はソースと移行先の両方で読み取りおよび書き込みリソースを消費するため、サーバーの負荷が増加します。
完全移行後、同時 INSERT 操作によってテーブルの断片化が発生するため、移行先のテーブルスペースはソースよりも大きくなります。
DTS は失敗したタスクを最大 7 日間再試行します。移行先へのカットオーバーを行う前に、失敗したタスクを停止またはリリースするか、
REVOKE文を使用して移行先の DTS アカウントから書き込み権限を削除してください。そうしないと、カットオーバー後に移行先にすでに書き込んだデータが、再開されたタスクによって上書きされる可能性があります。
RDS for MySQL 固有の動作
大文字と小文字の区別: ApsaraDB RDS for MySQL のテーブル名は大文字と小文字を区別しません。DTS は、Oracle のテーブル名に含まれるすべての大文字を小文字に変換します。Oracle データベースのテーブル名が大文字と小文字の違いしかない場合、重複しているものとして識別され、スキーマ移行で「オブジェクトは既に存在します。」というエラーが返されます。タスクを開始する前に、オブジェクト名マッピング機能を使用して名前付けの競合を解決してください。
データベースの自動作成: DTS は、RDS for MySQL インスタンスにターゲットデータベースを自動的に作成します。ソースデータベース名が MySQL で無効な場合、まず手動でデータベースを作成します。詳細については、「ApsaraDB RDS for MySQL インスタンスのデータベースを作成する」をご参照ください。
アカウントと権限の設定
必要な権限
| データベース | スキーマ移行 | 完全データ移行 | 増分データ移行 |
|---|---|---|---|
| 自己管理 Oracle | スキーマ所有者の権限 | スキーマ所有者の権限 | 詳細な権限 |
| ApsaraDB RDS for MySQL | 移行先データベースへの書き込み権限 | 移行先データベースへの書き込み権限 | 移行先データベースへの書き込み権限 |
権限の作成と付与
Oracle データベース:
CREATE USER 文と GRANT 文を使用してアカウントを作成し、必要な権限を割り当てます。
増分移行では、増分を取得するために、アーカイブと補足ログも有効にする必要があります。必要な権限と設定手順の完全な一覧については、「Oracle データベースを構成する」をご参照ください。
ApsaraDB RDS for MySQL インスタンス:
「アカウントの作成」と「アカウントの権限の変更」を参照して、移行先データベースへの書き込み権限を持つアカウントを作成してください。
移行タスクの作成
Data Management (DMS) コンソールにログインします。上部のナビゲーションバーで DTS をクリックします。左側のナビゲーションペインで、DTS (DTS) > データ移行 を選択します。
また、[データ移行タスク] ページに直接アクセスすることもできます。コンソールのナビゲーションオプションについては、「シンプルモード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
[データ移行タスク] の横にあるドロップダウンリストから、移行インスタンスが存在するリージョンを選択します。
新しい DTS コンソールでは、左上隅でリージョンを選択します。
タスクの作成 をクリックします。ソースデータベースと移行先データベースを設定します。
警告ソースと移行先を設定した後、続行する前にページの上部に表示される制限事項をお読みください。このステップをスキップすると、タスクの失敗やデータの不整合を引き起こす可能性があります。
ソースデータベース (Oracle)
パラメーター 説明 タスク名 DTS は自動的に名前を割り当てます。タスクを識別するために、わかりやすい名前を指定してください。一意の名前は必須ではありません。 データベースタイプ Oracle を選択します。 アクセス方法 この例では、[パブリック IP アドレス] を選択します。他のアクセス方法では、追加の環境のセットアップが必要です — 「準備の概要」をご参照ください。 インスタンスリージョン ソースの Oracle データベースが存在するリージョン。 ホスト名または IP アドレス ソースの Oracle データベースのエンドポイント。 ポート番号 サービスポート。デフォルト:1521。この例では、ポートがインターネット経由でアクセス可能である必要があります。 Oracle タイプ [非RACインスタンス]([SID]を設定)または[RAC または PDB インスタンス]([サービス名]を設定)を選択します。この例では、[非RACインスタンス]を使用します。 データベースアカウント 必要な権限を持つ Oracle アカウント。詳細は、「アカウントと権限の設定」をご参照ください。 データベースのパスワード アカウントのパスワード。 移行先データベース (ApsaraDB RDS for MySQL)
パラメーター 説明 データベースタイプ MySQL を選択します。 アクセス方法 Alibaba Cloud インスタンス を選択します。 インスタンスリージョン 移行先の RDS for MySQL インスタンスが存在するリージョン。 RDS インスタンス ID 移行先の RDS for MySQL インスタンスの ID。 データベースアカウント 移行先データベースへの書き込み権限を持つアカウント。 データベースのパスワード アカウントのパスワード。 暗号化 [非暗号化] または [SSL 暗号化] を選択します。SSL 暗号化の場合、まず RDS for MySQL インスタンスで SSL を有効にします。詳細については、「SSL 暗号化機能の設定」をご参照ください。 ソースデータベースに IP アドレスホワイトリストがある場合は、DTS サーバーの CIDR ブロックをホワイトリストに追加します。その後、接続テストと次へ をクリックします。
警告DTS サーバーの CIDR ブロックをデータベースのホワイトリストまたは ECS セキュリティグループに追加すると、潜在的なセキュリティリスクが生じます。続行する前に、強力な認証情報を使用する、公開ポートを制限する、API 呼び出しを認証する、ホワイトリストのルールを定期的に監査するなど、保護措置を講じてください。ネットワーク分離のためには、Express Connect、VPN Gateway、または Smart Access Gateway を介して接続してください。
移行対象のオブジェクトを設定し、移行タイプを選択します。行条件によるデータのフィルター処理については、「フィルター条件の設定」をご参照ください。オブジェクト名の変更については、「オブジェクト名のマップ」をご参照ください。
パラメーター オプション 移行タイプ 完全移行の場合は スキーマ移行 と 完全データ移行 を選択します。最小限のダウンタイムでの移行の場合は、3 つすべて (スキーマ移行、完全データ移行、および 増分データ移行) を選択します。増分移行を選択しない場合は、移行実行中にソースデータベースに書き込まないでください。 競合するテーブルの処理モード 事前チェックしてエラーを報告 (デフォルト):ソースと移行先の両方に同じテーブル名が存在する場合、事前チェックは失敗します。これを使用して、名前の競合を早期に検出します。エラーを無視して続行:チェックをスキップします。このオプションは、リスクを理解している場合にのみ使用してください。DTS は一致するプライマリキーを持つレコードをスキップし、スキーマの違いにより部分的な移行やタスクの失敗を引き起こす可能性があります。 ソースオブジェクト ソースオブジェクト リストからオブジェクトを選択し、矢印アイコンをクリックして 選択したオブジェクト に追加します。 選択したオブジェクト オブジェクトを右クリックして名前を変更するか、WHERE フィルター条件を設定します。一括編集 をクリックして、複数のオブジェクトの名前を一度に変更します。テーブルを右クリックして、増分移行に含める SQL 操作を選択します。注意:オブジェクト名マッピング機能でオブジェクトの名前を変更すると、依存オブジェクトの移行が失敗する可能性があります。 次へ:詳細設定 をクリックし、必要に応じて以下のパラメーターを設定します。
パラメーター 説明 タスクのスケジュールに使用する専用クラスターの選択 DTS 専用クラスターとはDTS はデフォルトで共有クラスターを使用します。専用クラスターを利用するには、事前に専用クラスターを購入してください。詳細については、「」をご参照ください。 接続失敗時の再試行時間 DTS が接続を失った場合に、タスクを失敗と判断するまでの再試行期間です。有効な値:10~1,440 分。デフォルト値:720 分。この値は最低でも 30 分以上に設定してください。複数のタスクが同一のソースまたはターゲットを共有する場合、最も最近設定された再試行時間がすべてのタスクに適用されます。再試行中も DTS インスタンスは課金対象となります。 ソースおよびターゲットデータベースでその他の問題が発生した際の再試行前の待機時間 DTS が失敗した DDL 操作または DML 操作を再試行する際の待機期間です。有効な値:1~1,440 分。デフォルト値:10 分。この値は最低でも 10 分以上に設定してください。また、この値は「接続失敗時の再試行時間」の値より小さくする必要があります。 完全なデータ移行におけるレート制限の有効化 完全移行中に、ソースおよびターゲットに対する読み取り/書き込み負荷を制限します。ソースへの秒間クエリ数 (QPS)、完全なデータ移行における 1 秒あたりのレコード数 (RPS)、およびデータ移行速度 (MB/s) を設定します。完全なデータ移行が選択されている場合のみ利用可能です。 増分データ移行におけるレート制限の有効化 増分移行中の負荷を制限します。増分データ移行における 1 秒あたりのレコード数 (RPS) およびデータ移行速度 (MB/s) を設定します。増分データ移行が選択されている場合のみ利用可能です。 環境タグ DTS インスタンスを識別するための任意のラベルです。 実際の書き込みコード ターゲットデータベースへ書き込まれるデータのエンコード形式です。ご利用のデータ要件に応じて選択してください。 ETL の設定 データ移行またはデータ同期タスクでの ETL 設定移行中に抽出・変換・書き出し (ETL) 変換を適用する場合は、このオプションを有効化します。コードエディタにデータ処理文を入力します。詳細については、「」をご参照ください。 モニタリングとアラート 新しい DTS タスクのモニタリングとアラート機能の設定タスクの失敗や移行遅延がしきい値を超えた際に、指定された連絡先へ通知するようアラートを設定します。詳細については、「」をご参照ください。 次へ:タスク設定を保存して事前チェック をクリックします。DTS はタスク開始前に事前チェックを実行します。いずれかの項目が失敗した場合は、詳細の表示 をクリックして原因を確認し、問題を修正して再度事前チェックを実行します。安全に無視できるアラート項目については、アラート詳細の確認 をクリックし、[無視]、[OK] の順にクリックしてから、[再度事前チェック] をクリックします。アラート項目を無視すると、データの不整合が発生する可能性があります。
使用されている API パラメーターを確認するには、[次へ:タスク設定を保存して事前チェック] にカーソルを合わせ、API 呼び出しのプレビュー をクリックします。
成功率が 100% に達するのを待ってから、次へ:インスタンスの購入 をクリックします。
Data Transmission Service (従量課金) 利用規約 を読み、チェックボックスを選択して同意します。
購入して開始 をクリックします。タスク管理ページで移行の進捗を追跡します。
トラブルシューティング
Oracle から MySQL への移行失敗のほとんどは、以下の 2 つの問題に起因します。
補足ログが完全に設定されていない
増分移行中にログ関連のエラーでタスクが失敗した場合、データベースレベルで補足ログが有効になっていること、および SUPPLEMENTAL_LOG_DATA_PK と SUPPLEMENTAL_LOG_DATA_UI の両方が Yes に設定されていることを確認してください。構成手順については、「Oracle データベースの構成」をご参照ください。
テーブル名の大文字と小文字の競合
ApsaraDB RDS for MySQL では、テーブル名は大文字小文字を区別しません。Oracle データベースに、名前が大文字・小文字の違いのみで異なるテーブル(例: Orders および ORDERS)がある場合、DTS はそれらを重複と見なし、スキーマ移行は「オブジェクトは既に存在します。」というエラーで失敗します。タスクを実行する前に、オブジェクト名マッピング 機能を使用して、競合するテーブルの名前を変更してください。