當我使用 AWS Database Migration Service (AWS DMS) 將來源資料庫遷移到 Amazon Redshift 時,我遇到資料複寫問題和變更資料擷取 (CDC) 失敗。
解決方法
CDC 失敗
如果您遇到 CDC 失敗,請檢閱 AWS DMS 任務日誌中與特定資料表相關的錯誤訊息。您也可以檢查 AWS DMS 任務的 CDCLatencySource 和 CDCLatencyTarget Amazon CloudWatch 指標。
根據您收到的錯誤訊息,採取以下一或多項動作:
- 確認來源資料表具有主索引鍵。對於 PostgreSQL 來源,擷取的資料表必須具有主索引鍵,AWS DMS 才能處理 DELETE 和 UPDATE 作業。
- 確認您已將來源資料庫上的變更日誌保留期間設定為至少 24 小時。
- 確認 AWS DMS 使用的 AWS 帳戶具有來源和目標資料庫所需的權限。
資料不一致
若要解決資料不一致,請完成以下步驟:
- 建立僅驗證任務,以識別來源與目標之間不相符的記錄。如需更多資訊,請參閱 Redshift 驗證效能。
- 查詢目標資料庫中的 awsdms_validation_failures_v1 資料表,以檢視不一致的情況。
- 檢查目標資料庫上的 awsdms_apply_exceptions 資料表,以取得遷移失敗的詳細錯誤資訊。
- 確認所有複寫的目標資料表都具有主索引鍵或唯一索引。
**注意:**Amazon Redshift 不會強制執行唯一、主索引鍵和外部索引鍵限制。因此,可能會出現重複。
- 如果您使用 PostgreSQL 作為來源,則必須為來源和目標資料表定義主索引鍵。
- 對於有不一致的資料表,請使用 AWS DMS 任務重新載入這些資料表。
資料類型轉換問題
若要解決資料類型轉換問題,請完成以下步驟:
-
檢閱 AWS DMS 任務日誌中,與資料截斷或字串長度超過資料定義語言 (DDL) 長度相關的錯誤。
-
檢查 awsdms_apply_exceptions 資料表中的遷移失敗情況。
-
調整目標 Redshift 資料庫中的欄資料類型,以容納較大的資料。例如,對於有長度問題的欄,將 varchar 變更為 text。
-
修改任務設定中的 MaxLobSize 參數,以處理較大的資料大小,如以下範例所示:
{
"TargetMetadata": {
"MaxLobSize": 32
}
}
-
確認您使用的是支援的資料類型,並確認您已正確對應來源和目標。
效能問題與高延遲
若要改善效能並降低延遲,請採取以下動作:
重複記錄
若要防止重複記錄,請採取以下動作:
- 確認複寫的目標資料表具有主索引鍵或唯一索引。
- 在目標上手動建立具有主索引鍵的資料表,並在任務設定中將 TargetTablePrepMode 設定為 DO_NOTHING 或 TRUNCATE_BEFORE_LOAD。
- 使用 primary-key-def AWS DMS 資料表對應規則明確定義主索引鍵。
遺失或不完整的資料
若要解決遺失或不完整的資料,請採取以下動作:
- 檢閱 AWS DMS 任務日誌中與特定資料表相關的警告或錯誤。
- 檢查 CDCIncomingChanges 指標,以判斷 AWS DMS 是否擷取來源中的所有變更。
- 確認 AWS DMS 使用的來源資料庫使用者帳戶,具有存取所有必要資料表和結構描述的必要權限。
- 建立僅驗證任務,以識別不相符的記錄。如需更多資訊,請參閱 Redshift 驗證效能。
- 對於持續發生問題的資料表,您可以建立個別的 AWS DMS 任務,以更細部地進行疑難排解。
相關資訊
AWS Database Migration Service 的最佳實務
AWS Database Migration Service 中的遷移任務疑難排解
AWS DMS 資料驗證