我有一個 AWS Database Migration Service (AWS DMS) 任務,目前處於「完全載入已完成」或「持續複製中」的遷移階段。但是,目標資料庫中的資料與來源資料庫中的資料不一致。
簡短描述
當您在異質環境中使用 AWS DMS 遷移資料時,可能會因以下原因而出現資料不一致的情況:
- 大型二進位物件 (LOB) 設定不正確
- 來源或目標的資料類型不受支援
- 變更資料擷取 (CDC) 複寫期間發生錯誤或例外情況,導致目標資料庫中的資料調處語言 (DML) 交易失敗
如果您沒有使用正確的 LOB 設定,則資料將根據 LobMaxSize 任務設定截斷。因此,目標 LOB 欄不包含與來源完全相同的資料。
在異質遷移期間,AWS DMS 會將來源資料類型轉換為內部資料類型。然後,AWS DMS 會將內部資料轉換為目標資料類型。由於 AWS DMS 並未完全支援某些來源和目標資料類型,您可能會看到來源與目標之間出現資料不一致的情況。
解決方法
執行初始檢查
如果您使用僅限完全載入任務,請確定遷移已完成,且任務處於停止狀態。
如果您使用完全載入和 CDC 任務或僅限 CDC 任務,請檢查 CDCLatencySource 和 CDCLatencyTarget Amazon CloudWatch 指標。確認沒有延遲。
檢查是否有其他應用程式連線到來源或目標資料庫,因為這可能導致資料調處。例如,如果您執行僅限完全載入任務,而來源資料遭到其他應用程式修改,則目標會出現資料不一致的情況。或者,如果其他應用程式將資料寫入目標資料庫中已遷移的目標資料表,則目標與來源之間也會出現資料不一致的情況。
查詢目標上的 awsdms_validation_failures_v1 資料表
如果您的目標是確保資料一致性,請在建立 AWS DMS 任務時開啟驗證功能。
**注意:**如果資料表包含 LOB 欄,且您在遷移時使用了 Limited LOB 模式,則必須將 ValidationPartialLobSize 設定為與 LobMaxSize 相同的值。
驗證開啟時進行疑難排解
如果已開啟驗證,請檢查目標資料庫中的 awsdms_Validation_failures_v1 資料表。如果記錄在遷移期間進入ValidationSuspended 或 ValidationFailed 狀態,則 AWS DMS 會將診斷資訊寫入 awsdms_validation_failures_v1。若要對驗證錯誤進行疑難排解,請執行類似下列命令:
select * from awsdms_validation_failures_v1 where TASK_NAME = 'ABC123FGJASHKNA345';
若要取得有關失敗的資訊,請檢查輸出中的詳細資料欄。使用金鑰欄來比較來源和目標之間的記錄資料。如需進一步了解如何對資料驗證問題進行疑難排解,請參閱疑難排解。
驗證關閉時進行疑難排解
如果您尚未在 AWS DMS 任務上開啟驗證,請建立僅限驗證任務。
對於一次性遷移,請使用僅限完全載入驗證功能,快速比較來源和目標之間的所有資料列。
對於持續複製,請使用 CDC 僅限驗證任務。CDC 僅限驗證任務會驗證來源和目標資料表之間的現有資料列。該任務會持續處理後續變更,並回報資料驗證失敗的情況。
檢查來源資料和目標資料的限制
確定不一致的資料之後,請檢查來源和目標是否存在與其資料類型相關的限制。例如,當您使用 PostgreSQL 作為來源時,無法遷移 ENUM 資料類型。
檢查任務日誌中是否有錯誤
在驗證失敗時,檢查任務日誌中是否有錯誤。或者,檢查控制資料表以查看在資料複寫階段期間記錄的例外狀況。
解決因截斷所造成的資料不一致問題
當您使用有限 LOB 模式時,AWS DMS 會在複寫執行個體中預先分配記憶體。然後,AWS DMS 會使用 LobMaxSize 工作設定批量載入 LOB 資料。AWS DMS 會截斷超過最大 LOB 大小的 LOB,然後向日誌檔發出警告訊息。
檢查日誌檔中是否有顯示資料遭截斷的警告訊息,然後檢查對應 LOB 欄的最大大小。請定義一個大於 LOB 欄大小的 LobMaxSize,以確保資料不會遭到截斷。使用診斷支援指令碼來尋找具有 LOB 資料的資料表,然後查詢 LOB 欄的大小。
如果 LOB 欄的最大大小超過 100 MB,請使用 Full LOB 或 Inline LOB 模式來防止 LOB 欄資料遭到截斷。
相關資訊
僅限驗證任務
在 AWS DMS 任務中設定來源資料庫的 LOB 支援