同期するオブジェクトとしてデータベース全体を指定し、そのデータベースにテーブルを更新するトリガーが含まれている場合、ソースデータベースとターゲットデータベースの間でデータの不整合が発生する可能性があります。 このトピックでは、トリガーを含むソースデータベースのデータ同期タスクを設定する方法について説明します。 この方法は、ソースデータベースと宛先データベース間のデータの一貫性と整合性を維持します。
背景情報
同期または移行タスクのソースデータベースにトリガーが含まれていて、次の条件を満たしている場合は、参照に基づいてトリガーを同期または移行し、ソースデータベースと移行先データベース間のデータの一貫性を確保します。 このトピックでは、トリガーを含む他のデータベースのデータ同期または移行タスクを設定する方法について説明します。
ソースデータベース | 宛先データベース | 説明 | 関連ドキュメント |
無制限 | PostgreSQL、PolarDB for PostgreSQL、またはPolarDB for PostgreSQL (Oracleと互換) |
| |
MySQL、PolarDB for MySQL、またはApsaraDB RDS for MariaDB | MySQL、PolarDB for MySQL、またはApsaraDB RDS for MariaDB | トリガーの同期または移行タスクを手動で設定できます。 | |
SQL Server | SQL Server |
同期または移行プロセス
移行元データベースから移行先データベースにデータを移行するための移行タスクを作成します。
詳細については、「データ移行シナリオの概要」をご参照ください。
重要移行タイプ パラメーターには、スキーマ移行 のみを選択します。
ソースオブジェクトパラメーターをデータベースまたはスキーマに設定します。
移行先データベースにログインし、移行元データベースから移行されたトリガーを削除します。
ソースデータベースからターゲットデータベースにデータを同期または移行するための同期または移行タスクを作成します。
詳細については、「データ同期シナリオの概要」および「データ移行シナリオの概要」をご参照ください。
重要データ同期: デフォルトでは、同期タイプパラメーターに増分データ同期が選択されています。 完全データ同期 も選択する必要があります。 スキーマ同期 を選択しません。
データ移行: 移行タイプ パラメーターには、完全データ移行 および 増分データ移行 を選択します。 スキーマ移行 は選択しません。
オプションです。 データの同期または移行が完了したら、タスクを終了またはリリースします。
詳細については、「DTSインスタンスの終了」および「DTSインスタンスのリリース」をご参照ください。
説明タスクが終了またはリリースされた後、ビジネス要件に基づいてターゲットデータベースにトリガーを手動で追加できます。
例:
次の例は、自己管理型MySQLデータベースからApsaraDB RDS for MySQLインスタンスにデータを移行する方法を示しています。
データ準備
triggertestdataという名前のMySQLデータベースに2つのテーブル (親と子) が作成されます。 親テーブルにはトリガーが含まれています。 データエントリが親テーブルに挿入された場合、トリガはそのデータエントリを子テーブルに挿入する。
次の表に、テーブルのステートメントとトリガーを示します。
オブジェクト型 | 名前 | ステートメント |
テーブル | 親 |
|
テーブル | child |
|
Trigger | data_check |
|
この場合、データ同期中に親テーブルに対してINSERT操作が実行された場合、ソースの子テーブルのデータとターゲットの子テーブルのデータが一致しません。 この問題を解決するには、ターゲットデータベースのトリガーを削除する必要があります。
手順
ソースデータベースのスキーマをターゲットデータベースに移行するデータ移行タスクを作成します。
[データ移行タスク] ページに移動します。
にログインします。 データ管理 (DMS) コンソール
上部のナビゲーションバーで、ポインタを上に移動します。DTS.
選択 .
説明実際の操作は、DMSコンソールのモードとレイアウトによって異なります。 詳細については、「シンプルモード」および「DMSコンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
に行くこともできます 新しいDTSコンソールのデータ移行ページ。
の右側にあるドロップダウンリストからデータ移行タスク、データ移行インスタンスが存在するリージョンを選択します。
説明新しいDTSコンソールを使用する場合は、左上隅にデータ移行インスタンスが存在するリージョンを選択する必要があります。
タスクの作成 をクリックして、タスク設定ページに移動します。
移行元データベース セクションと 移行先データベース セクションでパラメーターを設定し、接続をテストして続行 をクリックします。
詳細については、「自己管理型MySQLデータベースからApsaraDB RDS For MySQLインスタンスへのデータの移行」をご参照ください。
移行タイプ パラメーターを スキーマ移行 に設定し、データベースまたはスキーマを選択します。
ビジネス要件に基づいて他のパラメーターを設定します。
スキーマの移行中、DTSはトリガーも移行先データベースに移行します。 移行タスクが完了したら、移行先データベースにログインし、次のコマンドを実行して移行されたトリガーを削除する必要があります。
ドロップトリガー <トリガー名>;
サンプルコマンド:
ドロップトリガーdata_check;
ソースデータベースからターゲットデータベースにデータを同期するデータ同期タスクを作成します。
左側のナビゲーションウィンドウで、データ同期 を選択します。
移行元データベース セクションと 移行先データベース セクションでパラメーターを設定し、接続をテストして続行 をクリックします。
詳細については、「セルフマネージドMySQLデータベースからApsaraDB RDS For MySQLインスタンスへのデータの同期」をご参照ください。
説明ソースデータベースとターゲットデータベースの設定は、手順1と同じである必要があります。
同期タイプ パラメーターに 完全データ同期 を選択します。
説明同期するオブジェクトは、手順1で移行したオブジェクトと同じである必要があります。
デフォルトでは、同期タイプパラメーターに増分データ同期が選択されています。 スキーマ同期 を選択しません。
ビジネス要件に基づいて他のパラメーターを設定します。
テストデータの整合性
ソースデータベースにログインし、親テーブルにデータエントリを挿入します。
insert into parent values(1,'testname');
データエントリが挿入された後、トリガは、データエントリをソース子テーブルに挿入する。
ソースデータベースとターゲットデータベースにログインします。 送信元の子テーブルと送信先の子テーブルのデータを照会します。 2つのテーブル間でデータが一致しているかどうかを確認します。
ソースの子テーブルのクエリ結果
+ ----------- ---------------------------------- | sys_child_id | user_vs_id | name | + ------------ --------------------------------- | 2001 | 1 | testname | + ------------ ---------------------------------
宛先の子テーブルのクエリ結果
+ ----------- ---------------------------------- | sys_child_id | user_vs_id | name | + ------------ --------------------------------- | 2001 | 1 | testname | + ------------ ---------------------------------
結果は、ソースの子テーブルのデータが、ターゲットの子テーブルのデータと一致していることを示しています。
次に何をすべきか
データ同期が完了したら、手順3で作成したデータ同期タスクを終了します。
詳細については、「DTSインスタンスの終了」をご参照ください。
オプションです。 トリガーを作成するためのステートメントを表示します。
手順1で作成したデータ移行タスクを見つけます。
管理するタスクのIDをクリックします。
タスク管理 ページで、[スキーマMigration2] をクリックします。
タスクの詳細 タブで、文を表示 をクリックします。
ターゲットデータベースにログインし、トリガーを追加します。