このトピックでは、移行または同期オブジェクトの一致ルールの構成と変更に関する背景情報、制限事項、手順、シナリオ、およびトラブルシューティングのヒントについて説明します。
背景
データ移行タスクまたはデータ同期タスクを作成する場合は、移行または同期するオブジェクトを指定する必要があります。データ伝送サービスでは、オブジェクトを直接指定したり、オブジェクトをインポートしたり、オブジェクトの一致ルールを構成したりできます。ワイルドカードベースの一致ルールを構成して、移行または同期オブジェクトを指定および変更できます。ソースとターゲット間のオブジェクトマッピングロジックを構成することもできます。これにより、シンプルかつ効率的な方法で移行または同期する多数のオブジェクトを指定できます。一致ルールを満たす新しいテーブルは、増分同期の DDL 操作によってターゲットに自動的に同期できます。詳細については、「同期と制限事項でサポートされている DDL 操作」をご参照ください。
データベース間のデータ移行/同期のためのワイルドカードパターン
次の表に、データベース間のデータ移行/同期のためにデータ伝送サービスでサポートされているワイルドカードパターンを示します。
次の表では、アスタリスク(*)はワイルドカードを示します。
双方向同期タスクでは、データベースまたはテーブルの集約はサポートされていません。
カテゴリ | サポートされているルール | 例 | 説明 |
オブジェクトの直接移行 オブジェクトの移行 | *.* | kd_test*.person* | 名前が kd_test で始まるすべてのデータベース内の、名前が person で始まるすべてのテーブルが、ソースからターゲットに移行されます。ソースデータベース名とテーブル名は変更されません。 |
*.<ソーステーブル> | kd_test*.person | 名前が kd_test で始まるすべてのデータベース内の、person という名前のすべてのテーブルが、ソースからターゲットに移行されます。ソースデータベース名とテーブル名は変更されません。 | |
<ソースデータベース>.* | kd_test.person* | kd_test という名前のデータベース内の、名前が person で始まるすべてのテーブルが、ソースからターゲットに移行されます。ソースデータベース名とテーブル名は変更されません。 | |
<ソースデータベース>.<ソーステーブル> | kd_test.person | kd_test という名前のデータベース内の、person という名前のテーブルが、ソースからターゲットに移行されます。ソースデータベース名とテーブル名は変更されません。 | |
移行後のオブジェクトの名前変更 | <ソースデータベース>.<ソーステーブル>=<ターゲットデータベース>.<ターゲットテーブル> | kd_test.person=kd_test_new.person_new | kd_test という名前のデータベース内の、person という名前のテーブルが、ソースからターゲットに移行されます。 kd_test データベースは kd_test_new に名前が変更され、person テーブルは person_new に名前が変更されます。 |
<ソースデータベース>.*=<ターゲットデータベース>.* | kd_test.person*=kd_test_new.person* | kd_test という名前のデータベース内の、名前が person で始まるすべてのテーブルが、ソースからターゲットに移行されます。 kd_test データベースは kd_test_new に名前が変更され、ソーステーブル名は変更されません。 | |
*.<ソーステーブル>=*.<ターゲットテーブル> | kd_test*.person=kd_test*.person_new | 名前が kd_test で始まるすべてのデータベース内の、person という名前のすべてのテーブルが、ソースからターゲットに移行されます。テーブル名は person_new に変更され、ソースデータベース名は変更されません。 | |
オブジェクトの集約 | <ソースデータベース>.*=<ターゲットデータベース>.<ターゲットテーブル> | kd_test.person*=kd_test.person_all | ソースの kd_test という名前のデータベース内の、名前が person で始まるすべてのテーブルが、ターゲットの kd_test データベース内の person_all テーブルに集約されます。 |
*.<ソーステーブル>=<ターゲットデータベース>.<ターゲットテーブル> | kd_test*.person=kd_test_all.person | ソースの、名前が kd_test で始まるすべてのデータベース内の、person という名前のすべてのテーブルが、ターゲットの kd_test_all データベース内の person テーブルに集約されます。 | |
*.*=<ターゲットデータベース>.<ターゲットテーブル> | kd_test*.person*=kd_test_all.person_all | ソースの、名前が kd_test で始まるすべてのデータベース内の、名前が person で始まるすべてのテーブルが、ターゲットの kd_test_all データベース内の person_all テーブルに集約されます。 | |
*.*=<ターゲットデータベース>.* | kd_test*.person*=kd_test_all.person* | ソースの、名前が kd_test で始まるすべてのデータベース内の、名前が person で始まるすべてのテーブルが、ターゲットの kd_test_all データベースに集約されます。ソーステーブル名は変更されません。 | |
*.*=*.<ターゲットテーブル> | kd_test*.person*=kd_test*.person_all | ソースの、名前が kd_test で始まるすべてのデータベース内の、名前が person で始まるすべてのテーブルが、ターゲットの、名前が kd_test で始まるデータベース内の person_all テーブルに集約されます。ソースデータベース名は変更されません。 |
一致ルールの要件は次のとおりです。
ターゲットのデータベース名とテーブル名の両方でワイルドカードを使用することはできません。たとえば、
kd_test*.person*=kd_test*.person*
は使用できません。ソースデータベースとターゲットデータベースの両方でワイルドカードを使用する場合は、データベース式はソースとターゲットで同じである必要があり、スムーズなデータベース移行を示します。
ソーステーブルとターゲットテーブルの両方でワイルドカードを使用する場合は、テーブル式はソースとターゲットで同じである必要があり、スムーズなテーブル移行を示します。
ターゲットでデータベースにワイルドカードを使用する場合は、ソースのデータベースにもワイルドカードを使用する必要があります。
ターゲットでテーブルにワイルドカードを使用する場合は、ソースのテーブルにもワイルドカードを使用する必要があります。
データベースと Message Queue インスタンス間のデータ移行/同期のためのワイルドカードパターン
次の表に、データベースと Message Queue インスタンス間のデータ移行/同期のためにデータ伝送サービスでサポートされているワイルドカードパターンを示します。
次の表では、アスタリスク(*)はワイルドカードを示します。
サポートされているルール | 例 | 説明 |
*.*=<トピック名> | *.*=topic | 複数のデータベース内の複数のテーブルが 1 つのトピックにマッピングされます。 |
*.<ソーステーブル>=<トピック名> | *.b=topic | 複数のデータベース内の b という名前のテーブルが 1 つのトピックにマッピングされます。 |
<ソースデータベース>.*=<トピック名> | a.*=topic | データベース a 内の複数のテーブルが 1 つのトピックにマッピングされます。 |
<ソースデータベース>.<ソーステーブル>=<トピック名> | a.b=topic | データベース a 内のテーブル b がトピックにマッピングされます。 |
制限事項
データ伝送サービスでは複数のルールがサポートされています。各ルールは 1 行に配置し、先頭または末尾にスペースを入れないでください。
移行または同期オブジェクトの一致ルールは空にできません。オブジェクト除外ルールは空にできます。
スキーマ移行および完全移行中は、変更のための DDL 操作はサポートされていません。
一致ルールを構成して移行または同期オブジェクトを選択する場合、テーブル名に改行、スペース、または特殊文字を含めることはできません。特殊文字は . | " ' ` ( ) = ; / & \ * ? [ ] [ ! ] です。
ソースの同じデータベース内の異なるテーブルをターゲットの異なるデータベースにマッピングするために複数の一致ルールを構成することはできません。たとえば、
a.a* = b.a* & a.b* = c.b*
は構成できません。データベースまたはテーブルの集約のシナリオでは、逆増分同期はサポートされていません。
説明データ伝送サービスは、データ移行タスクまたはデータ同期タスクが保存または開始された場合にのみ、データベースまたはテーブルの集約が存在するかどうかを確認します。データ伝送サービスは、タスクの実行中に発生するデータベースまたはテーブルの集約をブロックしません。ただし、逆増分同期中にデータベースまたはテーブル間のマッピングが正しく識別されない場合があり、データの品質が損なわれます。
現在、データ伝送サービスは DDL 文 CREATE DATABASE をサポートしていません。ソースで作成された新しいデータベースがオブジェクト一致ルールを満たしている場合は、ターゲットで対応するデータベースを手動で作成して、新しいデータベースのデータ同期を続行する必要があります。
考慮事項
オブジェクト一致ルールと除外ルールを構成した後、オブジェクト一致ルールと除外ルールの差集合内にあるオブジェクトを選択できます。
説明2 つの集合間の差集合には、一方の集合に存在するが、もう一方の集合には存在しないすべての要素が含まれます。
DDL 同期が有効になっている場合、DDL 文を使用してソースで新しいテーブルを作成したり、テーブルのスキーマを変更したりするときに、テーブルがオブジェクト一致ルールと除外ルールの差集合内にある場合、この DDL 文はデータ伝送サービスによってターゲットに同期できます。
複数のテーブルを集約する場合は、次の考慮事項に注意してください。
一致ルールを指定して、ソースデータベースとターゲットデータベース間のマッピングを構成することをお勧めします。
ターゲットでスキーマを手動で作成することをお勧めします。データ伝送サービスを使用してスキーマを作成する場合は、スキーマ移行ステップで失敗したオブジェクトをスキップします。
[DDL 同期] を選択すると、データベースまたはテーブルが誤って削除される可能性があります。たとえば、ソースの複数のデータベースまたはテーブルがターゲットの単一のデータベースまたはテーブルに集約されている場合、ソースでデータベースまたはテーブルが削除されると、ターゲットの集約されたデータベースまたはテーブルが削除される可能性があります。
データ移行タスクを作成するときは、[完全移行] をクリックし、[ターゲットテーブルにレコードがある場合の処理方法] で [無視] を選択します。
説明[無視] を選択すると、完全検証のために IN モードでデータがプルされます。この場合、ターゲットにソースに存在しないデータが含まれていると検証は適用されず、検証のパフォーマンスが低下します。
テーブルの名前変更マッピングルールが構成されている場合、名前変更マッピングルールが優先されます。たとえば、
a.b[0-3]
とa.b[3-5]=a.c
のルールが構成されている場合、a.b3
テーブルの名前はa.c
に変更されます。DDL 文 RENAME TABLE を実行するときに、名前が変更されたテーブルが元の一致ルールまたは除外ルールを満たしていない場合、予期しない同期の問題が発生する可能性があります。注意して進めてください。
データベース間の一致ルールの構成
[移行オブジェクトの選択] または [同期オブジェクトの選択] に進む前に、データ移行または同期タスクの手順を完了します。
詳細については、対応するタイプの データ移行 タスクまたは データ同期 タスクに関するトピックをご参照ください。
説明移行オブジェクトを選択する手順は、同期オブジェクトを選択する手順と同じです。このセクションでは、移行オブジェクトを選択する方法について説明します。
OceanBase Database の MySQL テナントから AnalyticDB for MySQL データベースへのデータ同期、ApsaraDB RDS for PostgreSQL インスタンスから OceanBase Database の Oracle テナントへのデータ同期、または OceanBase Database 内の同じ種類のテナント間のデータ同期タスクでは、データベース間で同期オブジェクトを選択するための一致ルールが構成されます。
[移行オブジェクトの選択] セクションで、[一致ルール] を選択します。
[移行スコープの指定] セクションで、[オブジェクト移行ルール] フィールドにオブジェクト移行ルールを指定し、[オブジェクト除外ルール] フィールドにオブジェクト除外ルールを指定します。 [オブジェクト除外ルール] フィールドはオプションです。詳細については、「ワイルドカードルール」をご参照ください。
説明構成されたルールにスペースが含まれていると、オブジェクトの移行タスクまたは同期タスクが失敗する可能性があります。
[検証] をクリックします。
一致する結果を表示するには、検証が成功した後、[プレビュー] オブジェクト をクリックします。ワイルドカードベースの一致ルールと除外ルールは、テーブルとビューに適用されます。[最終オブジェクト]、新規オブジェクト、および削除済みオブジェクトタブに一致結果が表示されます。
タブ
説明
最終オブジェクト
指定された一致ルールにヒットした移行オブジェクトが表示されます。
新しいオブジェクト
以前の一致の結果にない移行オブジェクトが表示されます。
削除されたオブジェクト
以前の一致の結果にのみ含まれる移行オブジェクトが表示されます。
移行または同期オブジェクトを選択するための一致ルールを構成した後、フィルタリング条件を設定できます。
[一致結果] > [最終オブジェクト] を選択し、ポインターをターゲットテーブルオブジェクトの上に移動します。
[設定] をクリックします。
[設定] ダイアログボックスで、標準 SQL
WHERE
句を指定して、行ごとにデータをフィルタリングします。次に、[構文の検証] をクリックします。詳細については、「SQL 条件を使用してデータをフィルタリングする」をご参照ください。構文検証に合格したら、[OK] をクリックします。
[列の表示] セクションで、移行オブジェクトの列情報を表示することもできます。
プロンプトに従って後続のタスク設定を完了します。
サンプルシナリオ
オブジェクトのスムーズな移行
ソースの、名前が jenkins_api で始まるすべてのデータベース内の、名前が test で始まるすべてのテーブルをターゲットに移行し、元のデータベース名とテーブル名を保持します。これを行うには、次の図に示すように一致ルールを構成します。
移行後のオブジェクトの名前変更
ソースの jenkins_my2dh_one という名前のデータベース内の、名前が test で始まるすべてのテーブルをターゲットに移行し、jenkins_my2dh_one データベースの名前を jenkins_my2dh_one_new に変更し、元のテーブル名を保持します。これを行うには、次の図に示すように一致ルールを構成します。
オブジェクトの集約
ソースの、名前が jenkins_api で始まるすべてのデータベース内の、名前が order で始まるすべてのテーブルを、ターゲットの jenkins_api_all データベース内の order テーブルに集約します。これを行うには、次の図に示すように一致ルールを構成します。
オブジェクト除外ルールの構成
ソースの jenkins_api_mysql56 データベース内の、名前が history_ で始まる履歴テーブルと、名前が log で終わるログテーブルを移行から除外します。これを行うには、次の図に示すように一致ルールを構成します。
データベース間の一致ルールの変更
ルールの説明
データ移行タスクの逆増分同期フェーズでは、移行オブジェクトを追加することはできません。
次の表に、一致ルールを変更できるシナリオを示します。
データ移行フェーズ
移行タスクのステータス
フェーズのステータス
/
開始されていません
/
完全移行
実行中
実行中
失敗
失敗
一時停止
一時停止
増分同期/逆増分同期
実行中
実行中
実行中
監視中
失敗
失敗
一時停止
一時停止
手順
[オブジェクトの表示] ダイアログボックスに移動します。
ApsaraDB for OceanBase コンソールにログオンします。
左側のナビゲーションウィンドウで、[データ転送] > [データ移行] を選択します。
[データの移行] ページで、ターゲットタスクの名前をクリックして詳細ページに移動します。
右上隅にある [オブジェクトの表示] をクリックします。移行オブジェクトと変更レコードが表示されます。
[オブジェクトの表示] ダイアログボックスの右下隅にある [ルールの変更] をクリックします。
[ルールの変更] ダイアログボックスで、移行オブジェクトの一致ルールを変更して、オブジェクトを追加または削除します。
[検証] をクリックします。検証が成功したら、[オブジェクトのプレビュー] をクリックして一致結果を表示します。
新しいオブジェクトにポインターを合わせ、表示される [構成] をクリックして、このオブジェクトのフィルター条件を構成できます。
[次へ] をクリックします。
オブジェクトを追加すると、システムはこれらのオブジェクトに対して事前チェックを実行します。
オブジェクトを削除すると、削除されるオブジェクトの数が表示されます。
事前チェックが成功するか、削除するオブジェクトの数を確認したら、[送信] をクリックします。
オブジェクトの変更が実行された後、ページの右上隅にある をクリックし、 をクリックして、変更レコードと詳細を表示できます。 [オブジェクトの表示]をクリックします。[変更されたレコード] 変更レコードと詳細を表示します。
データベースからメッセージキューインスタンスへのデータ移行/同期の照合ルールの構成
OceanBase Database から DataHub、Kafka、または RocketMQ インスタンスにデータを同期する場合、照合ルールを構成して同期するオブジェクトを選択できます。
データ同期タスクを作成し、指示に従って [同期オブジェクトの選択] ステップに進みます。
詳細については、対応するタイプの データ同期 タスクのトピックをご参照ください。
[同期オブジェクトの選択] セクションで、[照合ルール] を選択します。
オプション。 [オブジェクト同期ルール] と [オブジェクト除外ルール] を指定します。詳細については、「照合ルールでサポートされているワイルドカードパターン」をご参照ください。
照合ルールを構成する場合、ビジネスロジックはデータ同期タスクのタイプによって異なります。
ターゲットが DataHub インスタンスの場合、トピックタイプは Tuple または BLOB にすることができます。
Tuple タイプの場合、ワイルドカードまたはスペースを含まない既存のトピック名のみを入力できます。テーブルを選択すると、それらは 1 対 1 の方法でトピックにマッピングされます。
BLOB タイプの場合、多対 1 および 1 対 1 のマッピング方法がサポートされており、スペースは使用できません。
同期タイプを指定したときに [スキーマ同期] を選択した場合は、既存のトピックの名前を入力するか、新しいトピックを作成するかを選択できます。1 つのマッピング方法のみがサポートされています。トピックの作成または選択には、1 つのマッピング方法のみを選択できます。同期タイプを指定したときに [スキーマ同期] を選択しなかった場合は、既存のトピックの名前のみを入力できます。
ターゲットが Kafka または RocketMQ インスタンスの場合、多対 1 および 1 対 1 のマッピング方法がサポートされており、スペースは使用できません。
同期タイプを指定したときに [スキーマ同期] を選択した場合は、既存のトピックの名前を入力するか、新しいトピックを作成するかを選択できます。同期タイプを指定したときに [スキーマ同期] を選択しなかった場合は、既存のトピックの名前のみを入力できます。
[検証] をクリックします。
検証が成功したら、[プレビュー] オブジェクトをクリックして、一致する結果を表示します。一致する結果は、[最終オブジェクト]、新規オブジェクト、および削除済みオブジェクトタブに表示されます。
照合ルールを構成して同期オブジェクトを選択した後、フィルタリング条件を設定できます。
[照合結果] > [最終オブジェクト] を選択し、ポインターをターゲットテーブルオブジェクトの上に移動します。
[設定] をクリックします。
[設定] ダイアログボックスでは、次の操作を実行できます。
[行フィルター] セクションで、標準 SQL
WHERE
句を指定して、行ごとにデータをフィルタリングします。次に、[構文の検証] をクリックします。詳細については、「SQL 条件を使用してデータをフィルタリングする」をご参照ください。[シャーディング列] ドロップダウンリストから、使用するシャーディング列を選択します。複数のフィールドをシャーディング列として選択できます。このパラメーターはオプションです。
特に指定がない限り、プライマリキーをシャーディング列として選択します。プライマリキーの負荷が分散されていない場合は、パフォーマンスの問題を回避するために、一意の識別子を持つ負荷分散フィールドをシャーディング列として選択します。シャーディング列は、次の目的で使用できます。
負荷分散: ターゲットテーブルが同時書き込みをサポートしている場合、メッセージの送信に使用されるスレッドは、シャーディング列に基づいて認識できます。
順序性: データ転送サービスは、シャーディング列の値が同じであれば、メッセージが順番に受信されることを保証します。順序性は、列に対して DML 文を実行する順序を指定します。
[列の選択] セクションで、同期する列を選択します。詳細については、「列フィルタリング」をご参照ください。
[OK] をクリックします。
指示に従って後続のタスク設定を完了します。
データベースからメッセージキューインスタンスへのデータ移行/同期の照合ルールを変更する
[オブジェクトの表示] ダイアログボックスに移動します。
ApsaraDB for OceanBase コンソールにログオンします。
左側のナビゲーションウィンドウで、[データ伝送] > [データ同期] を選択します。
[データ同期] ページで、ターゲットタスクの名前をクリックして詳細ページに移動します。
右上隅にある [オブジェクトの表示] をクリックします。同期オブジェクトと変更レコードが表示されます。
[オブジェクトの表示] ダイアログボックスで、右下隅にある [ルールの変更] をクリックします。
[ルールの変更] ダイアログボックスで、同期オブジェクトの照合ルールを変更して、オブジェクトを追加または削除します。
照合ルールを構成する場合、ビジネスロジックはデータ同期タスクの種類によって異なります。詳細については、このトピックの「データベースからメッセージキューインスタンスへのデータ移行/同期の照合ルールを構成する」セクションをご参照ください。
[検証] をクリックします。照合結果を表示するには、検証が成功した後に [オブジェクトのプレビュー] をクリックします。
新しいオブジェクトにポインターを合わせ、表示される [構成] をクリックして、このオブジェクトのフィルター条件を構成できます。
[次へ] をクリックします。
オブジェクトを追加すると、システムはこれらのオブジェクトに対して事前チェックを実行します。
オブジェクトを削除すると、削除されるオブジェクトの数が表示されます。
事前チェックが成功したか、削除するオブジェクトの数を確認したら、[送信] をクリックします。
オブジェクトの変更が実行された後、ページの右上隅にある [オブジェクトの表示] をクリックし、[変更されたレコード] をクリックして、変更レコードと詳細を表示できます。
FAQ
権限不足
ソースデータベースユーザーの権限設定に注意してください。必要なすべての権限を移行ユーザーに付与しないと、データ伝送サービスによってフロントエンドに一部のオブジェクトが表示されず、一致ルールを正しく構成できません。この場合、データ伝送サービスがターゲットオブジェクトを見つけられないためにデータ移行タスクまたはデータ同期タスクが中断されないように、これらのオブジェクトを オブジェクト除外ルール に追加する必要があります。
DML フィルタリングはサポートされていません
DDL 同期が無効になっている場合、データ伝送サービスでは、一致ルールに基づいてオブジェクトを選択できます。増分同期中に作成された新しいテーブルが一致ルールを満たしている場合、関連する DDL 文は無視されますが、データ伝送サービスは引き続き DML 文を同期します。その結果、オブジェクトをターゲットに移行または同期できないため、データ移行タスクまたはデータ同期タスクが中断されます。したがって、ターゲットでテーブルを作成するか、テーブルをブロックリストに追加する必要があります。