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

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

最終更新日:Mar 29, 2026

ソースデータベース内のトリガーが同期または移行対象のテーブルを更新すると、DTS は増分データフェーズより前にトリガーをターゲットデータベースにコピーする可能性があり、その結果、ソースとターゲットの間でデータの不整合が発生します。本トピックでは、この問題を防止するための DTS タスク実行時のトリガー対応方法について説明します。

前提条件

開始する前に、以下の点をご確認ください。

  • ソースおよびターゲットのデータベースタイプがサポートされています。詳細については、「サポートされるデータベースタイプ」セクションをご参照ください。

  • DTS インスタンスの設定時に、スキーマ同期/移行および増分データ同期/移行の両方が選択されていること:

    • データ移行: [スキーマ移行] および [増分データ移行][移行タイプ] として選択します。

    • データ同期:同期タイプ」では 増分データ同期 がデフォルトで選択されています。また、スキーマ同期 も選択してください。

  • ソースオブジェクト が、データベース全体またはスキーマ全体に設定されていること。

サポートされるデータベースタイプ

ソース宛先自動移行動作
MySQL、PolarDB for MySQL、ApsaraDB RDS for MariaDBMySQL、PolarDB for MySQL、ApsaraDB RDS for MariaDBDTS は、ターゲットデータベース内の各トリガーにトリガー制御文を追加します。この制御文により、DTS の書き込みフェーズ中にトリガーが実行されなくなります。詳細については、「自動移行の仕組み」をご参照ください。
SQL ServerSQL ServerDTS はトリガーをターゲットデータベースにコピーします。
重要

ソースデータベースにおける増分変更によって、ソースおよびターゲットの両方のデータベース内のトリガーが同時にデータを更新した場合、ターゲットデータベースにダーティデータが発生する可能性があります。SQL Server をソースとする場合は、「手動移行」を選択し、その後の操作を行ってください。

ターゲットデータベースが PostgreSQL、PolarDB for PostgreSQL、または PolarDB for PostgreSQL (Compatible with Oracle) の場合、DTS はデータの不整合を自動的に防止します。
DTS インスタンスが特権またはスーパーパーミッションを持つターゲットデータベースアカウントを使用している場合、DTS はトリガーの同期または移行後に、セッションレベルでトリガーを無効化します。
アカウントに十分な権限がない場合は、タスク実行中のみ、ターゲットデータベースで session_replication_role パラメーターを replica に設定してください。その他のトリガーを含むデータベースタイプについては、「トリガーを含むソースデータベース向けのデータ同期タスクの設定」をご参照ください。

移行方法の選択

DTS インスタンスの設定手順「オブジェクトの設定」で、「ソースデータベース内のトリガーの移行方法」を設定します。

以前の Data Management (DMS) コンソールバージョンを使用している場合、このオプションは「オブジェクトおよび高度な設定の設定」ステップに表示されます。
方法DTS の処理内容使用タイミング
自動移行トリガーをターゲットデータベースにコピーし、制御文を追加します。追加の操作は不要です。MySQL ファミリー系のソースで、トリガー制御機構が十分に機能する場合。
手動移行スキーマ移行時にトリガーをスキップし、「増分移行が有効であるため、オブジェクトが無視されました」というアラートを生成します。増分データ同期/移行が完了する前に、トリガーを手動で移行してください。SQL Server をソースとする場合。

自動移行の仕組み

自動移行」を選択すると、DTS はソースデータベースからトリガーのコードをコピーし、トリガーボディを制御文でラップしたうえで、変更後のトリガーをターゲットデータベースに書き込みます。

ソースデータベースのトリガー:

CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW
  BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
  END;

ターゲットデータベースのトリガー(DTS による変更後):

CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW
  BEGIN
    IF (SELECT @`__#aliyun_dts_writer#__) IS NULL THEN
        INSERT INTO test2 SET a2 = NEW.a1;
    END IF;
  END;

トリガーの手動移行

トリガーの手動移行手順は、手動同期の手順と同一です。以下に手動同期の例を示します。

  1. Data Management (DMS) コンソール にログインします。上部ナビゲーションバーで Data + AI をクリックします。左側のナビゲーションウィンドウで、DTS (DTS)データ同期 を選択します。

    新しい DTS コンソールの「データ同期タスク」ページに直接アクセスすることもできます。コンソールのレイアウトに関する情報は、「シンプルモード」および「DMS コンソールのレイアウトおよびスタイルのカスタマイズ」をご参照ください。
  2. 右側の「データ同期タスク」一覧で、データ同期インスタンスが存在するリージョンを選択します。

    新しい DTS コンソールでは、上部ナビゲーションバーからリージョンを選択します。
  3. DTS インスタンスを検索し、インスタンス ID をクリックします。

  4. (任意)左側のペインで タスク管理 をクリックします。

  5. 進行状況」セクションで、「増分書き込み」モジュールをクリックします。

  6. 基本情報」タブで、「トリガーの移行」をクリックします。

    トリガーの移行」が表示されない場合、スキーマ同期または移行時にトリガーが検出されていません。トリガー同期結果を確認するには、「進行状況」セクション内の「スキーマ移行3」モジュールを確認してください。

よくある質問

DTS インスタンスの設定時に、スキーマおよび増分同期/移行タイプをどのように選択すればよいですか?

データ同期タスクの場合、「スキーマ同期」および「増分データ同期」を「同期タイプ」として選択します。データ移行タスクの場合、「スキーマ移行」および「増分データ移行」を「移行タイプ」として選択します。

増分データ同期または移行を完了するにはどうすればよいですか?

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