全部產品
Search
文件中心

Data Transmission Service:常見問題

更新時間:Feb 08, 2025

您在使用Data Transmission Service時。如果收到DTS返回的錯誤資訊,可查閱常見報錯匹配解決方案。如果您沒有收到具體的錯誤資訊,請根據問題分類匹配問題和解決方案。

問題分類

常見問題分為如下幾種類型:

計費問題

DTS如何計費?

DTS提供訂用帳戶和隨用隨付兩種計費方式。關於計費方式的更多資訊,請參見計費概述

如何查看DTS賬單?

查看DTS賬單的操作,請參見查看賬單

執行個體暫停後是否還會計費?

  • 遷移執行個體暫停期間不收費。

  • 在資料同步執行個體暫停期間,無論資料庫是否可以正常串連,執行個體仍將繼續收取費用。這是因為在此期間,DTS僅暫停向目標庫中寫入資料,但仍然會消耗CPU、記憶體等資源,以嘗試進行持續地串連資料庫並拉取源庫的日誌,以便在重啟執行個體後能夠快速恢複運行。

為什麼資料同步的價格要高於資料移轉的價格?

因為資料同步具有更多的進階特性,例如支援線上調整同步對象、支援配置MySQL資料庫之間的雙向資料同步;且資料同步基於內網傳輸,可以保證更低的網路延時。

賬戶欠費有什麼影響?

賬戶欠費的影響,請參見到期或欠費說明

如何提前釋放訂用帳戶的任務?

先將訂用帳戶的任務轉換成隨用隨付的任務,再進行退訂。轉換方式,請參見轉換計費方式

訂用帳戶任務是否可以轉成隨用隨付?

可以。轉換方式,請參見轉換計費方式

隨用隨付任務是否可以轉成訂用帳戶?

資料同步或訂閱任務可以。轉換方式,請參見轉換計費方式

說明

資料移轉任務的付費方式僅支援為隨用隨付。

為什麼DTS任務突然開始收費了?

可能是因為執行個體的免費時間到期。DTS任務針對目標庫是阿里雲自研資料庫引擎的任務有一定的優惠政策的,一段時間內免費,若免費時間到期就會開始收費。

為什麼已經釋放的任務還在收費?

DTS隨用隨付的任務是按天推送賬單的,由於釋放任務的那一天使用了DTS,所以還會收取當天的費用。

隨用隨付是如何收費的?

DTS隨用隨付僅會在增量任務正常運行期間進行計費(包含增量同步處理任務暫停期間,不包含增量遷移任務暫停期間)。更多資訊,請參見計費方式

DTS是否收取流量費用?

部分DTS任務會收取公網流量和資料流量費用,與源庫和目標庫的地區無關。目標庫的接入方式公網IP的遷移任務會收取公網流量費用,按行抽樣進行全欄位校正模式的全量校正任務會根據校正的資料量收取資料流量費用。更多資訊,請參見計費項目

效能和規格問題

不同執行個體規格有什麼區別?

不同執行個體規格的區別,請參見資料移轉鏈路規格說明資料同步鏈路規格說明

是否支援升級執行個體規格?

支援。更多資訊,請參見升級執行個體的鏈路規格

是否支援降級執行個體規格?

目前僅同步執行個體支援。更多資訊,請參見降級執行個體的鏈路規格

是否支援降級執行個體規格?

DTS暫不支援降級執行個體規格。

同步或遷移資料所需時間是多久?

由於DTS的傳輸效能受DTS內部、源端和目標端資料庫執行個體的負載、待傳輸的資料量、DTS執行個體是否存在增量任務、網路等多種因素影響,所以無法預估DTS任務所需的時間,若對效能有較高要求,建議選擇效能上限較大的規格。關於規格的更多資訊,請參見資料移轉鏈路規格說明資料同步鏈路規格說明

如何查看資料移轉或資料同步任務的效能資訊?

查看效能的方法,請參見查看增量遷移鏈路狀態和效能查看同步鏈路狀態和效能

為什麼在控制台找不到指定的DTS執行個體?

可能原因:若指定的DTS執行個體為訂用帳戶執行個體,則該執行個體已到期釋放。

  • 帳號的資源群組選擇錯誤,建議選擇為帳號全部資源

  • 執行個體的地區選擇錯誤,請核實所選擇的地區是否為目標執行個體所屬的地區。

  • 執行個體的任務類型選擇錯誤,請核實當前工作清單頁面是否為目標執行個體的任務類型。例如,同步執行個體只會顯示在同步任務列表。

  • 執行個體因到期或欠費被釋放。DTS執行個體到期或欠費後,資料轉送任務將停止服務,如果7天內還未儲值成功,系統將釋放並刪除該執行個體,更多資訊請參見到期或欠費說明

預檢查問題

為什麼Redis逐出策略檢查項有警示?

如果目標端的資料逐出策略(maxmemory-policy)配置為noeviction以外的值,可能導致目標端的資料與源端不一致。關於資料逐出策略詳情,請參見Redis資料逐出策略介紹

增量資料移轉時Binlog相關的預檢查項失敗,如何處理?

檢查源庫Binlog是否正常,詳情請參見源庫Binlog檢查

資料庫連接問題

源端資料庫連接失敗,如何處理?

檢查源庫資訊和設定是否正常,詳情請參見源庫串連性檢查

目標端資料庫連接失敗,如何處理?

檢查目標庫資訊和設定是否正常,詳情請參見目標資料庫連接性檢查

源或目標執行個體位於DTS暫不支援的地區,如何進行資料移轉和同步?

  • 如果是資料移轉任務,您可以為資料庫執行個體(如RDS MySQL)申請公網地址,以公網IP接入,執行個體地區可以選擇DTS支援的地區,並將對應地區的DTS伺服器IP位址區段添加到執行個體的白名單中。需要添加的IP白名單,請參見添加DTS伺服器的IP位址區段

  • 如果是資料同步任務,由於資料同步暫不支援將資料庫執行個體作為公網IP接入,因此DTS暫不支援這些地區的資料同步。

資料同步問題

DTS支援哪些資料庫執行個體的同步?

DTS支援各種資料來源之間的資料同步,如關係型資料庫管理系統(RDBMS)、NoSQL資料庫、線上分析處理(OLAP)資料庫。支援同步的資料庫執行個體,請參見同步方案概覽

資料移轉和資料同步的區別是什嗎?

資料移轉和資料同步的區別如下表所示。

說明

自建資料庫:配置DTS執行個體時,接入方式不是雲執行個體的資料庫執行個體。自建資料庫包含第三方雲的資料庫執行個體、部署在您本地的資料庫、部署在ECS執行個體的資料庫。

對比項

資料移轉

資料同步

適用情境

主要用於上雲遷移,例如將本機資料庫、ECS上的自建資料庫或第三方雲資料庫遷移至阿里雲資料庫。

主要用於兩個資料來源之間的資料即時同步,適用於異地多活、資料災備、跨境資料同步、查詢與報表分流、雲BI及即時資料倉庫等情境。

支援的資料庫

請參見遷移方案概覽

說明

對於某些資料同步不支援的資料庫,您可以通過資料移轉的方式來實現資料同步。例如,單節點架構的MongoDB資料庫和OceanBase(MySQL模式)資料庫。

請參見同步方案概覽

支援的資料庫部署位置(接入方式)

  • 阿里雲執行個體

  • 有公網IP的自建資料庫

  • 通過資料庫網關DG接入的自建資料庫

  • 通過雲企業網CEN接入的自建資料庫

  • ECS上的自建資料庫

  • 通過專線/VPN網關/Smart Access Gateway接入的自建資料庫

  • 阿里雲執行個體

  • 通過資料庫網關DG接入的自建資料庫

  • 通過雲企業網CEN接入的自建資料庫

  • ECS上的自建資料庫

  • 通過專線/VPN網關/Smart Access Gateway接入的自建資料庫

說明

資料同步基於內網傳輸,可以保證更低的網路延時。

功能特性差異

  • 支援庫表列三級對象名映射。

  • 支援過濾待遷移的資料。

  • 支援選擇遷移的SQL操作類型,例如選擇僅遷移INSERT操作。

  • 支援讀取其他阿里雲帳號下的專用網路,通過該功能可以實現跨阿里雲帳號遷移專用網路下的自建資料庫。

  • 支援庫表列三級對象名映射。

  • 支援過濾待同步的資料。

  • 支援線上修改同步對象。

  • 支援MySQL等間的雙向同步。

  • 支援選擇同步的SQL操作類型,例如選擇僅同步INSERT操作。

計費方式

僅支援隨用隨付。

支援隨用隨付和訂用帳戶。

是否收費

包含增量遷移任務的遷移執行個體,才會產生相應的費用。

是。同步執行個體預設包含增量同步處理任務,所以同步執行個體必然會產生相應的費用。

計費規則

僅在增量資料移轉正常運行期間計費(不包含增量資料移轉暫停期間),結構遷移和全量資料移轉期間不計費。

  • 隨用隨付時,僅在增量資料同步正常運行期間計費(包含增量資料同步暫停期間),結構同步和全量資料同步期間不計費。

  • 訂用帳戶時,按照購買時選擇的配置和購買量一次性計費。

