Data Transmission Service (DTS) を使用すると、オンプレミスアプリケーションを中断することなく、自己管理 Oracle データベースから PolarDB for MySQL クラスターにデータを同期できます。
前提条件
開始する前に、以下を確認してください:
ソース Oracle データベースの合計サイズを超える利用可能なストレージを持つ PolarDB for MySQL クラスター。 詳細については、「従量課金クラスターの購入」および「サブスクリプションクラスターの購入」をご参照ください。
同期されたデータを受信するための、送信先の PolarDB for MySQL クラスター内のデータベース。 詳細については、「データベースの作成」をご参照ください。
ソース Oracle データベースが ARCHIVELOG モードで実行されており、アーカイブログファイルにアクセス可能で、適切な保持期間が設定されていること。 詳細については、「Managing Archived Redo Log Files」をご参照ください。
ソース Oracle データベースで補足ログが有効になっており、
SUPPLEMENTAL_LOG_DATA_PKとSUPPLEMENTAL_LOG_DATA_UIがYesに設定されていること。 詳細については、「Supplemental Logging」をご参照ください。Oracle ソースに対する DTS の機能と制限事項を理解している必要があります。移行の計画に役立つデータベース評価には、Advanced Database & Application Migration (ADAM) を利用できます。「Oracle データベースの準備」および「概要」をご参照ください。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期と完全データ同期 | 無料 |
| 増分データ同期 | 課金済み。課金概要 |
サポートされる SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | CREATE TABLE (ステートメント内の関数はサポートされていません); ALTER TABLE、ADD COLUMN、DROP COLUMN、RENAME COLUMN、ADD INDEX; DROP TABLE; RENAME TABLE、TRUNCATE TABLE、CREATE INDEX (現在のデータベースアカウントによる操作のみ) |
必要な権限
| データベース | 必要な権限 | リファレンス |
|---|---|---|
| 自己管理 Oracle データベース | きめ細かな権限 | データベースアカウントの準備、CREATE USER、GRANT |
| PolarDB for MySQL クラスター | ターゲットデータベースへの書き込み権限 | データベースアカウントの作成と管理 — 特権アカウントを使用 |
Oracle からの増分同期を行う場合、タスクを開始する前に、Oracle データベースでアーカイブログおよび補足ログを有効化します。詳細については、「Oracle データベースの設定」をご参照ください。
制限事項
スキーマ同期中、DTS はソースからターゲットデータベースに外部キーを同期します。 完全データ同期および増分データ同期中、DTS はセッションレベルで外部キー制約チェックとカスケード操作を一時的に無効にします。 同期中にソースでカスケード更新または削除操作を実行すると、データの不整合が発生する可能性があります。
ソースデータベースの制限事項
同期するテーブルには、すべてのフィールドが一意である PRIMARY KEY または UNIQUE 制約が必要です。 これらの制約がない場合、ターゲットデータベースに重複レコードが含まれる可能性があります。
ご利用の Oracle データベースのバージョンが 12c 以降の場合、テーブル名は 30 バイトを超えることはできません。
個別のテーブルを選択し (データベース全体ではなく)、送信先でテーブルまたは列の名前を変更する必要がある場合、1 つのタスクでサポートされるテーブルは最大 1,000 です。 1,000 を超えるテーブルの場合は、複数のタスクをバッチで設定するか、代わりにデータベース全体を同期してください。
ソースデータベースが Express Connect 経由で接続された Oracle Real Application Cluster (RAC) データベースである場合、データ同期タスクを設定する際に、データベースの仮想 IP アドレス (VIP) を指定する必要があります。
自己管理 Oracle データベースが Oracle RAC データベースの場合、データ同期タスクを設定する際に Single Client Access Name (SCAN) IP アドレスではなく、VIP のみを使用できます。 VIP を指定した後、Oracle RAC データベースのノードフェイルオーバーはサポートされません。
タスクの実行中にソースデータベースでプライマリ/セカンダリ スイッチオーバーが発生した場合、タスクは失敗します。
ソースに VARCHAR2 型の空文字列が含まれており、対応するターゲット列に非 NULL 制約がある場合、タスクは失敗します。 Oracle は空の VARCHAR2 文字列を NULL 値として処理します。
ソースデータベースの REDO ログとアーカイブログは、7 日以上保持する必要があります。 DTS がこれらのログを取得できない場合、タスクは失敗します。 例外的なケースでは、データの不整合や損失が発生する可能性があります。 7 日未満の保持期間は、DTS のサービスレベルアグリーメント (SLA) の対象外です。
送信先と一般的な制限事項
PolarDB for MySQL のテーブル名では、大文字と小文字は区別されません。 ソースの Oracle テーブル名に大文字が含まれている場合、PolarDB for MySQL はテーブルを作成する前にそれらを小文字に変換します。
ソースの Oracle データベースに大文字と小文字のみが異なるテーブル名が含まれている場合、データの不整合やタスクの失敗が発生する可能性があります。 タスク設定中に オブジェクト名マッピング機能を使用して、競合するオブジェクトの名前を変更してください。
同期する前に、ソースデータベースとターゲットデータベースのパフォーマンスへの影響を評価してください。 可能な場合は、オフピーク時間帯にタスクを実行してください。
完全データ同期中、同時 INSERT 操作により、送信先でテーブルの断片化が発生します。 完全同期が完了すると、送信先の表領域はソースよりも大きくなります。
DTS は、送信先の最新の同期レコードのタイムスタンプと現在のソースのタイムスタンプを比較して、同期遅延を計算します。 ソースで長期間 DML 操作が実行されない場合、遅延表示が不正確になることがあります。 ソースで DML 操作を実行して遅延を更新してください。 データベース全体を同期する場合は、ハートビートテーブルを作成します。DTS はこれを 1 秒ごとに更新して、遅延を正確に保ちます。
同期中は、DTS を介してのみターゲットデータベースにデータを書き込んでください。 他のソースから書き込むと、データの不整合が発生します。
DDL ステートメントがターゲットデータベースで実行に失敗した場合でも、タスクは実行を継続します。 失敗した DDL ステートメントはタスクログで確認できます。 詳細については、「タスクログの表示」をご参照ください。
ソースデータベースとターゲットデータベースの文字セットには互換性が必要です。 互換性のない文字セットは、データの不整合やタスクの失敗を引き起こす可能性があります。
DTS のスキーマ移行機能を使用してください。 そうしないと、互換性のないデータ型が原因で同期タスクが失敗する可能性があります。
ソースデータベースとターゲットデータベースのタイムゾーンは一致している必要があります。
同期タスクの設定
ステップ 1:データ同期タスクページを開く
Data Management (DMS) コンソールにログインします。
上部のナビゲーションバーで、[Data + AI] をクリックします。
左側のナビゲーションウィンドウで、[DTS (DTS)] > [データ同期] を選択します。
ナビゲーションパスは、DMS コンソールのモードによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。また、新しい DTS コンソールの「データ同期タスクページ」に直接アクセスできます。
ページの右側で、データ同期インスタンスが存在するリージョンを選択します。
新しい DTS コンソールでは、上部のナビゲーションバーでリージョンを選択します。
ステップ 2:ソースデータベースとターゲットデータベースの設定
[タスクの作成] をクリックします。 データ同期タスクの作成ウィザードで、次のパラメーターを設定します。
タスク名
| パラメーター | 説明 |
|---|---|
| [タスク名] | DTS は自動的に名前を生成します。 タスクを識別するために、わかりやすい名前を指定します。 名前は一意である必要はありません。 |
ソースデータベース
| パラメーター | 説明 |
|---|---|
| [既存の DMS データベースインスタンスの選択] | (オプション) 既存のデータベースを選択すると、DTS が自動的にパラメーターを入力します。 選択しない場合は、以下のパラメーターを設定します。 |
| データベースタイプ | [Oracle] を選択します。 |
| アクセス方法 | ソースデータベースのアクセス方法を選択します。 この例では、[ECS 上の自己管理データベース] を使用します。 他のアクセス方法については、まず必要な環境を設定してください。 詳細については、「準備の概要」をご参照ください。 |
| インスタンスのリージョン | ソース Oracle データベースが存在するリージョン。 |
| [ECS インスタンス ID] | ソース Oracle データベースをホストしている Elastic Compute Service (ECS) インスタンスの ID。 |
| [ポート番号] | ソース Oracle データベースのサービスポート。デフォルト: 1521。 |
| Oracle タイプ | ソース Oracle データベースのアーキテクチャ:[非 RAC インスタンス] (SID が必要) または [RAC または PDB インスタンス] (サービス名が必要)。 この例では、[RAC または PDB インスタンス] を使用します。 |
| [データベースアカウント] | ソース Oracle データベースのアカウント。 詳細については、「必要な権限」をご参照ください。 |
| データベース パスワード | データベースアカウントのパスワード。 |
ターゲットデータベース
| パラメーター | 説明 |
|---|---|
| [既存の DMS データベースインスタンスの選択] | (オプション) 既存のデータベースを選択すると、DTS が自動的にパラメーターを入力します。 選択しない場合は、以下のパラメーターを設定します。 |
| データベースタイプ | [PolarDB for MySQL] を選択します。 |
| アクセス方法 | [Alibaba Cloud インスタンス] を選択します。 |
| インスタンスのリージョン | 送信先の PolarDB for MySQL クラスターが存在するリージョン。 |
| [PolarDB クラスター ID] | 送信先の PolarDB for MySQL クラスターの ID。 |
| データベースアカウント | 送信先の PolarDB for MySQL クラスターのデータベースアカウント。 詳細については、「必要な権限」をご参照ください。 |
| データベース パスワード | データベースアカウントのパスワード。 |
| 暗号化 | ターゲットデータベースへの接続を暗号化するかどうか。 詳細については、「SSL 暗号化の設定」をご参照ください。 |
ステップ 3:接続性のテスト
[接続性をテストして続行] をクリックします。
ソースまたはターゲットデータベースが、ApsaraDB RDS for MySQL または ApsaraDB for MongoDB のような Alibaba Cloud データベースインスタンスである場合、DTS は自動的に DTS サーバーの CIDR ブロックをそのインスタンスのホワイトリストに追加します。ソースまたはターゲットデータベースが、Elastic Compute Service (ECS) インスタンス上でホストされている自己管理データベースである場合、DTS は自動的に DTS サーバーの CIDR ブロックを ECS インスタンスのセキュリティグループルールに追加し、ECS インスタンスがデータベースにアクセスできることを確認する必要があります。データセンター内またはサードパーティのクラウドプロバイダーから提供されるデータベースの場合、DTS の CIDR ブロックをデータベースのホワイトリストに手動で追加します。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
DTS の CIDR ブロックをホワイトリストやセキュリティグループルールに追加すると、セキュリティリスクが生じます。 続行する前に、認証情報の強化、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期的な監査、不正な CIDR ブロックの削除などの予防措置を講じてください。 または、Express Connect、VPN Gateway、または Smart Access Gateway を介して接続してください。
ステップ 4:オブジェクトの選択と同期設定
次の同期パラメーターを設定します。
同期設定
| パラメーター | 説明 |
|---|---|
| [同期タイプ] | 増分データ同期がデフォルトで選択されています。また、[スキーマ同期]と完全データ同期も選択してください。事前チェックが完了すると、DTS はソースから送信先へ既存データを同期し、その後の増分同期の基盤とします。 |
| [競合するテーブルの処理モード] | [事前チェックとエラー報告]オブジェクト名マッピング:DTS は、ソースと送信先に同じ名前のテーブルがあるかどうかをチェックします。 同じ名前が存在する場合、事前チェックは失敗し、タスクは開始できません。 送信先のテーブルを削除または名前変更できない場合は、開始前に 機能を使用してオブジェクトの名前を変更します。 [エラーを無視して続行]:DTS は、同じ名前の事前チェックをスキップします。 完全同期中、同じプライマリキーまたは一意キーを持つ既存の送信先レコードは保持されます。 増分同期中、それらは上書きされます。 スキーマが異なる場合、同期が部分的になるか、タスクが失敗する可能性があります。 |
| [宛先インスタンスのオブジェクト名の大文字/小文字の区別] | 宛先でのデータベース名、テーブル名、および列名の大文字小文字の区別を制御します。デフォルトは DTS デフォルトポリシー です。詳細については、「宛先インスタンスでのオブジェクト名の大文字小文字の指定」をご参照ください。 |
| ソース オブジェクト | [ソースオブジェクト] からデータベース、テーブル、または列を選択し、 |
| [選択したオブジェクト] | ターゲットデータベースのアカウントが特権アカウントでない場合、またはソーススキーマ名が PolarDB for MySQL の命名規則に従っていない場合は、[選択されたオブジェクト] 内でスキーマを右クリックし、[スキーマ名] をターゲットデータベース名に設定します。同期後にテーブルの名前を変更するには、テーブルを右クリックして新しい名前を指定します。詳細については、「オブジェクト名のマッピング」をご参照ください。行をフィルターするには、テーブルを右クリックしてフィルター条件を指定します。詳細については、「フィルター条件の設定」をご参照ください。 |
オブジェクト名マッピングを使用してオブジェクトの名前を変更すると、それに依存する他のオブジェクトの同期が失敗する可能性があります。
ステップ 5:詳細設定の構成
[次へ:詳細設定] をクリックし、以下を設定します。
データ検証
データ検証の構成については、「データ検証の構成を設定する」をご参照ください。
詳細設定
| パラメーター | 説明 |
|---|---|
| [タスクスケジューリング用の専用クラスター] | デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。タスクの安定性を向上させるには、専用クラスターをご購入ください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| [ターゲットデータベースのエンジンタイプを選択] | ターゲットデータベースのストレージエンジン。 デフォルトは [InnoDB] です。 [X-Engine] は、オンライントランザクション処理 (OLTP) データベースストレージエンジンです。 |
| [失敗した接続のリトライ時間] | タスク開始後に DTS が失敗した接続をリトライする時間。 有効な値:10〜1,440 分。 デフォルト:720 分。 これを 30 分以上に設定してください。 この期間内に DTS が再接続するとタスクは再開されますが、そうでない場合は失敗します。 複数のタスクが同じソースまたはターゲットデータベースを共有する場合、最も短いリトライ期間が優先されます。 DTS はリトライ期間中も課金します。 |
| [その他の問題のリトライ時間] | DTS が失敗した DDL または DML 操作をリトライする時間。 有効な値:1〜1,440 分。 デフォルト:10 分。 これを 10 分以上に設定してください。 この値は、[失敗した接続のリトライ時間] より小さくする必要があります。 |
| 完全データ移行のスロットリング有効化 | [ソースデータベースへの 1 秒あたりのクエリ数 (QPS)]、[完全データ移行の RPS]、および [完全移行のデータ移行速度 (MB/s)] を設定することで、完全同期中の送信先への負荷を制限します。 [完全データ同期] が選択されている場合にのみ表示されます。 |
| [増分データ同期の帯域幅調整を有効化] | 増分同期中に送信先の負荷を制限します。[増分データ同期の RPS] と [増分同期のデータ同期速度 (MB/s)] を設定します。 |
| [環境タグ] | DTS インスタンスを識別するためのタグ。 要件に基づいて選択します。 |
| 実際の書き込みコード | ターゲットデータベースにデータを書き込むためのエンコード形式。 |
| [ETL の設定] | ETL (抽出・変換・書き出し) 機能を有効にするかどうかを指定します。[はい] を選択すると、コードエディタでデータ処理ステートメントを入力できます。データ移行またはデータ同期タスクでETLを設定する を参照してください。[いいえ] を選択すると、ETLをスキップします。 |
| [モニタリングとアラート] | タスクに対するアラートを設定するかどうか。アラートのしきい値と通知先連絡先を設定するには、[はい] を選択します。タスクが失敗した場合、または同期遅延がしきい値を超えた場合に、DTS がこれらの連絡先に通知します。「モニタリングとアラートの設定」をご参照ください。 |
ステップ 6:設定の保存と事前チェックの実行
[次へ:タスク設定を保存して事前チェック] をクリックします。
このタスク設定の API パラメーターをプレビューするには、[次へ:タスク設定を保存して事前チェック] にカーソルを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
DTS は、タスクが開始される前に事前チェックを実行します。 事前チェックが失敗した場合:
失敗した各項目の横にある [詳細の表示] をクリックし、問題を解決してから事前チェックを再実行します。
アラート項目について:項目を無視できない場合は、解決して再実行します。 項目を無視できる場合は、[アラート詳細の確認] > [無視] > [OK] > [再度事前チェック] をクリックします。 アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 7:同期インスタンスの購入
[成功率] が 100% になるのを待ってから、[次へ:インスタンスの購入] をクリックします。
[購入] ページで、以下を設定します。
| パラメーター | 説明 |
|---|---|
| 課金方法 | [サブスクリプション]:前払い。長期利用に適しています。 [従量課金]:時間単位で課金。短期利用に適しています。 不要になったらインスタンスをリリースして課金を停止します。 |
| [リソースグループ設定] | 同期インスタンスのリソースグループ。 デフォルト:[デフォルトリソースグループ]Resource Management とは |
| インスタンスクラス | DTS は、さまざまな同期速度を持つインスタンスクラスを提供しています。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 |
| サブスクリプション期間 | [サブスクリプション] 課金方法でのみ利用可能です。 オプション:1〜9 か月、1 年、2 年、3 年、または 5 年。 |
[Data Transmission Service (従量課金) 利用規約] を読んで選択し、[購入して開始] をクリックします。 確認ダイアログボックスで、[OK] をクリックします。
タスクがタスクリストに表示されます。 そこで進行状況を監視します。