すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for OceanBase (Deprecated):双方向同期タスクの設定

最終更新日:Dec 30, 2025

このトピックでは、MySQL データベースと MySQL 互換モードの OceanBase データベース間の双方向同期について説明します。

重要

データ移行タスクが長時間非アクティブな状態 (失敗停止完了) のままであると、増分ログの保存期間によっては再開に失敗する場合があります。データ転送サービスは、3 日以上非アクティブな状態にあるデータ移行タスクを解放して、関連リソースを回収します。データ移行タスクにアラートを設定し、タスクの例外にタイムリーに対処することを推奨します。

背景情報

双方向同期とは

増分データ同期中に、同じデータソースに対して正方向と逆方向の両方の移行タスクを設定して、ソースとターゲット間でデータを同期できます。循環レプリケーション防止メカニズムを使用して、一方向に同期されたデータが逆方向のタスクによって繰り返し同期されるのを防ぎます。

説明

双方向同期は、ソースとターゲットへの同時書き込みをサポートしていません。アプリケーションが同じプライマリキーまたは一意キーで識別される同じデータをソースとターゲットに同時に書き込む場合、双方向同期タスクに対して競合解決戦略 (上書きまたは無視) を定義する必要があります。アプリケーションが同じデータをソースとターゲットに同時に書き込むことを禁止することを推奨します。

双方向同期をサポートする移行タイプ

データ転送サービスは、MySQL データベースと MySQL 互換モードの OceanBase データベース間、Oracle データベースと Oracle 互換モードの OceanBase データベース間、および OceanBase データベース間の双方向データ同期をサポートしています。制限事項と注意事項の詳細については、対応するデータ移行タイプのトピックをご参照ください。

MySQL データソースの権限付与ステートメント

MySQL データベースと OceanBase データベース間で双方向同期を実行するには、現在のタスクの MySQL データソースのデータベースアカウントに CREATE DATABASECREATE TABLE 権限を付与する必要があります。また、双方向同期に関与する 2 者間の循環レプリケーションを防ぐために、トランザクションデータベースとトランザクションテーブルを作成する必要もあります。そうしないと、双方向同期タスクが異常になる可能性があります。

  • グローバルなデータベース作成権限の付与

    GRANT CREATE ON *.* TO '<user_name>' ;
  • oms データベースにテーブルを作成する権限の付与

    GRANT CREATE ON oms.* TO '<user_name>' 

Oracle データソースのスキーマ作成と権限付与ステートメント

Oracle データベースと OceanBase データベース間で双方向同期を実行するには、現在のタスクの Oracle データソースに OMS という名前のスキーマを作成し、このデータソースのデータベースアカウントに OMS スキーマに対する CREATE TABLE 権限を付与する必要があります。そうしないと、双方向同期タスクが異常になる可能性があります。

  • OMS ユーザーの作成

    CREATE USER OMS IDENTIFIED BY <YOUR_PASSWORD> DEFAULT TABLESPACE <tablespace>; // YOUR_PASSWORD を実際のユーザーパスワードに置き換えます。
    ALTER USER OMS QUOTA unlimited ON <tablespace specified in the previous step>; 
    ALTER USER <data source user> QUOTA unlimited ON <tablespace specified in the previous step>; 
  • 権限の付与

    GRANT CREATE ANY TABLE TO <YOUR_USERNAME>; 
    GRANT INSERT ANY TABLE TO <YOUR_USERNAME>;
    GRANT UPDATE ANY TABLE TO <YOUR_USERNAME>;
    GRANT DELETE ANY TABLE TO <YOUR_USERNAME>;
    GRANT SELECT ANY TABLE TO <YOUR_USERNAME>;

注意事項

双方向同期タスクは、正方向タスクと逆方向タスクで構成されます。

タイプ

説明