資料同步的工作原理是什嗎?

資料同步的工作原理,請參見產品架構及功能原理

如何計算同步延遲?

同步延遲是指同步到目標資料庫中的最新資料的時間戳記,與來源資料庫的目前時間戳之間的差值。單位為毫秒。

說明

正常情況的延遲在1000毫秒以內。

資料同步任務是否可以修改同步對象?

可以。修改同步對象的方法,請參見新增同步對象移除同步對象

資料同步任務是否可以增加新表進行同步?

可以。增加新表的方法,請參見新增同步對象

如何修改運行中的同步任務的表和欄位等同步對象?

當同步任務的全量同步階段結束,進入增量資料同步階段後可以修改同步對象。修改同步對象的方法,請參見新增同步對象移除同步對象

暫停同步任務後過一段時間再重啟,是否會導致資料不一致?

若同步任務暫停期間源庫有變化,則可能會導致源庫與目標庫資料不一致。待同步任務重啟並將增量資料同步到目標庫後,目標庫資料將與源庫一致。

刪除增量同步處理任務源庫中的資料,目標庫中已同步的資料是否會刪除?

若增量同步處理任務所需同步的DML操作沒有勾選delete,則目標庫中資料不會被刪除,否則目標庫中已同步的資料會被刪除。

Redis間的同步,目標Redis執行個體的資料會被覆蓋麼

相同Key的資料會被覆蓋。DTS會在預檢查階段對目標端進行檢查,如果目標端的資料不為空白會報錯。

同步任務是否支援過濾部分欄位或資料?

支援。通過映射功能可以過濾無需同步的列,通過指定SQL Where條件可以過濾待同步資料。更多資訊,請參見同步或遷移部分列通過SQL條件過濾任務資料

同步任務是否可以轉為遷移任務?

不可以,不同類型的任務不支援相互轉換。

是否可以只同步資料不同步結構?

可以。在配置同步任務步驟時,不勾選庫表結構同步即可。

資料同步執行個體的源和目標端資料不一致,可能原因有哪些?

資料不一致的可能原因如下:

  1. 配置任務時沒有清空目標端資料,且目標端有存量資料。

  2. 配置任務時只選擇了增量同步處理模組,沒有選擇全量同步模組。

  3. 配置任務時只選擇了全量同步模組,沒有選擇增量同步處理模組,且任務結束後源端資料有變更。

  4. 目標端有除了DTS任務以外的資料寫入。

  5. 增量寫入存在延遲,增量資料還沒有全部寫入目標端。

資料同步任務是否可以修改源庫在目標庫的名稱?

可以。修改源庫在目標庫名稱的方法,請參見設定同步對象在目標執行個體中的名稱

是否支援DML或DDL操作的即時同步?

支援,關聯式資料庫之間的資料同步支援的DML操作為INSERT、UPDATE、DELETE,支援的DDL操作為CREATE、DROP、ALTER、RENAME、TRUNCATE。

說明

不同情境下支援的DML或DDL操作有所區別,請在同步方案概覽中選擇符合業務情境的鏈路,在具體鏈路配置文檔中查看支援的DML或DDL操作。

唯讀執行個體是否可以作為同步任務的源執行個體?

同步任務預設包含增量資料同步,因此有如下兩種情況:

  • 執行個體為記錄交易記錄的唯讀執行個體(如RDS MySQL 5.7或8.0版本),可以作為源執行個體。

  • 執行個體為不記錄交易記錄的唯讀執行個體(如RDS MySQL 5.6版本),不可以作為源執行個體。

DTS是否支援分庫分表的資料同步?

支援,例如將MySQL、PolarDB MySQL中的分庫分表同步到AnalyticDB for MySQL中,以實現多表歸併。

為什麼同步任務結束後目標執行個體比源執行個體的資料量小?

若同步過程中進行了資料過濾,或者源執行個體內表片段較多,遷移完成後目標執行個體的資料量可能會小於源執行個體。

跨帳號資料同步任務,是否支援雙向同步?

當前僅RDS MySQL執行個體間、PolarDB MySQL版叢集間、Tair(企業版)執行個體間、ApsaraDB for MongoDB(複本集架構)間、ApsaraDB for MongoDB(分區叢集架構)間,支援跨帳號的雙向同步任務。

DTS是否支援跨境的雙向同步任務?

不支援。

為什麼雙向同步任務的一個資料庫中增加了記錄後,另一個資料庫裡沒有增加?

可能是未配置反向任務。

為什麼同步任務增量顯示一直沒有到100%?

DTS增量同步處理是持續將源端的變更即時同步到目標端,且不會主動結束,即不存在100%的完成狀態。如果您不需要繼續即時同步,請在DTS控制台結束任務。

為什麼增量同步處理任務不能同步資料?

如果DTS執行個體只配置了增量同步處理任務,則DTS只會同步任務啟動之後的增量資料,任務啟動前的資料不會同步至目標庫。建議配置任務時同時勾選增量同步處理庫表結構同步全量同步,以保障資料一致性。

同步RDS資料庫的全量資料時,是否會對源庫RDS的效能有影響?

會影響源庫的查詢效能。有如下三種方法可以減少DTS任務對源庫的影響:

  1. 提高源庫執行個體的規格。

  2. 先暫停DTS任務,等源庫負載降低後再重啟任務。

  3. 調小DTS任務的速率。調整速率的方法,請參見調整全量遷移速率

為什麼源庫為PolarDB-X 1.0的同步執行個體不顯示延遲?

源庫為PolarDB-X 1.0的執行個體是分布式任務,而DTS監控的指標只在子任務中存在,因此源為PolarDB-X 1.0的執行個體不顯示延遲資訊。您可以單擊執行個體ID,在執行個體任務管理子任務詳情中查看延遲資訊。

為什麼多表歸併任務報錯DTS-071001?

可能是在多表歸併任務運行時,在源庫進行了Online DDL操作,對源庫的表結構等進行了修改,且未手動在目標庫進行相應的修改。

在舊版控制台配置任務時添加白名單失敗,如何處理?

請使用新版控制台配置任務。

DTS資料同步過程中,源庫執行了DDL操作導致任務失敗,如何處理?

根據源庫執行的DDL操作,手動在目標端執行DDL後重啟任務。資料同步時,請勿對源庫的同步對象使用pt-online-schema-change等類似工具執行線上DDL變更,否則會導致同步失敗。如果除DTS以外的資料沒有寫入目標庫,您可以使用Data Management(Data Management)來執行線上DDL變更,或者可以通過修改同步對象移除受DDL影響的表。移除操作,請參見移除同步對象

DTS資料同步過程中,目標庫執行了DDL操作導致任務失敗,如何處理?

如果在DTS進行增量同步處理過程中刪除了目標庫中的某一個庫或表,導致任務異常,您可以採取如下兩種方案恢複任務:

  • 方法一:重新設定任務,待同步對象不選擇導致任務失敗的庫或表。

  • 方法二:修改同步對象,移除導致任務失敗的庫或表。具體操作,請參見移除同步對象

同步任務釋放後還可以恢複嗎?重新設定任務能否保證資料一致性?

同步任務釋放後不可以恢複。重新設定任務時,如果不選擇全量同步,在任務釋放到新任務啟動這段時間新增的資料無法同步到目標庫,無法保障資料一致性。如果業務對資料要求比較精確,您可以刪除目標庫的資料,然後重新設定同步任務,並在任務步驟同時選中庫表結構同步全量同步(預設已選中增量同步處理)。

DTS全量同步任務長時間沒進度,如何處理?

若待同步的表為無主鍵的表,全量同步會非常慢。建議為源庫待同步的表增加主鍵後再進行同步。

同名的表進行資料同步時,是否支援源表資料在目標表不存在時才進行傳輸?

支援。在配置任務時,您可以將目標已存在表的處理模式選擇為忽略報錯並繼續執行。表結構一致的情況下,在全量同步期間目標庫遇到與源庫主鍵的值相同的記錄時,源庫中的該條記錄不會同步至目標庫中。

如何配置跨帳號的同步任務?

您需要使用源執行個體所屬的阿里雲帳號配置RAM授權,然後使用目標執行個體所屬的阿里雲帳號(主帳號)配置DTS任務。更多資訊,請參見配置跨阿里雲帳號的任務的配置樣本。

無法選擇DMS LogicDB執行個體,如何處理?

請確保執行個體所屬的地區選擇正確,若還是不能選擇執行個體,則可能僅有一個執行個體,請繼續配置其他參數。

SQL Server為源的同步任務,是否支援同步函數?

不支援。若同步對象選擇的粒度為表,且其他對象(如視圖、觸發器、預存程序)也不會被同步至目標庫。

資料同步任務報錯,如何處理?

您可以根據報錯資訊,在常見報錯中查看解決方案。

同步任務如何開啟熱點合并?

請參考修改參數值trans.hot.merge.enable的值修改為true

源庫存在觸發器時如何進行同步?

當同步對象為整個庫,且庫中的觸發器(TRIGGER)會更新庫內某個表時,可能導致源和目標庫的資料不一致。同步操作,請參見源庫存在觸發器時如何配置同步或遷移作業

DTS是否支援同步sys庫和系統庫?

不支援。

DTS是否支援同步MongoDB的admin和local庫?

