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

Data Transmission Service:トリガーを含むソースデータベースのデータ同期または移行タスクの設定

最終更新日:Jan 23, 2025

同期するオブジェクトとしてデータベース全体を指定し、そのデータベースにテーブルを更新するトリガーが含まれている場合、ソースデータベースとターゲットデータベースの間でデータの不整合が発生する可能性があります。 このトピックでは、トリガーを含むソースデータベースのデータ同期タスクを設定する方法について説明します。 この方法は、ソースデータベースと宛先データベース間のデータの一貫性と整合性を維持します。

背景情報

同期または移行タスクのソースデータベースにトリガーが含まれていて、次の条件を満たしている場合は、参照に基づいてトリガーを同期または移行し、ソースデータベースと移行先データベース間のデータの一貫性を確保します。 このトピックでは、トリガーを含む他のデータベースのデータ同期または移行タスクを設定する方法について説明します。

ソースデータベース

宛先データベース

説明

関連ドキュメント

無制限

PostgreSQL、PolarDB for PostgreSQL、またはPolarDB for PostgreSQL (Oracleと互換)

  • Data Transmission Service (DTS) インスタンスで使用されるターゲットデータベースアカウントに、特権アカウントや超特権アカウントなどの十分な権限がある場合、トリガーがターゲットデータベースに同期または移行された後、DTSは自動的にセッションレベルでトリガーを無効にします。

  • DTSインスタンスによって使用される移行先データベースアカウントに必要な権限がない場合は、データ同期または移行タスク中に、移行先データベースのsession_replication_roleパラメーターの値がreplicaに設定されていることを確認します。

MySQL、PolarDB for MySQL、またはApsaraDB RDS for MariaDB

MySQL、PolarDB for MySQL、またはApsaraDB RDS for MariaDB

トリガーの同期または移行タスクを手動で設定できます。

ソースデータベースからのトリガーの同期または移行

SQL Server

SQL Server

同期または移行プロセス

  1. 移行元データベースから移行先データベースにデータを移行するための移行タスクを作成します。

    詳細については、「データ移行シナリオの概要」をご参照ください。

    重要
    • 移行タイプ パラメーターには、スキーマ移行 のみを選択します。

    • ソースオブジェクトパラメーターをデータベースまたはスキーマに設定します。

  2. 移行先データベースにログインし、移行元データベースから移行されたトリガーを削除します。

  3. ソースデータベースからターゲットデータベースにデータを同期または移行するための同期または移行タスクを作成します。

    詳細については、「データ同期シナリオの概要」および「データ移行シナリオの概要」をご参照ください。

    重要
    • データ同期: デフォルトでは、同期タイプパラメーターに増分データ同期が選択されています。 完全データ同期 も選択する必要があります。 スキーマ同期 を選択しません。

    • データ移行: 移行タイプ パラメーターには、完全データ移行 および 増分データ移行 を選択します。 スキーマ移行 は選択しません。

  4. オプションです。 データの同期または移行が完了したら、タスクを終了またはリリースします。

    詳細については、「DTSインスタンスの終了」および「DTSインスタンスのリリース」をご参照ください。

    説明

    タスクが終了またはリリースされた後、ビジネス要件に基づいてターゲットデータベースにトリガーを手動で追加できます。

例:

説明

次の例は、自己管理型MySQLデータベースからApsaraDB RDS for MySQLインスタンスにデータを移行する方法を示しています。

データ準備

triggertestdataという名前のMySQLデータベースに2つのテーブル (親と子) が作成されます。 親テーブルにはトリガーが含まれています。 データエントリが親テーブルに挿入された場合、トリガはそのデータエントリを子テーブルに挿入する。

説明

次の表に、テーブルのステートメントとトリガーを示します。

オブジェクト型

名前

ステートメント

テーブル

CREATE TABLE 'parent' (
  'user_vs_id 'int(11) NOT NULL AUTO_INCREMENT、
  'name' varchar(30) DEFAULT NULL、
  PRIMARYキー ('user_vs_id ')
) エンジン=InnoDB AUTO_INCREMENT=2001デフォルト料金=utf8 

テーブル

child

CREATE TABLE 'child '(
  'sys_child_id 'int(11) NOT NULL AUTO_INCREMENT、
  'user_vs_id 'int(11) DEFAULT NULL、
  'name' varchar(30) DEFAULT NULL、
  PRIMARYキー ('sys_child_id ')
) エンジン=InnoDB AUTO_INCREMENT=2001デフォルト料金=utf8 