正方向タスク

  • 正方向タスクは、スキーマ移行、完全移行、DML 操作の増分同期、DDL 操作の増分同期、および完全検証をサポートします。

  • 正方向タスクは、データベースまたはテーブルの集約シナリオではサポートされていません。たとえば、ソース a と b からターゲット c へのテーブル集約はサポートされていません。

  • スキーマ移行または完全移行中に、データベースまたはテーブルのスキーマを変更する DDL 操作を実行しないでください。そうしないと、タスクが失敗する可能性があります。

  • [ルールとの照合] オプションを使用して移行オブジェクトを選択する場合、[オブジェクト除外ルール] にトランザクションテーブルを指定しないでください。

逆方向タスク

  • 逆方向タスクは、正方向タスクが増分同期フェーズにあり、実行中の状態である場合にのみ設定できます。

  • 逆方向タスクは、DML 操作の増分同期のみをサポートします。

  • 逆方向タスクを設定する際に、同期オブジェクトを変更することはできません。デフォルトでは、正方向タスクで指定された同期オブジェクトが使用されます。

その他の注意事項

  • 双方向同期タスクにプライマリキーまたは NULL 値を許容しない一意キーのないテーブルが含まれている場合、同期中にターゲットの対応するデータベースまたはテーブルに重複データが出現する可能性があります。

  • 双方向同期タスクは、MySQL または Oracle データベースに OMS という名前のデータベースまたはスキーマを作成し、OMS データベースまたはスキーマにトランザクションテーブルを作成して、循環データ同期を回避します。タスクの実行中にトランザクションテーブルに対して DML または DDL 操作を実行しないでください。

データ競合シナリオ

双方向同期でデータ整合性を確保するには、同じプライマリキーまたは NULL 値を許容しない一意キーに対するデータ操作がソースまたはターゲットのいずれかでのみ実行されるようにしてください。データがソースとターゲットで同時に更新されると、次のようなシナリオを含むデータ競合が発生する可能性があります。

  • INSERT 操作における一意キーの競合

    アプリケーションがソースとターゲットでほぼ同時に同じ一意キーに対して INSERT 操作を実行すると、ターゲットへの同期中に一意制約のため、ターゲットでの INSERT 操作は失敗します。タスクを設定して、競合するデータを無視するか、ターゲットのデータを上書きすることができます。

  • UPDATE 操作における一意キーの競合

    • UPDATE 操作で更新するデータがターゲットにすでに存在する場合、ターゲットのデータはソースのデータで上書きされます。

    • UPDATE 操作で更新するデータがターゲットに存在しない場合、UPDATE 操作は失敗します。

    • UPDATE 操作によってターゲットでプライマリキーまたは一意キーの競合が発生した場合、UPDATE 操作は失敗します。

  • DELETE 操作における一意キーの競合

    • DELETE 操作で削除するデータが存在しない場合、DELETE 操作は失敗します。

操作手順