不支援,DTS不支援MongoDB的admin和local作為源和目標庫。

雙向同步任務的反向任務什麼時候才能配置?

雙向同步任務的反向任務需要正向的增量任務無延遲後才能配置。

PolarDB-X 1.0為源時,同步任務的源端PolarDB-X 1.0是否支援擴縮節點?

不支援。若源端PolarDB-X 1.0發生節點的擴縮容,您需要重新設定任務。

DTS同步到Kafka的資料可以保證唯一性嗎?

不可以。由於寫入到Kafka中的資料都是追加的形式,所以在DTS任務重啟或重複拉取到源端日誌的時候可能會有重複資料。DTS保證資料的等冪性,即資料是按順序進行排列的,重複資料的最新值會排在後面。

DTS資料同步是否支援RDS MySQL至AnalyticDB for MySQL

支援。配置方法,請參見RDS MySQL同步至雲原生資料倉儲 AnalyticDB MySQL 版 3.0

為什麼Redis間的同步任務不顯示全量同步?

Redis間的同步支援全量資料同步和增量資料同步,合并顯示為增量同步處理

全量同步可以跳過嗎?

可以。跳過全量同步後增量同步處理會繼續向下進行,但是可能會報錯,建議您不要跳過全量同步。

DTS是否支援定時自動同步?

DTS暫時還不支援定時啟動資料同步任務。

同步過程中會不會把表中的片段空間也一起同步過去?

不會。

從MySQL 8.0同步到MySQL 5.6需要注意什嗎?

您需要在MySQL 5.6中建立好資料庫後再進行同步操作。建議源和目標庫版本保持一致,或者從低版本同步到高版本以保障相容性。如為高版本同步至低版本,可能存在資料庫相容性問題。

是否可以將源庫中的帳號同步至目標庫?

當前僅RDS MySQL執行個體間的同步任務支援同步帳號,其餘同步任務暫不支援。

是否可以配置跨帳號的雙向同步任務?

當前僅RDS MySQL執行個體間、PolarDB MySQL版叢集間、Tair(企業版)執行個體間、ApsaraDB for MongoDB(複本集架構)間、ApsaraDB for MongoDB(分區叢集架構)間,支援跨帳號的雙向同步任務。

說明

沒有是否跨阿里雲帳號配置項的任務,您可以嘗試使用CEN實現跨帳號的雙向同步任務。更多資訊,請參見跨阿里雲帳號或跨地區訪問資料庫資源

訊息佇列Kafka版為目標端時的參數如何配置?

請根據實際情況進行配置,部分特殊參數的配置方法請參見配置訊息佇列Kafka版執行個體的參數

資料移轉問題

執行資料移轉任務後,源庫的資料是否還存在?

DTS資料移轉和同步是將源庫的資料複製到目標庫中,不會影響源端資料。

DTS支援哪些資料庫執行個體的遷移?

DTS支援各種資料來源之間的資料移轉,如關係型資料庫管理系統(RDBMS)、NoSQL資料庫、線上分析處理(OLAP)資料庫。支援的遷移執行個體,請參見遷移方案概覽

資料移轉的工作原理是什嗎?

資料移轉的工作原理,請參見產品架構及功能原理

資料移轉任務是否可以修改遷移對象?

不可以。

資料移轉任務是否可以增加新表進行遷移?

不可以。

如何修改運行中的遷移任務的表和欄位等遷移對象?

遷移任務不支援修改遷移對象。

暫停遷移任務後過一段時間再重啟,是否會導致資料不一致?

若遷移任務暫停期間源庫有變化,則可能會導致源庫與目標庫資料不一致。待遷移任務重啟並將增量資料移轉到目標庫後,目標庫資料將與源庫一致。

遷移任務是否可以轉為同步任務?

不可以,不同類型的任務不支援相互轉換。

是否可以只遷移資料不遷移結構?

可以。在配置遷移任務步驟時,不勾選庫表結構遷移即可。

資料移轉執行個體的源和目標端資料不一致,可能原因有哪些?

資料不一致的可能原因如下:

  1. 配置任務時沒有清空目標端資料,且目標端有存量資料。

  2. 配置任務時只選擇了增量遷移模組,沒有選擇全量遷移模組。

  3. 配置任務時只選擇了全量遷移模組,沒有選擇增量遷移模組,且任務結束後源端資料有變更。

  4. 目標端有除了DTS任務以外的資料寫入。

  5. 增量寫入存在延遲,增量資料還沒有全部寫入目標端。

資料移轉任務是否可以修改源庫在目標庫的名稱?

可以。修改源庫在目標庫名稱的方法,請參見庫表列映射

是否支援同一執行個體內的資料移轉?

支援。同一執行個體內資料移轉的方法,請參見不同庫名間的資料同步或遷移

是否支援DML或DDL操作的即時移轉?

支援,關聯式資料庫之間的資料支援的DML操作為INSERT、UPDATE、DELETE,支援的DDL操作為CREATE、DROP、ALTER、RENAME、TRUNCATE。

說明

不同情境下支援的DML或DDL操作有所區別,請在遷移方案概覽中選擇符合業務情境的鏈路,在具體鏈路配置文檔中查看支援的DML或DDL操作。

唯讀執行個體是否可以作為遷移任務的源實

若遷移任務不需要進行增量資料移轉,則唯讀執行個體可以作為源執行個體;若遷移任務需要進行增量資料移轉,有如下兩種情況:

  • 執行個體為記錄交易記錄的唯讀執行個體(如RDS MySQL 5.7或8.0版本),可以作為源執行個體。

  • 執行個體為不記錄交易記錄的唯讀執行個體(如RDS MySQL 5.6版本),不可以作為源執行個體。

DTS是否支援分庫分表的資料移轉?

支援,例如將MySQL、PolarDB MySQL中的分庫分表遷移到AnalyticDB for MySQL中,以實現多表歸併。

遷移任務是否支援過濾部分欄位或資料?

支援。通過映射功能可以過濾無需遷移的列,通過指定SQL Where條件可以過濾待遷移資料。更多資訊,請參見同步或遷移部分列過濾待遷移資料

為什麼遷移任務結束後目標執行個體比源執行個體的資料量小?

若遷移過程中進行了資料過濾,或者源執行個體內表片段較多,遷移完成後目標執行個體的資料量可能會小於源執行個體。

為什麼遷移任務顯示已完成的值超過總數?

顯示的總數為預估值,在遷移任務完成後會將總數調整為準確值。

資料移轉時目標資料庫新增increment_trx表的作用是什嗎?

資料移轉時目標資料庫新增一個increment_trx表,是DTS增量遷移在目標執行個體中建立的位點表,主要用於記錄增量遷移的位點,解決任務異常重啟後的斷點續傳問題。在遷移過程中請勿刪除,否則會導致遷移失敗。

資料移轉任務在全量遷移階段是否支援斷點續傳?

支援。在全量遷移階段暫停任務後重啟任務,任務會從已經遷移完成的位置開始繼續遷移,不需要重新開始。

如何將非阿里雲執行個體遷移到阿里雲?

將非阿里雲執行個體遷移到阿里雲的方法,請參見從第三方雲遷移至阿里雲

如何將本地Oracle資料庫遷移到PolarDB?

將本地Oracle資料庫遷移到PolarDB的方法,請參見自建Oracle遷移至PolarDB PostgreSQL版(相容Oracle)

全量遷移階段沒完成的資料移轉任務是否可以暫停?

可以。

如何將RDS MySQL部分資料移轉到自建MySQL?

您可以在配置遷移任務過程中,根據需求在源庫對象中選擇待遷移的對象或在已選擇對象中進行過濾。MySQL間的遷移操作類似,您可以參考自建MySQL遷移至RDS MySQL進行操作 。

同一個阿里雲帳號下的RDS執行個體如何遷移?

DTS支援RDS執行個體之間的遷移和同步,配置方法請參見遷移方案概覽中的相關配置文檔。

遷移任務啟動後源庫就有IOPS警示,此時如何保證源庫業務穩定?

DTS任務運行時,若源庫執行個體負載比較大,有如下三種方法可以減少DTS任務對源庫的影響:

  1. 提高源庫執行個體的規格。

  2. 先暫停DTS任務,等源庫負載降低後再重啟任務。

  3. 調小DTS任務的速率。調整速率的方法,請參見調整全量遷移速率

為什麼資料移轉任務無法選擇名為test的資料庫?

DTS資料移轉不支援遷移系統資料庫,請選擇業務自建的資料庫進行遷移。

為什麼源庫為PolarDB-X 1.0的遷移執行個體不顯示延遲?

源庫為PolarDB-X 1.0的執行個體是分布式任務,而DTS監控的指標只在子任務中存在,因此源為PolarDB-X 1.0的執行個體不顯示延遲資訊。您可以單擊執行個體ID,在執行個體任務管理子任務詳情中查看延遲資訊。

為什麼DTS無法遷移MongoDB資料庫?

可能是因為待遷移的資料庫為local或者admin,DTS不支援MongoDB的admin和local作為源和目標庫。

為什麼多表歸併任務報錯DTS-071001?

可能是在多表歸併任務運行時,在源庫進行了Online DDL操作,對源庫的表結構等進行了修改,且未手動在目標庫進行相應的修改。