Trigger

data_check

トリガーの作成data_check
親に挿入した後
各列のため
insert into child(user_vs_id, name) 値s(new.us er_vs_id, new.name) ; 

この場合、データ同期中に親テーブルに対してINSERT操作が実行された場合、ソースの子テーブルのデータとターゲットの子テーブルのデータが一致しません。 この問題を解決するには、ターゲットデータベースのトリガーを削除する必要があります。

手順

  1. ソースデータベースのスキーマをターゲットデータベースに移行するデータ移行タスクを作成します。

    1. [データ移行タスク] ページに移動します。

      1. にログインします。 データ管理 (DMS) コンソール

      2. 上部のナビゲーションバーで、ポインタを上に移動します。DTS.

      3. 選択DTS (DTS) > データ移行.

      説明
    2. の右側にあるドロップダウンリストからデータ移行タスク、データ移行インスタンスが存在するリージョンを選択します。

      説明

      新しいDTSコンソールを使用する場合は、左上隅にデータ移行インスタンスが存在するリージョンを選択する必要があります。

    3. タスクの作成 をクリックして、タスク設定ページに移動します。

    4. 移行元データベース セクションと 移行先データベース セクションでパラメーターを設定し、接続をテストして続行 をクリックします。

      詳細については、「自己管理型MySQLデータベースからApsaraDB RDS For MySQLインスタンスへのデータの移行」をご参照ください。

    5. 移行タイプ パラメーターを スキーマ移行 に設定し、データベースまたはスキーマを選択します。

      image

    6. ビジネス要件に基づいて他のパラメーターを設定します。

  2. スキーマの移行中、DTSはトリガーも移行先データベースに移行します。 移行タスクが完了したら、移行先データベースにログインし、次のコマンドを実行して移行されたトリガーを削除する必要があります。

    ドロップトリガー <トリガー名>;

    サンプルコマンド:

    ドロップトリガーdata_check;
  3. ソースデータベースからターゲットデータベースにデータを同期するデータ同期タスクを作成します。

    1. 左側のナビゲーションウィンドウで、データ同期 を選択します。

    2. 移行元データベース セクションと 移行先データベース セクションでパラメーターを設定し、接続をテストして続行 をクリックします。

      詳細については、「セルフマネージドMySQLデータベースからApsaraDB RDS For MySQLインスタンスへのデータの同期」をご参照ください。

      説明

      ソースデータベースとターゲットデータベースの設定は、手順1と同じである必要があります。

    3. 同期タイプ パラメーターに 完全データ同期 を選択します。

      説明
      • 同期するオブジェクトは、手順1で移行したオブジェクトと同じである必要があります。

      • デフォルトでは、同期タイプパラメーターに増分データ同期が選択されています。 スキーマ同期 を選択しません。

      image

    4. ビジネス要件に基づいて他のパラメーターを設定します。

テストデータの整合性

  1. ソースデータベースにログインし、親テーブルにデータエントリを挿入します。

    insert into parent values(1,'testname');

    データエントリが挿入された後、トリガは、データエントリをソース子テーブルに挿入する。

  2. ソースデータベースとターゲットデータベースにログインします。 送信元の子テーブルと送信先の子テーブルのデータを照会します。 2つのテーブル間でデータが一致しているかどうかを確認します。

    • ソースの子テーブルのクエリ結果

      + ----------- ----------------------------------
      | sys_child_id | user_vs_id | name |
      + ------------ ---------------------------------
      | 2001 | 1 | testname |
      + ------------ --------------------------------- 
    • 宛先の子テーブルのクエリ結果

      + ----------- ----------------------------------
      | sys_child_id | user_vs_id | name |
      + ------------ ---------------------------------
      | 2001 | 1 | testname |
      + ------------ --------------------------------- 

    結果は、ソースの子テーブルのデータが、ターゲットの子テーブルのデータと一致していることを示しています。

次に何をすべきか

  1. データ同期が完了したら、手順3で作成したデータ同期タスクを終了します。

    詳細については、「DTSインスタンスの終了」をご参照ください。

  2. オプションです。 トリガーを作成するためのステートメントを表示します。

    1. 手順1で作成したデータ移行タスクを見つけます。

    2. 管理するタスクのIDをクリックします。

    3. タスク管理 ページで、[スキーマMigration2] をクリックします。

    4. タスクの詳細 タブで、文を表示 をクリックします。

  3. ターゲットデータベースにログインし、トリガーを追加します。