正方向タスクの設定

  1. プロンプトに従ってデータ移行タスクを設定し、[移行タイプの選択] ステップに進み[同期トポロジ] [双方向同期] に設定します。

    詳細については、対応するタイプのデータ移行に関するトピックをご参照ください。

    image

  2. [移行タイプの選択] ページで、データ移行タスクの移行タイプを指定します。

    双方向同期は、[スキーマ移行][完全移行][増分同期][完全検証] の移行タイプをサポートしています。

    image

    移行タイプ

    説明

    スキーマ移行

    スキーマ移行タスクが開始されると、データ転送サービスは、テーブル、インデックス、制約、コメント、ビューなどのデータベースオブジェクトの定義をソースデータベースからターゲットデータベースに移行し、一時テーブルを自動的に除外します。

    完全移行

    完全移行タスクが開始されると、データ転送サービスは、ソースデータベースのテーブルから既存のデータをターゲットデータベースの対応するテーブルに移行します。

    増分同期

    増分同期タスクが開始されると、データ転送サービスは、ソースデータベースから変更されたデータ (追加、変更、または削除されたデータ) をターゲットデータベースの対応するテーブルに同期します。

    [増分同期] のオプションは、[DML 同期][DDL 同期] です。必要に応じてオプションを選択できます。詳細については、「DDL/DML 同期の設定」をご参照ください。

    説明
    • 双方向同期では、[DML 同期] オプションを選択する必要があります

    • 双方向同期では、DDL 同期は正方向タスクでのみサポートされます。

    完全検証

    完全移行タスクと増分同期タスクが完了すると、データ転送サービスは自動的に完全検証タスクを開始し、ソースデータベースとターゲットデータベースのテーブルを検証します。

  3. [次へ] をクリックします。[移行オブジェクトの選択] ページで、データ移行タスクの移行オブジェクトを指定します。

    [オブジェクトの指定] または [ルールとの照合] を選択して、移行オブジェクトを指定できます。このトピックでは、[オブジェクトの指定] を使用して移行オブジェクトを指定する方法について説明します。照合ルールの詳細については、「照合ルールの設定と変更」の「データベース間のデータ移行/同期のためのワイルドカードパターン」をご参照ください。

    重要
    • 移行するテーブルの名前、およびテーブル内の列の名前に中国語文字を含めることはできません。

    • データベース名またはテーブル名に二重ドル記号 ($$) が含まれている場合、移行タスクを作成できません。

    • [移行タイプの選択] ページで [DDL 同期] を選択した場合、[ルールとの照合] オプションを使用して移行オブジェクトを選択することを推奨します。これにより、移行ルールを満たすすべての新しいオブジェクトが同期されます。[オブジェクトの指定] オプションを使用して移行オブジェクトを選択した場合、新しいオブジェクトや名前が変更されたオブジェクトは同期されません。

    image.png

    1. [移行オブジェクトの選択] セクションで、[オブジェクトの指定] を選択します。

    2. [移行元オブジェクト] リストで、[移行範囲の指定] セクションで、移行するオブジェクトを選択します。1 つ以上のデータベースのテーブルとビューを選択できます。

    3. > をクリックして、[ターゲットオブジェクト] リストに追加します。

    データ転送サービスでは、テキストファイルからオブジェクトをインポートしたり、ターゲットオブジェクトの名前を変更したり、行フィルターを設定したり、列情報を表示したり、単一またはすべての移行オブジェクトを削除したりできます。

    説明

    [ルールとの照合] を選択して移行オブジェクトを指定する場合、オブジェクトの名前変更は指定された照合ルールの構文に基づいて実装されます。操作エリアでは、フィルター条件のみを設定できます。詳細については、「照合ルールの設定と変更」をご参照ください。

    操作

    説明

    オブジェクトのインポート

    1. 右側のリストで、右上隅にある [オブジェクトのインポート] をクリックします。

    2. 表示されるダイアログボックスで、[OK] をクリックします。

      重要

      この操作は以前の選択を上書きします。注意して進めてください。

    3. [オブジェクトのインポート] ダイアログボックスで、移行するオブジェクトをインポートします。

      CSV ファイルをインポートして、データベースやテーブルの名前を変更したり、行フィルター条件を設定したりできます。詳細については、「移行オブジェクトの設定のダウンロードとインポート」をご参照ください。

    4. [検証] をクリックします。

      移行オブジェクトをインポートした後、その有効性を確認します。現在、列フィールドのマッピングはサポートされていません。

    5. 検証が成功したら、[OK] をクリックします。

    オブジェクトの名前変更

    データ転送サービスでは、移行オブジェクトの名前を変更できます。詳細については、「データベーステーブルの名前変更」をご参照ください。

    設定の構成

    データ転送サービスでは、WHERE 条件を使用して行をフィルターできます。詳細については、「SQL 条件を使用したデータフィルタリング」をご参照ください。

    [列の表示] セクションで移行オブジェクトの列情報を表示することもできます。

    1 つまたはすべてのオブジェクトを削除

    データ転送サービスでは、データマッピング中に右側のリストに追加された単一またはすべての同期オブジェクトを削除できます。

    • 単一の移行オブジェクトの削除

      右側のリストで、削除したいオブジェクトの上にポインターを移動し、[削除] をクリックして移行オブジェクトを削除します。

    • すべての移行オブジェクトの削除

      右側のリストで、右上隅にある [すべて削除] をクリックします。表示されるダイアログボックスで、[OK] をクリックしてすべての移行オブジェクトを削除します。

  4. [次へ] をクリックします。[移行オプション] ページで、パラメーターを設定します。

    • 完全移行

      次の表では、[移行タイプの選択] ページで [双方向同期][完全移行] を選択した場合にのみ表示される、完全移行のパラメーターについて説明します。

      image

      パラメーター

      説明

      読み取り同時実行数

      完全移行中にソースからデータを読み取るための同時実行数。最大値は 512 です。読み取り同時実行数が高いと、ソースに過度の負荷がかかり、ビジネスに影響を与える可能性があります。

      書き込み同時実行数

      完全移行中にターゲットにデータを書き込むための同時実行数。最大値は 512 です。書き込み同時実行数が高いと、ターゲットに過度の負荷がかかり、ビジネスに影響を与える可能性があります。

      完全移行レート制限

      必要に応じて、完全移行レートを制限するかどうかを選択できます。完全移行レートを制限することを選択した場合は、RPS (レコード/秒) と BPS (バイト/秒) を指定する必要があります。RPS は、完全移行中に 1 秒あたりにターゲットに移行されるデータ行の最大数を指定し、BPS は、完全移行中に 1 秒あたりにターゲットに移行されるデータの最大バイト数を指定します。

      説明

      ここで指定する RPS と BPS の値はスロットリング専用です。実際の完全移行性能は、ソースとターゲットの設定やインスタンスの仕様などの要因に左右されます。

      ターゲットデータベースの非空テーブルの処理

      有効な値は [無視][移行の停止] です。

      • [無視] を選択した場合、挿入するデータがターゲットテーブルの既存データと競合すると、データ転送サービスは競合データをログに記録し、既存データを保持します。

        重要

        [無視] を選択した場合、完全検証中にデータは IN モードでプルされます。この場合、ターゲットにソースに存在しないデータが含まれていると検証は適用できず、検証性能は低下します。

      • [移行の停止] を選択し、ターゲットテーブルにレコードが含まれている場合、完全移行中に移行がサポートされていないことを示すエラーが報告されます。この場合、移行を続行する前にターゲットテーブルのデータを処理する必要があります。

        重要

        エラーを促すダイアログボックスで [再開] をクリックすると、データ転送サービスはこのエラーを無視してデータの移行を続行します。注意して進めてください。

      事後インデックス作成

      完全移行が完了した後にインデックスを作成するかどうかを指定します。事後インデックス作成により、完全移行に必要な時間を短縮できます。事後インデックス作成に関する注意事項の詳細については、以下の説明をご参照ください。

      重要
      • このパラメーターは、[移行タイプの選択] ページで [スキーマ移行][完全移行] の両方を選択した場合にのみ表示されます。

      • 移行完了後に作成できるのは、非一意キーインデックスのみです。

      • インデックス作成中にターゲットの OceanBase データベースが次のエラーを返した場合、データ転送サービスはそのエラーを無視し、インデックスが正常に作成されたと判断し、再度作成しません。

        • MySQL 互換モードの OceanBase データベースでのエラーメッセージ:Duplicate key name

        • Oracle 互換モードの OceanBase データベースでのエラーメッセージ:name is already used by an existing object

      [許可] を選択した場合は、次のパラメーターを設定します:

      • 単一インデックスの DDL 同時実行数:単一インデックスに対して許可される同時 DDL 操作の最大数。値が大きいほど、リソース消費量が多くなり、データ移行が速くなります。

      • インデックスの最大 DDL 同時実行数:システムが一度に呼び出すことができる事後インデックス作成 DDL 操作の最大数。

      事後インデックス作成が許可されている場合は、CLI クライアントを使用して、OceanBase Database のハードウェア条件と現在のビジネストラフィックに基づいて、ビジネステナントの次のパラメーターを変更することを推奨します:

      // ファイルメモリバッファーサイズの制限を指定します。
      alter system set _temporary_file_io_area_size = '10' tenant = 'xxx'; 
      // OceanBase Database V4.x でスロットリングを無効にします。
      alter system set sys_bkgd_net_percentage = 100;  
    • 増分同期

      次の表では、[移行タイプの選択] ページで [双方向同期][増分同期] を選択した場合にのみ表示される、増分同期のパラメーターについて説明します。

      image

      パラメーター

      説明

      書き込み同時実行数

      増分同期中にターゲットにデータを書き込むための同時実行数。最大値は 512 です。書き込み同時実行数が高いと、ターゲットに過度の負荷がかかり、ビジネスに影響を与える可能性があります。

      増分同期レート制限

      必要に応じて、増分同期レートを制限するかどうかを選択できます。増分同期レートを制限することを選択した場合は、RPS (レコード/秒) と BPS (バイト/秒) を指定する必要があります。RPS は、増分同期中に 1 秒あたりにターゲットに同期されるデータ行の最大数を指定し、BPS は、増分同期中に 1 秒あたりにターゲットに同期されるデータの最大バイト数を指定します。

      説明

      ここで指定する RPS と BPS の値はスロットリング専用です。実際の増分同期性能は、ソースとターゲットの設定やインスタンスの仕様などの要因に左右されます。

      データ競合処理戦略

      有効な値は [エラーを無視し、ターゲット上の元のデータを保持][競合を無視し、ソースデータでターゲットデータを上書き]です。詳細については、このトピックの「データ競合シナリオ」セクションをご参照ください。

  5. [事前チェック] をクリックして、データ移行タスクの事前チェックを開始します。

    事前チェック中、データ転送サービスはデータベースユーザーの読み取りおよび書き込み権限とデータベースのネットワーク接続をチェックします。データ同期タスクは、すべてのチェック項目に合格した後にのみ開始できます。事前チェック中にエラーが返された場合は、次の操作を実行できます:

    • 問題を特定してトラブルシューティングし、再度事前チェックを実行します。

    • 失敗した事前チェック項目の [操作] 列で [スキップ] をクリックします。操作の結果を促すダイアログボックスで、[OK] をクリックします。

  6. 事前チェックが成功したら、[タスクの開始] をクリックして正方向タスクを開始します。