在舊版控制台配置任務時添加白名單失敗,如何處理?

請使用新版控制台配置任務。

DTS資料移轉過程中,源庫執行了DDL操作導致任務失敗,如何處理?

根據源庫執行的DDL內容,手動在目標端執行DDL後重啟任務。資料移轉時,請勿對源庫的遷移對象使用pt-online-schema-change等類似工具執行線上DDL變更,否則會導致遷移失敗。如果除DTS以外的資料沒有寫入目標庫,您可以使用Data Management(Data Management)來執行線上DDL變更。

DTS資料移轉過程中,目標庫執行了DDL操作導致任務失敗,如何處理?

如果在DTS進行增量遷移過程中刪除了目標庫中的某一個庫或表,導致任務異常。您可以重新設定任務,待遷移對象不選擇導致任務失敗的庫或表。

遷移任務釋放後還可以恢複嗎?重新設定任務能否保證資料一致性?

遷移任務釋放後不可以恢複。重新設定任務時,如果不選擇全量遷移,在任務釋放到新任務啟動這段時間新增的資料無法遷移到目標庫,無法保障資料一致性。如果業務對資料要求比較精確,您可以刪除目標庫的資料,然後重新設定遷移任務,並在任務步驟同時選中庫表結構遷移增量遷移全量遷移

DTS全量遷移任務長時間沒進度,如何處理?

若待遷移的表為無主鍵的表,全量遷移會非常慢。建議為源庫待遷移的表增加主鍵後再進行遷移。

同名的表進行資料移轉時,是否支援源表資料在目標表不存在時才進行傳輸?

支援。在配置任務時,您可以將目標已存在表的處理模式選擇為忽略報錯並繼續執行。表結構一致的情況下,在全量遷移期間目標庫遇到與源庫主鍵的值相同的記錄時,源庫中的該條記錄不會遷移至目標庫中。

如何配置跨帳號的遷移任務?

您需要使用源執行個體所屬的阿里雲帳號配置RAM授權,然後使用目標執行個體所屬的阿里雲帳號(主帳號)配置DTS任務。更多資訊,請參見配置跨阿里雲帳號的任務的配置樣本。

資料移轉任務如何串連本機資料庫?

您可以將本機資料庫的接入方式選擇為公網IP來配置遷移任務。樣本操作,請參見自建MySQL遷移至RDS MySQL

資料移轉失敗並提示DTS-31008,如何處理?

您可以單擊查看原因或者根據報錯資訊在常見報錯中查看解決方案。

使用專線接入自建資料庫時網路不通,如何處理?

請檢查專線是否正確配置了DTS相關的IP白名單。需添加的IP白名單清單,請參見將DTS伺服器的IP位址區段添加到自建資料庫的IP白名單

SQL Server為源的遷移任務,是否支援遷移函數?

不支援。若遷移對象選擇的粒度為表,且其他對象(如視圖、觸發器、預存程序)也不會被遷移至目標庫。

DTS全量遷移速度慢,如何處理?

可能是需要遷移的資料量比較大,請耐心等待。您可以進入任務詳情頁面,在任務管理全量遷移模組查看遷移進度。

結構遷移報錯,如何處理?

單擊執行個體ID,進入任務詳情頁面,在任務管理中查看結構遷移模組的具體報錯資訊,然後針對具體報錯資訊進行解決。常見報錯解決方案,請參見常見報錯

庫表結構遷移和全量遷移是否收費?

不收費。更多收費資訊,請參見計費項目

Redis間的資料移轉任務,目標端的zset資料是否會被覆蓋?

目標端的zset會被覆蓋。若目標端已經存在與源端相同的key,DTS會先刪除目標端對應key的zset,然後將源端zset集合中的每個對象zadd到目標端。

全量遷移對源庫有什麼影響?

DTS全量遷移的流程是先進行資料切片,再對切片範圍內的資料進行讀取和寫入。對於源庫,在切片過程中會使源庫的IOPS升高;在對切片範圍內資料讀取的過程中,對源庫的IOPS、CachePool、源庫出口頻寬會造成一定的影響。結合DTS的實踐經驗,這些影響均可忽略。

PolarDB-X 1.0為源時,遷移任務的源端PolarDB-X 1.0是否支援擴縮節點?

不支援。若源端PolarDB-X 1.0發生節點的擴縮容,您需要重新設定任務。

DTS遷移到Kafka的資料可以保證唯一性嗎?

不可以。由於寫入到Kafka中的資料都是追加的形式,所以在DTS任務重啟或重複拉取到源端日誌的時候可能會有重複資料。DTS保證資料的等冪性,即資料是按順序進行排列的,重複資料的最新值會排在後面。

先配置一個全量遷移任務,再配置增量資料移轉任務,是否會出現資料不一致?

可能會出現資料不一致。遷移任務單獨配置增量資料移轉時,增量遷移任務啟動後才開始遷移資料,在增量遷移任務啟動之前,源執行個體產生的增量資料都不會被同步到目標執行個體。如果需要進行不停機遷移,建議配置任務時,遷移類型選擇結構遷移、全量資料移轉及增量資料移轉。

配置遷移增量任務是否需要勾選庫表結構遷移?

結構遷移是在資料移轉開始前,先將遷移對象的定義遷移到目標執行個體,例如將表A的表定義遷移到目標執行個體。如果需要進行增量遷移,為了保證遷移資料一致性,建議將庫表結構遷移、全量資料移轉及增量資料移轉全部勾選上。

為什麼將自建資料庫遷移到RDS過程中,RDS使用的儲存空間會比來源資料庫大?

因為DTS進行的是邏輯遷移,它是將待遷移資料封裝成SQL後,遷移到目標RDS執行個體中的。此時會在目標RDS執行個體中產生Binlog資料,所以遷移過程中,RDS使用的儲存空間可能比來源資料庫大。

DTS是否支援VPC網路下的MongoDB的遷移?

支援,DTS當前已經支援VPC網路的ApsaraDB for MongoDB作為遷移的來源資料庫。

資料移轉期間如果來源資料庫出現資料變化,遷移資料會產生什麼結果?

如果遷移任務配置了庫表結構遷移、全量遷移、增量遷移,那麼遷移期間來源資料庫出現的資料變化,都會被DTS遷移到目標庫。

釋放已完成的遷移任務,是否會影響被遷移資料庫的使用?

不會影響。遷移任務完成後(運行狀態已完成),您可以放心釋放該遷移任務。

DTS是否支援MongoDB增量遷移?

支援。相關配置案例,請參見遷移方案概覽

遷移任務的源執行個體為RDS執行個體和以公網IP接入的自建資料庫執行個體有什麼區別?

配置遷移任務如果選擇RDS執行個體時,那麼當RDS執行個體發生DNS修改,網路類型切換等變更時,DTS遷移任務可以自適應,有效保證鏈路可靠性。

DTS是否支援VPC內的ECS上的自建資料庫遷移到RDS執行個體?

支援。

  • 若源ECS執行個體和目標RDS執行個體在相同地區,DTS可以直接存取VPC內ECS執行個體上的自建資料庫。

  • 若源ECS執行個體和目標RDS執行個體在不同的地區,ECS執行個體需要掛載Elastic IP Address,配置遷移任務時,源執行個體選擇ECS執行個體,DTS會自動使用ECS執行個體的Elastic IP Address訪問ECS執行個體上的資料庫。

DTS遷移過程中,是否會鎖表?對來源資料庫是否有影響?

DTS在進行全量資料移轉和增量資料移轉的過程中,均不會對源端資料庫進行鎖表。在全量資料移轉和增量資料移轉的過程中,遷移源端的資料表均可以正常讀寫訪問。

DTS進行RDS遷移時,是從RDS的主庫還是備庫擷取資料?

DTS進行資料移轉時,是從RDS的主庫上拉取資料。

DTS是否支援定時自動遷移?

DTS暫時還不支援定時啟動資料移轉任務。

DTS是否支援VPC模式下的RDS執行個體的資料移轉?

支援,配置遷移任務時,直接配置RDS執行個體ID即可。

DTS同一帳號或跨帳號遷移、同步時,對於ECS、RDS執行個體是走內網還是公網?是否會收取流量費用?

DTS進行同步或遷移任務時,使用的網路(內網或公網)與是否跨帳號無關,是否收取流量費用取決於任務類型。

  • 使用的網路

    • 遷移任務:如果是進行同一個地區內部的資料移轉,那麼DTS會使用內網串連ECS、RDS執行個體。如果是進行跨地區的遷移,那麼DTS會使用外網串連源執行個體(ECS、RDS),使用內網串連目標RDS執行個體。

    • 同步任務:使用內網。

  • 流量費用

    • 遷移任務:收取公網出雲流量費用,其他類型均的DTS執行個體不收取流量費用。公網出雲流量費用,是指目標資料庫執行個體的接入方式公網IP時產生的流量費用。

    • 同步任務:不收取流量費用。

使用DTS進行資料移轉,來源資料庫的資料會不會在遷移後被刪除掉?

不會,DTS進行資料移轉時,實際是將來源資料庫的資料複製一份到目標庫,不會對來源資料庫的資料有影響。

