全部產品
Search
文件中心

Data Transmission Service:配置同步或遷移觸發器的方式

更新時間:Nov 16, 2024

當您在同步或遷移資料時包含了觸發器(Trigger),且同步或遷移對象依賴的觸發器會更新某個表時,可能會因為目標庫過早同步或遷移觸發器,而導致源和目標庫的資料不一致。本文介紹如何配置同步或遷移觸發器的方式,以避免資料不一致的問題。

前提條件

  • 同步或遷移執行個體的源和目標資料庫均為指定類型的資料庫,例如RDS MariaDB同步到RDS MySQL。更多資訊,請參見支援的執行個體

  • 執行個體同時包含庫表結構和增量任務。

    • 遷移執行個體:遷移類型需勾選庫表結構遷移增量遷移

    • 同步執行個體:同步類型預設已勾選增量同步處理,還需勾選庫表結構同步

  • 在配置同步或遷移執行個體過程中,源庫對象的選擇粒度為整庫或Schema。

支援的執行個體

源庫

目標庫

說明

MySQL、PolarDB MySQL版、MariaDB

MySQL、PolarDB MySQL版、MariaDB

源庫觸發器遷移方式選擇為自動遷移,DTS會在目標庫的觸發器中加入觸發控制語句,DTS預設不觸發目標庫中的觸發器。更多資訊,請參見自動執行

SQL Server

SQL Server

源庫觸發器遷移方式選擇為自動遷移,DTS會自動將觸發器遷移至目標庫。

重要

若源庫的增量資料變更會導致源和目標庫的觸發器同時更新資料,則可能會使目標庫產生髒資料。建議選擇手動觸發遷移,並執行相應的後續操作。

說明
  • 若同步或遷移執行個體的源庫包含觸發器,且目標庫為PostgreSQL、PolarDB PostgreSQL版PolarDB PostgreSQL版(相容Oracle),DTS支援在執行個體運行過程中,避免因同步或遷移觸發器而導致的資料不一致問題。

    • 若執行個體使用的目標庫帳號有足夠的許可權(高許可權帳號或者super許可權帳號),觸發器同步或遷移到目標庫後,DTS會以Session層級自動禁用該觸發器。

    • 若執行個體使用的目標庫帳號許可權不足,您需要確保在執行個體運行期間目標資料庫中session_replication_role的參數值為replica

  • 若為其他包含觸發器的同步或遷移執行個體,操作方法請參見源庫存在觸發器時如何配置同步或遷移作業

執行個體配置

對象配置階段,選擇源庫觸發器遷移方式

說明

舊版配置頁需處於配置任務對象及高級配置階段。

  • 選擇手動觸發遷移時:DTS在結構遷移過程中遇到觸發器時,會產生object ignored due to incremental migration is enabled警示,而不會直接將其寫入目標庫。需要您在結束增量任務前,手動將源庫的觸發器同步或遷移到目標庫。詳情請參見手動觸發

  • 選擇自動遷移時:您無需額外操作。

手動觸發

說明

同步和遷移執行個體的操作方法類似,本操作以同步執行個體為例進行介紹。

  1. 進入目標地區的同步工作清單頁面(二選一)。

    通過DTS控制台進入

    1. 登入Data Transmission Service控制台

    2. 在左側導覽列,單擊資料同步

    3. 在頁面左上方,選擇同步執行個體所屬地區。

    通過DMS控制台進入

    說明

    實際操作可能會因DMS的模式和布局不同,而有所差異。更多資訊,請參見極簡模式控制台自訂DMS介面布局與樣式

    1. 登入Data Management服務

    2. 在頂部功能表列中,選擇整合與開發 > 資料轉送(DTS) > 資料同步

    3. 同步任務右側,選擇同步執行個體所屬地區。

  2. 單擊目標執行個體的ID。

  3. 可選:在左側導覽列,單擊任務管理

  4. 執行個體進展地區,單擊增量寫入模組。

  5. 基本資料頁簽中,單擊遷移trigger按鈕。

    說明

    若沒有遷移trigger按鈕,則表示在結構遷移過程中未發現觸發器。

    您可以在執行個體進展地區的結構遷移3模組,查看觸發器的同步結果。

自動執行

DTS會拷貝源庫觸發器的代碼,在觸發器對象頭部加入觸發控制語句後寫入目標庫,範例程式碼如下所示:

源庫觸發器:

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

目標庫觸發器:

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;

常見問題

  • 如何理解同時包含庫表結構和增量任務?

    若為同步執行個體,則表示同步類型同時勾選庫表結構同步增量同步處理;若為遷移執行個體,則表示遷移類型同時勾選庫表結構遷移增量遷移

  • 如何結束增量任務?

    結束、重設或釋放執行個體均可以結束增量任務。更多資訊,請參見結束DTS執行個體重設DTS執行個體釋放DTS執行個體