逆方向タスクの設定

  1. [移行タスク] ページに移動します。正方向タスクが増分同期フェーズに入り、実行中状態になるまで待ちます。その後、逆方向タスクの [設定] をクリックします。

    image

  2. [逆方向タスクの設定] ダイアログボックスで、パラメーターを設定します。

    image

    パラメーター

    説明

    タスクインスタンス

    ドロップダウンリストから利用可能なタスクインスタンスを選択して、逆方向タスクを設定します。利用可能なタスクインスタンスがない場合は、購入してください。詳細については、「データ移行タスクの購入」をご参照ください。

    書き込み同時実行数

    完全移行中にターゲットにデータを書き込むための同時実行数。最大値は 512 です。書き込み同時実行数が高いと、ターゲットに過度の負荷がかかり、ビジネスに影響を与える可能性があります。

    増分同期レート制限

    必要に応じて、増分同期レートを制限するかどうかを選択できます。

    データ競合処理戦略

    有効な値は [エラーを無視し、ターゲット上の元のデータを保持][競合を無視し、ソースデータでターゲットデータを上書き]です。

  3. [事前チェック] をクリックします。システムは逆再生タスクを事前チェックします。

  4. 事前チェックが成功したら、[タスクの開始] をクリックして逆方向タスクを開始します。