DTS在執行RDS執行個體間的資料移轉時,是否可以指定遷移目標庫的名稱?

可以。您可以在執行RDS執行個體間的資料移轉時,使用DTS提供的庫名映射功能來指定遷移目標庫的名稱,詳情請參見不同庫名間的資料同步或遷移

DTS遷移任務的源端無法串連ECS執行個體,如何處理?

可能是ECS執行個體未開放公網IP,請給ECS執行個體綁定彈性IP後重試。綁定彈性IP的方法,詳情請參見Elastic IP Address

為什麼Redis間的遷移任務不顯示全量遷移?

Redis間的遷移支援全量資料移轉和增量資料移轉,合并顯示為增量遷移

全量遷移可以跳過嗎?

可以。跳過全量遷移後增量遷移會繼續向下進行,但是可能會報錯,建議您不要跳過全量遷移。

叢集版的Redis是否支援以公網IP接入DTS?

不支援,當前僅單機版的Redis支援以公網IP接入DTS的遷移執行個體。

從MySQL 8.0遷移到MySQL 5.6需要注意什嗎?

您需要在MySQL 5.6中建立好資料庫後再進行遷移操作。建議源和目標庫版本保持一致,或者從低版本遷移到高版本以保障相容性。如果是高版本遷移至低版本,可能存在資料庫相容性問題。

是否可以將源庫中的帳號遷移至目標庫?

當前僅RDS MySQL執行個體間的遷移任務支援遷移帳號,其餘遷移任務暫不支援。

訊息佇列Kafka版為目標端時的參數如何配置?

請根據實際情況進行配置,部分特殊參數的配置方法請參見配置訊息佇列Kafka版執行個體的參數

如何定時全量遷移?

您可以通過Data Integration功能的調度策略配置,定期將源庫中的結構和存量資料移轉至目標庫中。更多資訊,請參見配置RDS MySQL間的Data Integration任務

是否支援將ECS自建的SQL Server遷移至本地自建的SQL Server?

支援。本地自建的SQL Server需要接入到阿里雲,詳情請參見準備工作概覽

是否支援遷移其他雲的PostgreSQL資料庫?

當其他雲的PostgreSQL資料庫需允許DTS通過公網訪問時,支援通過DTS遷移資料。

說明

若PostgreSQL的版本低於10.0,則不支援增量遷移。

資料訂閱問題

資料訂閱的工作原理是什嗎?

資料訂閱的工作原理,請參見產品架構及功能原理

資料訂閱任務到期後,消費組是否會被刪除?

DTS資料訂閱到期後,資料消費組會保留7天。執行個體到期超過7天未續約會被釋放,對應的消費組也會被刪除。

唯讀執行個體是否可以作為訂閱任務的源執行個體?

有如下兩種情況:

  • 執行個體為記錄交易記錄的唯讀執行個體(如RDS MySQL 5.7或8.0版本),可以作為源執行個體。

  • 執行個體為不記錄交易記錄的唯讀執行個體(如RDS MySQL 5.6版本),不可以作為源執行個體。

如何消費訂閱的資料?

詳情請參見消費訂閱資料

為什麼使用資料訂閱功能傳輸資料後,日期資料格式發生變化?

DTS預設日期資料存放區格式為YYYY:MM:DDYYYY-MM-DD是展現出來的格式,實際儲存是YYYY:MM:DD格式。所以傳輸寫入的資料格式無論是哪一種,最終都要統一轉化為預設格式。

如何排查訂閱任務問題?

排查訂閱任務的方法,請參見排查訂閱任務問題

SDK正常下載資料過程中突然暫停且不能訂閱到資料,如何處理?

請排查SDK代碼中是否調用ackAsConsumed介面彙報消費位點。如果不調用ackAsConsumed彙報位點,那麼SDK內部設定的Record的緩衝空間資料就不會刪除,當緩衝全部被佔用時,就不能拉取新的資料,從而會出現SDK暫停且不能訂閱資料。

SDK重新運行後不能成功訂閱資料,如何處理?

在啟動SDK之前,請先修改消費位點,使消費位點在資料範圍內。修改消費位點的方法,請參見儲存和查詢消費位點

用戶端如何指定時間點進行資料消費?

在消費訂閱資料時,填寫initCheckpoint參數即可指定時間點。更多資訊,請參見使用SDK範例程式碼消費訂閱資料

DTS訂閱任務堆積了,如何重設位點?

  1. 根據SDK用戶端的使用模式,開啟對應的代碼檔案。例如,DTSConsumerAssignDemo.java或DTSConsumerSubscribeDemo.java。

    說明

    更多資訊,請參見使用SDK範例程式碼消費訂閱資料

  2. 在訂閱工作清單的數據範圍列,查看目標訂閱執行個體位點的可修改範圍。

  3. 根據實際情況選擇新的消費位點,並轉化為Unix時間戳記。

  4. 使用轉化後的新消費位點,替換代碼檔案中的舊消費位點(initCheckpoint參數)。

  5. 重新運行用戶端。

在用戶端使用訂閱任務的VPC地址串連不上,如何處理?

可能是用戶端所在機器不在配置訂閱任務時指定的VPC裡(如用戶端VPC更換),您需要重新設定任務。

為什麼控制台上的消費位點要比資料範圍最大值還要大?

因為訂閱通道的資料範圍更新頻率為1分鐘,而消費位點的更新頻率為10秒。所以如果即時消費的話,消費位點的值可能比訂閱通道資料範圍的最大值要大。

DTS如何保證SDK訂閱到的資料是一個完整的事務?

DTS根據提供的消費位點,服務端會搜尋這個消費位點對應的完整事務,從整個事務的BEGIN語句開始向下遊分發資料,所以可以接受到完整的事務內容。

如何確認資料是否正常消費?

如果資料正常消費,那麼資料轉送控制台的消費位點就會正常往前推進。

資料訂閱SDK中usePublicIp=true是什麼意思?

資料訂閱SDK配置usePublicIp=true,表示SDK通過公網訪問DTS訂閱通道。

資料訂閱任務源庫RDS主備切換或主庫重啟時,是否會影響業務?

RDS MySQL、RDS PostgreSQL、PolarDB MySQL、PolarDB PostgreSQL和PolarDB-X 1.0(儲存類型為RDS MySQL)執行個體發生主備切換或重啟時,DTS都會自適應切換,業務不會受到影響。

RDS是否有可以實現自動的Binlog下載,下載到本機伺服器?

DTS的資料訂閱支援RDS Binlog日誌的即時訂閱,可以開通DTS的資料訂閱服務,通過DTS的SDK訂閱RDS Binlog資料並即時同步到本機伺服器中。

資料訂閱的即時增量資料,是只指新增資料,還是包含修改的資料?

DTS的資料訂閱可以訂閱的增量資料包括:所有的增刪改以及結構變更(DDL)。

資料訂閱任務消費端有一條記錄沒有ACK,SDK重啟後為什麼會收到重複資料?

當SDK有message沒有ACK時,服務端會將buffer裡的所有訊息推送完成,當推送完後,SDK不能再接收到訊息。此時,服務端儲存的消費位點為未ACK之前的最後一條message的位點。當SDK重啟時,為了保證訊息不丟,服務端會從未ACK前一條message對應的位點開始重新推送資料,所以SDK此時會重複收取一部分訊息。

資料訂閱消費位點多久更新一次,為什麼重啟SDK時,有時候會重複接收資料?

資料訂閱SDK消費完每條message,必須調用ackAsConsumed向服務端回複ACK。服務端接收到ACK後,會更新記憶體中的消費位點,然後每間隔10秒持久化一次消費位點。在最新ACK未持久化時重啟SDK,為保證訊息不丟失,服務端會從上一個持久化的消費位點開始推送訊息,此時SDK會收到重複訊息。

一個資料訂閱執行個體,可以訂閱多個RDS執行個體嗎?

不可以,當前一個資料訂閱執行個體只能訂閱一個RDS執行個體。

資料訂閱執行個體會出現資料不一致嗎?

不會,資料訂閱任務只擷取源庫的變更,不涉及資料不一致。若用戶端消費的資料與您期望的不一致,請自行排查。

消費訂閱資料時出現UserRecordGenerator如何處理?

當消費訂閱資料時,若出現如UserRecordGenerator: haven't receive records from generator for 5s的資訊,你需要檢查消費的位點是否在增量資料擷取模組的位點範圍內,並確保消費端正常運行。

一個Topic是否支援建立多個partition?

不支援。DTS為了保證訊息的全域有序,每個訂閱Topic只有一個partition,且固定分配至partition 0中。

資料訂閱的SDK是否支援Go語言?

支援,範例程式碼請參見dts-subscribe-demo

資料訂閱的SDK是否支援Python語言?

支援,範例程式碼請參見dts-subscribe-demo

flink-dts-connector是否支援多線程並發消費訂閱資料?

不支援。

其他問題

資料同步或遷移任務運行時,修改目標庫資料會有什麼影響?

  • 目標庫修改資料有可能導致DTS任務失敗。資料移轉或同步過程中,如果對目標庫待遷移或同步的對象執行操作,可能會導致主鍵衝突,無更新記錄等情況,最終DTS任務失敗。但是可以執行不會導致DTS任務中斷的操作,比如在目標執行個體建立一個表並執行寫入,因為不在該表遷移或同步對象表中,因此不會引導致DTS失敗。

  • 由於DTS是讀取源執行個體資料庫資訊,將其全量資料、結構資料、增量資料移轉或同步到目標執行個體中,因此任務進行時目標庫修改資料可能會被來自源庫遷移或同步的資料覆蓋。

資料同步或遷移任務運行時,源庫和目標庫是否可以同時寫入資料?

可以,但在DTS執行個體運行期間,若存在除DTS外的其他資料來源向目標庫寫入資料,則可能會導致目標庫資料或DTS執行個體異常。

DTS執行個體運行中,如果修改源庫或目標庫的密碼會如何?

DTS執行個體會報錯中斷。您可以單擊執行個體ID進入執行個體詳情,在基本資料頁簽中修改源端或目標端的帳號密碼。然後進入任務管理頁簽報錯的執行個體進展模組,在基本資料中重啟該模組。

為什麼有的源庫或目標庫的接入方式沒有公網IP?

與源庫或目標庫的接入方式、任務類型和資料庫類型有關,例如對於MySQL資料庫類型的源端,遷移和訂閱任務可以選擇公網IP接入,而同步任務是不支援公網IP接入。

是否支援跨帳號的資料移轉或資料同步?

支援。配置方式,請參見配置跨阿里雲帳號的任務

源庫和目標庫可以是同一個資料庫執行個體嗎?

可以。若您的源庫與目標庫為同一個資料庫執行個體,建議您使用映射功能對資料進行隔離和區分,否則可能會導致DTS執行個體失敗或資料丟失。更多資訊,請參見庫表列名映射

為什麼Redis為目標庫的任務會報錯OOM command not allowed when used memory > 'maxmemory'?

可能是因為目標Redis執行個體的儲存空間不足。若目標Redis執行個體的架構類型為叢集版,也可能是某一個分區達到了記憶體上限,您需要升級目標執行個體的規格。

AliyunDTSRolePolicy權限原則是什麼,有什麼用?

AliyunDTSRolePolicy策略用於當前帳號或跨帳號訪問雲帳號下的RDS、ECS等雲資源,在執行資料移轉、同步或訂閱任務的配置時可調用相關雲資源資訊。更多資訊,請參見授予DTS訪問雲資源的許可權

如何進行RAM角色授權?

在您首次登入控制台時,DTS會要求您授權AliyunDTSDefaultRole角色,請根據控制台提示跳轉到RAM授權頁面進行授權。更多資訊,請參見授予DTS訪問雲資源的許可權

重要

您需要使用阿里雲帳號(主帳號)登入控制台進行操作。

DTS任務填寫的帳號密碼可以修改嗎?

DTS任務填寫的資料庫帳號密碼支援修改,您可以單擊執行個體ID進入執行個體詳情,在基本資料頁簽中單擊修改密碼修改源端或目標端的帳號密碼。

重要

DTS任務的系統帳號密碼不支援修改。

MaxCompute表為什麼有base尾碼?

  1. 結構初始化。

    DTS將源庫中待同步表的結構定義資訊同步至MaxCompute中,初始化時DTS會為表名增加_base尾碼。例如源表為customer,那麼MaxCompute中的表即為customer_base。

  2. 全量資料初始化。

    DTS將源庫中待同步表的存量資料,全部同步至MaxCompute中的目標表名_base表中(例如從源庫的customer表同步至MaxCompute的customer_base表),作為後續增量同步處理資料的基準資料。

    說明

    該表也被稱為全量基準表。

  3. 增量資料同步。

    DTS在MaxCompute中建立一個增量日誌表,表名為同步的目標表名_log,例如customer_log,然後將源庫產生的增量資料即時同步到該表中。

    說明

    關於增量日誌表結構的詳細資料,請參見增量日誌表結構定義說明

擷取不到Kafka的topic,如何處理?

可能是當前配置的Kafka Broker沒有topic資訊,請參考如下命令檢查topic的Broker分布情況:

./bin/kafka-topics.sh --describe --zookeeper zk01:2181/kafka --topic topic_name

是否可以在本地搭建一個MySQL執行個體,作為RDS執行個體的從庫?

可以,您可以使用Data Transmission Service的資料移轉功能,配置RDS到本地自建MySQL執行個體的資料即時同步,實現主從架構。

如何將RDS執行個體的資料複製到新建立的RDS執行個體中?

可以使用DTS資料移轉功能,遷移任務的遷移類型選擇庫表結構遷移、全量遷移、增量遷移。配置方法,請參見RDS執行個體間的資料移轉

DTS是否支援在一個RDS執行個體中,複製出一個除庫名外一樣的資料庫?

支援,DTS提供的對象名映射功能,可以實現在一個RDS執行個體內複製出一個除庫名外一樣的資料庫。

DTS執行個體總是顯示延遲,如何處理?

可能原因如下:

  • 源端資料庫執行個體使用不同帳號建立了多個DTS任務,導致執行個體的負載過高,請使用同一個帳號建立任務。

  • 目標端資料庫執行個體的記憶體不足,請做好業務安排後重啟目標庫執行個體。若無法解決問題,請升級目標端執行個體規格或進行主備切換。

    說明

    主備切換過程中可能導致網路閃斷,請確保您的應用程式具有自動重連機制。

在舊版控制台同步或遷移到目標庫後欄位都是小寫,如何處理?

請使用新版控制台配置任務,並使用目標庫對象名稱大小寫策略功能。更多資訊,請參見目標庫對象名稱大小寫策略

DTS任務暫停後還能恢複嗎?

一般情況下,暫停時間不超過24小時的DTS任務可以正常恢複;若資料量較小,則暫停時間不超過7天的DTS任務可以正常恢複。建議暫停時間不要超過6小時。

為什麼任務暫停後重啟,進度會從0開始?

任務重啟後,DTS會重新查詢已經完成的資料,然後繼續處理剩餘資料。在此過程中,任務進度可能會由於延遲而和實際有差異。

DDL無鎖變更的原理是什嗎?

DDL無鎖變更的主要原理,請參見主要原理

DTS是否支援暫停某個表的同步或遷移?

不支援。

如果任務失敗需要重新購買嗎?

不需要,可以在原任務上重新設定。

多個任務都往同一個目標寫資料會怎麼樣?

可能會導致資料不一致。

為什麼執行個體續約後仍然是鎖定狀態?

續約鎖定的DTS執行個體後,需要一段時間執行個體才可以解鎖,請耐心等待。

DTS執行個體是否支援修改資源群組?

支援。您可以進入執行個體的基本資料頁面,在基本資料地區單擊資源群組名稱後的修改進行變更。

DTS是否有Binlog分析工具?

DTS沒有Binlog分析工具。

增量任務一直顯示95%,是否正常?

正常。增量任務是持續進行、不會完成的,進度不會到100%。

為什麼DTS任務超過7天還沒被釋放?

偶爾會有凍結的任務儲存時間超過7天的情況。

已建立好的任務是否支援修改連接埠?

不支援。

DTS任務中的PolarDB-X 1.0下面掛載的RDS MySQL是否可以降配?

不建議降配,降配會觸發主備切換,可能會導致資料丟失。

DTS任務運行期間,源或目標端執行個體是否可以升配或降配?

DTS任務運行期間,源或目標端執行個體升配或降配,可能會導致任務延遲或資料丟失,不建議對源或目標端執行個體變更配置。

DTS任務對源端和目標端執行個體有什麼影響?

全量資料初始化時將佔用源庫和目標庫一定的讀寫資源,可能會導致資料庫的負載上升,建議在業務低峰期執行全量任務。

DTS任務的延遲大概是多少?

DTS任務延遲時間無法估算,因為延遲受限於源執行個體的運行負載、傳輸網路的頻寬、網路延時、目標執行個體寫入效能等多種因素的影響。

若資料轉送控制台自動跳轉至Data Management控制台,如何返回舊版資料轉送控制台?

您可以在Data Management控制台右下角的jiqiren中單擊返回舊版,返回至舊版資料轉送控制台。

DTS是否支援資料加密功能?

DTS支援通過SSL加密串連安全地訪問源庫或目標庫,以便從源庫讀取資料或在目標庫中寫入資料,但不支援在資料轉送過程中進行資料轉送加密。

DTS是否支援ClickHouse為源或目標?

不支援。

DTS是否支援AnalyticDB for MySQL 2.0為源或目標?

AnalyticDB for MySQL 2.0僅支援作為目標端,且以AnalyticDB for MySQL 2.0為目標的方案暫未上線新版控制台,目前僅支援在舊版控制台配置。

為什麼在控制台上看不見新建立的任務?

可能是您選擇的工作清單不正確,或者對任務進行了篩選。請在相應工作清單選擇正確的篩選項,如在相應的工作清單選擇正確的地區和資源群組等。資源群組

資料校正任務出現資料不一致的原因有什嗎?

常見原因如下:

  1. 遷移或同步任務有延遲。

  2. 源庫執行有預設值的加列操作,且任務有延遲。

  3. 目標庫有除DTS以外的資料寫入。

  4. 開啟了多表歸併功能的任務源庫執行了DDL操作。

  5. 遷移或同步任務使用了庫表列名映射功能。

已建立的任務置灰的配置項是否支援修改?

不支援。

如何配置延遲警示及閾值?

DTS提供了監控警示功能,您可以通過控制台對重要的監控指標設定警示規則,讓您及時瞭解運行狀態。配置方法,請參見配置監控警示

失敗時間較長的任務,能否查看失敗的原因?

不可以。若任務失敗的時間較長(如失敗超過7天),相關日誌會被清除,從而無法查看失敗的原因。

失敗時間較長的任務,能否恢複?

不可以。若任務失敗的時間較長(如失敗超過7天),相關日誌會被清除而無法恢複,您需要重新設定任務。

rdsdt_dtsacct是什麼帳號?

若您未建立rdsdt_dtsacct帳號,則該帳號可能是由DTS建立的。DTS會在部分資料庫執行個體中建立內建帳號rdsdt_dtsacct,用於串連源和目標資料庫執行個體。

如何查看SQL Server中堆表、無主鍵表、壓縮表、含計算資料行的表資訊?

您可以執行如下SQL檢查源庫是否存在這些情境的表:

  1. 檢查源庫堆表資訊:

    SELECT s.name AS schema_name, t.name AS table_name FROM sys.schemas s INNER JOIN sys.tables t ON s.schema_id = t.schema_id AND t.type = 'U' AND s.name NOT IN ('cdc', 'sys') AND t.name NOT IN ('systranschemas') AND t.object_id IN (SELECT object_id FROM sys.indexes WHERE index_id = 0);
  2. 檢查無主鍵表資訊:

    SELECT s.name AS schema_name, t.name AS table_name FROM sys.schemas s INNER JOIN sys.tables t ON s.schema_id = t.schema_id AND t.type = 'U' AND s.name NOT IN ('cdc', 'sys') AND t.name NOT IN ('systranschemas') AND t.object_id NOT IN (SELECT parent_object_id FROM sys.objects WHERE type = 'PK');
  3. 檢查源庫叢集索引列不包含的主鍵列資訊:

    SELECT s.name schema_name, t.name table_name FROM sys.schemas s INNER JOIN sys.tables t ON s.schema_id = t.schema_id WHERE t.type = 'U' AND s.name NOT IN('cdc', 'sys') AND t.name NOT IN('systranschemas') AND t.object_id IN ( SELECT pk_colums_counter.object_id AS object_id FROM (select pk_colums.object_id, sum(pk_colums.column_id) column_id_counter from (select sic.object_id object_id, sic.column_id FROM sys.index_columns sic, sys.indexes sis WHERE sic.object_id = sis.object_id AND sic.index_id = sis.index_id AND sis.is_primary_key = 'true') pk_colums group by object_id) pk_colums_counter inner JOIN ( select cluster_colums.object_id, sum(cluster_colums.column_id) column_id_counter from (SELECT sic.object_id object_id, sic.column_id FROM sys.index_columns sic, sys.indexes sis WHERE sic.object_id = sis.object_id AND sic.index_id = sis.index_id AND sis.index_id = 1) cluster_colums group by object_id ) cluster_colums_counter ON pk_colums_counter.object_id = cluster_colums_counter.object_id and pk_colums_counter.column_id_counter != cluster_colums_counter.column_id_counter);
  4. 檢查源庫壓縮表資訊:

    SELECT s.name AS schema_name, t.name AS table_name FROM sys.objects t, sys.schemas s, sys.partitions p WHERE s.schema_id = t.schema_id AND t.type = 'U' AND s.name NOT IN ('cdc', 'sys') AND t.name NOT IN ('systranschemas') AND t.object_id = p.object_id AND p.data_compression != 0;
  5. 檢查包含計算資料行表資訊:

    SELECT s.name AS schema_name, t.name AS table_name FROM sys.schemas s INNER JOIN sys.tables t ON s.schema_id = t.schema_id AND t.type = 'U' AND s.name NOT IN ('cdc', 'sys') AND t.name NOT IN ('systranschemas') AND t.object_id IN (SELECT object_id FROM sys.columns WHERE is_computed = 1);

源和目標端的結構不一致如何處理?

您可以嘗試使用映射功能,將源和目標端的列建立映射關係。更多資訊,請參見庫表列名映射

說明

不支援修改列的類型。

庫表列映射是否支援修改列的類型?

不支援。

DTS是否支援限制源庫的讀取速度?

不支援,您需要在任務運行前評估源庫的效能(如IOPS以及網路頻寬是否滿足要求),同時建議在業務低峰期運行任務。

如何清理MongoDB(分區叢集架構)的孤立文檔?

查看是否存在孤立文檔

  1. 通過Mongo Shell串連MongoDB分區叢集執行個體。

    ApsaraDB for MongoDB的串連方法,請參見通過Mongo Shell串連MongoDB分區叢集執行個體

  2. 執行如下命令,切換至目標庫。

    use <db_name>
  3. 執行如下命令,查看孤立文檔資訊。

    db.<coll_name>.find().explain("executionStats")
    說明

    查看每個分區executionStatsSHARDING_FILTER 階段(stage)的chunkSkips欄位,如果不為0,則表示對應的分區上存在孤立文檔。

    如下返回樣本表示:在SHARDING_FILTER 階段之前的FETCH階段返回了102個文檔("nReturned" : 102),然後在SHARDING_FILTER 階段過濾了2個孤立文檔("chunkSkips" : 2),最終返回了100個文檔("nReturned" : 100)。

    "stage" : "SHARDING_FILTER",
    "nReturned" : 100,
    ......
    "chunkSkips" : 2,
    "inputStage" : {
        "stage" : "FETCH",
        "nReturned" : 102,

    關於SHARDING_FILTER階段的更多資訊,請參見MongoDB Manual

清理孤立文檔

重要

如果您有多個資料庫,需清理每個資料庫的孤立文檔。

ApsaraDB for MongoDB
說明

MongoDB 4.2以下大版本或4.0.6以下小版本的執行個體在執行清理指令碼時會報錯。如何查看執行個體目前的版本,請參見MongoDB小版本說明。如何升級小版本和大版本,請參見升級資料庫大版本升級資料庫小版本

清理孤立文檔需要使用cleanupOrphaned命令。在MongoDB 4.4及以上版本和MongoDB 4.2及以下版本中的使用方法略有區別,具體操作方式如下。

MongoDB 4.4及以上版本
  1. 在可以串連分區叢集執行個體的伺服器上,建立一個用於清理孤立文檔的JS指令碼,指令碼名稱為cleanupOrphaned.js

    說明

    該指令碼用於清理多個Shard節點的多個資料庫中所有集合的孤立文檔。如需清理特定集合中的孤立文檔,可自行修改JS指令碼來完成。

    // shard執行個體名稱列表
    var shardNames = ["shardName1", "shardName2"];
    // 資料庫列表
    var databasesToProcess = ["database1", "database2", "database3"];
    
    shardNames.forEach(function(shardName) {
        // 遍曆指定的資料庫列表
        databasesToProcess.forEach(function(dbName) {
            var dbInstance = db.getSiblingDB(dbName);
            // 擷取該資料庫執行個體的所有集合名稱
            var collectionNames = dbInstance.getCollectionNames();
            
            // 遍曆每個集合
            collectionNames.forEach(function(collectionName) {
                // 完整的集合名稱
                var fullCollectionName = dbName + "." + collectionName;
                // 構建 cleanupOrphaned 命令
                var command = {
                    runCommandOnShard: shardName,
                    command: { cleanupOrphaned: fullCollectionName }
                };
    
                // 執行命令
                var result = db.adminCommand(command); 
                if (result.ok) {
                    print("Cleaned up orphaned documents for collection " + fullCollectionName + " on shard " + shardName);
                    printjson(result);
                } else {
                    print("Failed to clean up orphaned documents for collection " + fullCollectionName + " on shard " + shardName);
                }
            });
        });
    });

    您需要對指令碼中的shardNamesdatabasesToProcess參數的值進行修改,具體說明如下:

    • shardNames:分區叢集執行個體中待清理孤立文檔的Shard節點的ID數組,您可以在執行個體基本資料頁面的Shard列表地區擷取,例如d-bp15a3796d3a****

    • databasesToProcess:待清理孤立文檔的資料庫名稱數組。

  2. cleanupOrphaned.js指令碼所在的目錄下,執行以下命令清理孤立文檔。

    mongo --host <Mongoshost> --port <Primaryport>  --authenticationDatabase <database> -u <username> -p <password> cleanupOrphaned.js > output.txt

    參數說明如下。

    參數

    說明

    <Mongoshost>

    分區叢集執行個體Mongos節點的串連地址,格式為s-bp14423a2a51****.mongodb.rds.aliyuncs.com

    <Primaryport>

    分區叢集執行個體Mongos節點的連接埠號碼,預設為3717。

    <database>

    鑒權資料庫名,即資料庫帳號所屬的資料庫。

    <username>

    資料庫帳號。

    <password>

    資料庫帳號的密碼。

    output.txt

    執行結果儲存到output檔案中。

MongoDB 4.2及以下版本
  1. 在可以串連分區叢集執行個體的伺服器上,建立一個用於清理孤立文檔的JS指令碼,指令碼名稱為cleanupOrphaned.js

    說明

    該指令碼用於清理多個Shard節點中指定資料庫下指定集合的孤立文檔。如需清理資料庫中多個集合的孤立文檔,您可以修改fullCollectionName參數並多次執行,也可以自行修改指令碼通過遍曆的方式執行。

    function cleanupOrphanedOnShard(shardName, fullCollectionName) {
        var nextKey = { };
        var result;
    
        while ( nextKey != null ) {
            var command = {
                runCommandOnShard: shardName,
                command: { cleanupOrphaned: fullCollectionName, startingFromKey: nextKey }
            };
    
            result = db.adminCommand(command);
            printjson(result);
    
            if (result.ok != 1 || !(result.results.hasOwnProperty(shardName)) || result.results[shardName].ok != 1 ) {
                print("Unable to complete at this time: failure or timeout.")
                break
            }
    
            nextKey = result.results[shardName].stoppedAtKey;
        }
    
        print("cleanupOrphaned done for coll: " + fullCollectionName + " on shard: " + shardName)
    }
    
    var shardNames = ["shardName1", "shardName2", "shardName3"]
    var fullCollectionName = "database.collection"
    
    shardNames.forEach(function(shardName) {
        cleanupOrphanedOnShard(shardName, fullCollectionName);
    });

    您需要對指令碼中的shardNamesfullCollectionName參數的值進行修改,具體說明如下:

    • shardNames:分區叢集執行個體中待清理孤立文檔的Shard節點的ID數組,您可以在執行個體基本資料頁面的Shard列表地區擷取,例如d-bp15a3796d3a****

    • fullCollectionName:需要替換為待清理孤立文檔的集合名稱,格式為資料庫名稱.集合名稱

  2. cleanupOrphaned.js指令碼所在的目錄下,執行以下命令清理孤立文檔。

    mongo --host <Mongoshost> --port <Primaryport>  --authenticationDatabase <database> -u <username> -p <password> cleanupOrphaned.js > output.txt

    參數說明如下。

    參數

    說明

    <Mongoshost>

    分區叢集執行個體Mongos節點的串連地址,格式為s-bp14423a2a51****.mongodb.rds.aliyuncs.com

    <Primaryport>

    分區叢集執行個體Mongos節點的連接埠號碼,預設為3717。

    <database>

    鑒權資料庫名,即資料庫帳號所屬的資料庫。

    <username>

    資料庫帳號。

    <password>

    資料庫帳號的密碼。

    output.txt

    執行結果儲存到output檔案中。

自建MongoDB
  1. 在可以串連自建MongoDB資料庫的伺服器上下載cleanupOrphaned.js指令檔。

    wget "https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/120562/cn_zh/1564451237979/cleanupOrphaned.js"
  2. 修改cleanupOrphaned.js指令檔,將test替換為待清理孤立文檔的資料庫名。

    重要

    如果您有多個資料庫,您需要重複執行步驟2~步驟3。

  3. 執行如下命令,清理Shard節點中指定資料庫下所有集合的孤立文檔。

    說明

    您需要重複執行本步驟,為每個Shard節點清理孤立文檔。

    mongo --host <Shardhost> --port <Primaryport>  --authenticationDatabase <database> -u <username> -p <password> cleanupOrphaned.js
    說明
    • <Shardhost>:Shard節點的IP地址。

    • <Primaryport>:Shard節點中的Primary節點的服務連接埠。

    • <database>:鑒權資料庫名,即資料庫帳號所屬的資料庫。

    • <username>:登入資料庫的帳號。

    • <password>:登入資料庫的密碼。

    樣本:

    本案例的自建MongoDB資料庫有三個Shard節點,所以需要分別為這三個節點清除孤立文檔。

    mongo --host 172.16.1.10 --port 27018  --authenticationDatabase admin -u dtstest -p 'Test123456' cleanupOrphaned.js
    mongo --host 172.16.1.11 --port 27021 --authenticationDatabase admin -u dtstest -p 'Test123456' cleanupOrphaned.js
    mongo --host 172.16.1.12 --port 27024  --authenticationDatabase admin -u dtstest -p 'Test123456' cleanupOrphaned.js

異常處理

若孤立文檔對應的namespace上存在idleCursors,則可能會導致清理過程一直無法完成,且在對應孤立文檔的mongod日誌中存在如下資訊:

Deletion of DATABASE.COLLECTION range [{ KEY: VALUE1 }, { KEY: VALUE2 }) will be scheduled after all possibly dependent queries finish

您可以通過Mongo Shell串連mongod並執行如下命令,可以查看當前分區上是否存在idleCursors。如果存在,則需要通過restart mongod或者killCursors命令清理所有idleCursors後,重新清理孤立文檔。更多資訊,請參見JIRA ticket

db.getSiblingDB("admin").aggregate( [{ $currentOp : { allUsers: true, idleCursors: true } },{ $match : { type: "idleCursor" } }] )

如何處理分區叢集架構的MongoDB資料分布不均衡?

啟用Balancer功能並進行預分區,可以有效解決大部分資料都寫入到單個分區上(資料扭曲)的問題。

開啟Balancer

如果Balancer處於關閉狀態,或者還未達到Balancer視窗設定的時間段,您可以開啟或者臨時取消Balancer的視窗期,以立即開始資料均衡。

  1. 串連MongoDB分區叢集執行個體。

  2. 在mongos節點命令視窗中,切換至config資料庫。

    use config
  3. 根據實際情況,執行如下命令。

    • 開啟Balancer功能

      sh.setBalancerState(true)
    • 臨時取消Balancer的視窗期

      db.settings.updateOne( { _id : "balancer" }, { $unset : { activeWindow : true } } )

預分區

MongoDB支援範圍分區和雜湊分區兩種分區方式,預分區可以使Chunk(塊)的取值儘可能分散到多個Shard節點中,從而在DTS資料同步或遷移過程中實現負載儘可能均衡。

雜湊分區

使用numInitialChunks參數,方便快捷地實現預分區。取值預設為分區數×2,最大可以設定為分區數×8192。更多資訊,請參見sh.shardCollection()

sh.shardCollection("phonebook.contacts", { last_name: "hashed" }, false, {numInitialChunks: 16384})

範圍分區

  • 如果源MongoDB也是分區叢集架構,則可以通過config.chunks中的資料來擷取源MongoDB對應分區表的Chunk範圍,並作為後續預分區命令中<split_value>的取值參考。

  • 如果源MongoDB是複本集,則只能通過find命令明確分區鍵的具體範圍,然後再設計合理的分裂點。

    # 獲得片鍵的最小值
    db.<coll>.find().sort({<shardKey>:1}).limit(1)
    # 獲得片鍵的最大值
    db.<coll>.find().sort({<shardKey>:-1).limit(1)

命令格式

說明

splitAt命令為例,更多資訊,請參見sh.splitAt()sh.splitFind()Split Chunks in a Sharded Cluster

sh.splitAt("<db>.<coll>", {"<shardKey>":<split_value>})

樣本語句

sh.splitAt("test.test", {"id":0})
sh.splitAt("test.test", {"id":50000})
sh.splitAt("test.test", {"id":75000})

在完成預分區的操作後,您可以在mongos節點執行sh.status()命令確認預分區的效果。

如何在控制台的工作清單設定每頁顯示執行個體的條數?

說明

本操作以同步執行個體為例,進行介紹。

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

    通過DTS控制台進入

    1. 登入Data Transmission Service控制台

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

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

    通過DMS控制台進入

    說明

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

    1. 登入Data Management服務

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

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

  2. 在頁面右側,將捲軸拖動到頁面底部。

  3. 在頁面的右下角,選擇每頁顯示

    說明

    每頁顯示僅支援選擇為102050

DTS執行個體提示ZooKeeper連線逾時如何處理?

請嘗試重啟執行個體,查看執行個體是否可以恢複。重啟操作,請參見啟動DTS執行個體

在CEN中刪除DTS網段後,為何會自動重新添加回來?

可能是因為您使用了雲企業網CEN的基礎版轉寄路由器,將資料庫接入到DTS。若您使用該資料庫建立DTS執行個體,即使在CEN中刪除DTS網段,DTS也會自動將伺服器的IP位址區段添加到相應的路由器中。

DTS任務是否支援匯出?

不支援。

如何使用Java語言調用OpenAPI?

Java語言調用OpenAPI的方法與Python語言類似,請參見Python調用SDK樣本。您可以進入Data Transmission Service SDK頁面,在所有語言選擇目標程式設計語言後,查看範例程式碼。

如何使用API給同步或遷移任務配置ETL功能?

您可以在API介面的預留參數Reserve中,通過公用參數(如etlOperatorCtletlOperatorSetting)進行配置。更多資訊,請參見ConfigureDtsJobReserve參數說明

DTS是否支援Azure SQL Database?

支援。Azure SQL Database作為源庫時,SQLServer增量同步處理模式需選擇輪詢查詢CDC執行個體做增量同步處理

DTS同步或遷移結束後,源庫資料是否會被保留?

是,DTS不會刪除源庫的資料。若您無需保留源庫中的資料,請自行刪除。

DTS是否支援按時間段抽樣同步或遷移資料?

不支援。