

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS DMS 資料重新同步
<a name="CHAP_Validating.DataResync"></a>

AWS Database Migration Service (AWS DMS) 資料重新同步會自動修正透過來源和目標資料庫之間的資料驗證所識別的資料不一致。此功能可做為現有 DMS 遷移任務的一部分，確保根據您的任務組態、連線設定、資料表映射和轉換進行適當的更新。

資料重新同步功能的運作方式是從目標資料庫上的控制資料表讀取驗證失敗，並執行適當的修正操作。偵測到不相符時，會使用儲存在失敗記錄中的主索引鍵從來源擷取目前的資料，並套用到目標，同時遵守任何設定的轉換。如需詳細資訊，請參閱[`awsdms_validation_failures_v2` 控制資料表](CHAP_Validating.md#CHAP_DataResync.Troubleshooting.v2table)。

行為取決於您的遷移類型。對於full-load-only的任務，資料重新同步會在初始載入和驗證完成後執行一次。對於具有變更資料擷取 (CDC) 的任務，資料重新同步會根據設定的排程運作，在套用修正時暫時暫停複寫和驗證。

在 CDC 重新同步操作期間：
+ 複寫和驗證會暫時暫停。
+ 資料重新同步會處理現有的驗證失敗。
+ 正常複寫和驗證會繼續。
+ 程序會根據您設定的排程重複執行。

資料重新同步會自動追蹤每個修正操作的狀態，並透過資料表統計資料提供詳細的指標。

**先決條件：**  
資料重新同步功能需要下列先決條件：  
+ 您必須擁有 AWS DMS 引擎版本 3.6.1 或更新版本。
+ 您必須為正在進行複寫的任務設定排程和計時持續時間設定。僅完全載入任務不需要這些設定。

## 限制
<a name="CHAP_DataResync.limitations"></a>

資料重新同步功能有下列限制：
+ 資料重新同步僅支援 Oracle 和 SQL Server 做為來源資料庫。
+ 資料重新同步支援 PostgreSQL 和 Amazon Aurora PostgreSQL 相容引擎做為目標資料庫。
+ 來源和目標資料庫中的所有資料表都必須有主索引鍵。驗證不支援沒有主索引鍵或唯一索引鍵的資料表。任何沒有有效主索引鍵或唯一索引鍵的資料表都會暫停驗證，而且不會報告驗證失敗。
+ 執行Full-load-only任務時，必須啟用資料驗證。
+ 無法為僅驗證任務啟用資料重新同步，因為它們不會複寫任何資料。您可以透過僅提供驗證 ，在父複寫任務上啟用重新同步`taskID`。如需詳細資訊，請參閱[僅驗證任務](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html#CHAP_Validating.ValidationOnly)。
+ 如果僅驗證任務在任務設定中設定了`ControlSchema`參數設定，則複寫任務也必須具有相同的參數組態，資料重新同步才能找到正確的驗證失敗。
+ 您必須設定 CDC 任務的排程和計時持續時間設定。
+ 在重新同步時段期間，資料重新同步可能會影響 DMS 中的複寫延遲。

如需在資料重新同步 AWS DMS 期間對 中的驗證進行故障診斷的詳細資訊，請參閱[AWS DMS 資料驗證](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)下的[故障診斷](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html#CHAP_Validating.Troubleshooting)一節。

## 排程和計時
<a name="CHAP_DataResync.scheduling"></a>

對於使用 CDC 的任務，您必須設定資料重新同步操作的時間和持續時間。這有助於防止對正常複寫操作造成影響。您可以指定：
+ 使用 Cron 格式來定義何時可能發生重新同步操作的排程。
+ 確保重新同步操作不會延伸至尖峰使用期間的最大持續時間。

建議在離峰時間或來源資料庫最少或沒有變更的期間排程重新同步操作。

**注意**  
排程時間包括等待目標套用串流為空，因為資料重新同步和正常複寫無法同時執行。

## 使用案例
<a name="CHAP_DataResync.usecases"></a>

資料重新同步功能可讓使用者協調來源和目標系統之間的資料不一致。它可識別不相符的記錄並將其同步，以維持分散式環境的資料一致性。下列使用案例示範資料重新同步功能解決資料一致性挑戰的常見案例：

**案例 1：完全載入任務 - 使用相同的 DMS 任務執行重新同步**  
在現有的 DMS 完全載入遷移任務中，您可以執行下列動作：  
+ 啟用驗證：`Validation with data migration = true`。
+ 啟用重新同步： `Data resync = true`

**案例 2：完全載入和 CDC，僅限 CDC 任務 - 使用相同的 DMS 任務執行重新同步**  
在現有的 DMS CDC 遷移任務中，您可以執行下列動作：  
+ 啟用驗證：`Validation with data migration = true`。
+ 啟用重新同步： `Data resync = true`
+ 指定重新同步排程：`"ResyncSchedule": "0 0,2,4,6 * * *"`。
+ 指定重新同步時間： `MaxResyncTime": 60`

**案例 3：複寫和重新同步的完全載入和僅限 CDC 或僅限 CDC 任務，以及僅限驗證任務**  
若要在使用重新同步時，在另一個 DMS 任務中僅執行驗證操作，您可以執行下列動作：  
+ 僅建立驗證 DMS CDC 任務。
**注意**  
在資料重新同步期間，您必須記下並指定此任務的 ID。
+ 在主要 CDC 任務中，停用驗證：`Data validation = false`。
+ 啟用重新同步： `Data resync = true`
+ 指定重新同步排程：`"ResyncSchedule": "0 0,2,4,6 * * *"`。
+ 指定重新同步時間：`MaxResyncTime": 60`。
+ 指定僅驗證 DMS CDC 任務的 ID。僅驗證任務 ID 會附加在 ARN 結尾。範例 ARN： `arn:aws:dms:us-west-2:123456789012:task:6DG4CLGJ5JSJR67CFD7UDXFY7KV6CYGRICL6KWI`和僅限範例驗證任務 ID：`6DG4CLGJ5JSJR67CFD7UDXFY7KV6CYGRICL6KWI`。

## 最佳實務
<a name="CHAP_DataResync.Bestpractices"></a>

您可以在 中利用資料重新同步功能 AWS Database Migration Service ，以提高複寫任務的耐久性並達到一致性。使用資料重新同步功能的一些最佳實務如下：
+ 作為資料重新同步的一部分，從來源擷取不相符的記錄並將其套用到目標資料庫，以修正不相符的記錄。如果在重新同步視窗期間更新來源資料庫，則重新同步會讀取最新的記錄值，並將其套用至目標。這可能會導致 CDC 套用事件失敗，並在目標資料庫 上引入暫時不一致。若要避免這種情況，您必須在來源資料庫上的變更為零或最小的非上班時間或期間排定重新同步時段。
+ 在最少來源資料庫活動期間，以及在可接受的目標延遲閾值內設定重新同步時段。小型重新同步間隔可能會導致未處理的驗證不相符累積，而大型時段可能會在發生許多驗證失敗時增加複寫延遲。監控驗證失敗和重新同步率，以確定來源閒置期間的最佳重新同步時段。設定重新同步視窗的一些範例如下：
  + 多個短時段組態：

    ```
    "ResyncSchedule": "0 0,2,4,6 * * *",
    "MaxResyncTime": 60
    ```
  + 每日單一時段組態：

    ```
    "ResyncSchedule": "0 0 * * *",
    "MaxResyncTime": 360
    ```
+ 在重新同步時段期間監控 DMS 中的複寫延遲，並相應地調整排程以緩解大型峰值。
+ 您可以透過資料表彈性或查詢目標 databadse 上的`awsdms_validation_failures_v2`資料表來檢閱重新同步結果。如需詳細資訊，請參閱[使用 Amazon CloudWatch 監控複寫任務](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html#CHAP_Monitoring.CloudWatch)。
+ 當任務處於持續複寫階段時，請避免在重新同步時段期間啟動個別資料表的重新載入。
+ CDC 複寫任務的最佳實務：
  + 資料庫中的所有資料表都會完成載入程序。
  + 在進行中的驗證程序中會識別不相符項目。
  + 根據重新同步排程時段，複寫任務會暫停一小段時間。
  + 資料重新同步會修正驗證程序期間所引發的問題。
  + 複寫程序會繼續並依照排程重複。

## 資料重新同步組態和範例
<a name="CHAP_DataResync.configurations"></a>

**資料重新同步設定組態**：  
您可以在 DMS 中為複寫任務設定重新同步。以下是任務中資料重新同步設定組態的範例：  

```
"ResyncSettings": {
    "EnableResync": true,
    "ResyncSchedule": "0 0,2,4,6 * * *",  // Run at 12AM, 2AM, 4AM, and 6AM daily
    "MaxResyncTime": 60,                  // Run for maximum of 60 minutes, or 1 hour
    "ValidationTaskId": "TASK-ID-IF-NEEDED" //Optional, used only if validation is performed as a separate Validation only task
}
```

**常見重新同步排程模式的範例**：
+ `0 0 * * *`：每天午夜執行一次。
+ `0 0,12 * * *`：每天午夜和中午執行兩次。
+ `0 0,2,4,6, * * *`：在午夜到上午 6 點之間每兩小時執行一次。
+ `0 1 * * 1`：每週一上午 1 點執行。

**注意**  
您必須指定每天從 0 到 6 的數字。如需詳細資訊，請參閱 [Cron 表達式規則](#CHAP_DataResync.cron)。

**監控重新同步操作**：  
您可以透過資料表統計資料監控重新同步操作。以下是輸出範例：  

```
{
    "TableStatistics": {
        ...
        "ValidationFailedRecords": 1000,
        ...
        "ResyncRowsAttempted": 1000,
        "ResyncRowsSucceeded": 995,
        "ResyncRowsFailed": 5,
        "ResyncProgress": 99.5, // ratio of ResyncRowsSucceeded/ValidationFailedRecords
        "ResyncState": "Last resync at: 2024-03-14T06:00:00Z"
    }
}
```

若要在 中設定資料重新同步功能 AWS DMS，您可以檢閱各種重新同步參數及其個別的組態設定。如需詳細資訊，請參閱[資料重新同步設定](CHAP_Tasks.CustomizingTasks.TaskSettings.DataResyncSettings.md)。如需資料重新同步記錄設定的詳細資訊，請參閱 [記錄任務設定](CHAP_Tasks.CustomizingTasks.TaskSettings.Logging.md)。

## 驗證和故障診斷
<a name="CHAP_DataResync.validation"></a>

**驗證**：  
啟用資料評估時， 會使用下列結構在目標資料庫中 AWS DMS 建立驗證失敗資料表：  

```
CREATE TABLE awsdms_validation_failures_v2 (
    "RESYNC_ID" bigint NOT NULL,
    "TASK_NAME" varchar(128) NOT NULL,
    "TABLE_OWNER" varchar(128) NOT NULL,
    "TABLE_NAME" varchar(128) NOT NULL,
    "FAILURE_TIME" timestamp NOT NULL,
    "KEY_TYPE" varchar(128) NOT NULL,
    "KEY" varchar(7800) NOT NULL,
    "FAILURE_TYPE" varchar(128) NOT NULL,
    "DETAILS" varchar(7000) NOT NULL,
    "RESYNC_RESULT" varchar(128) NULL,
    "RESYNC_TIME" timestamp NULL,
    "RESYNC_ACTION" varchar(128) NULL
);
```
您可以將查詢寫入此資料表，以了解找到的資料不相符項目，以及如何解決它們。

啟用驗證時， 會在目標資料庫中 AWS DMS 建立驗證失敗資料表。如果您有任何問題，您可以查詢`awsdms_control.awsdms_validation_failures_v2`資料表以了解找到的資料不符情況，以及如何解決。如需詳細資訊，請參閱[AWS DMS 資料驗證](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)中的[疑難排解](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html#CHAP_Validating.Troubleshooting)一節。

**常見工作流程**：  
在資料重新同步驗證期間，標準工作流程如下：  
**僅限完全載入任務**：  

1. 資料庫中的所有資料表都會完成載入程序。

1. 在進行中的驗證程序中會識別不相符項目。

1. 資料重新同步會修正驗證程序期間所引發的問題。

1. 驗證程序會驗證更正。

1. 遷移任務已成功完成。
**CDC 任務**：  

1. 資料庫中的所有資料表都會完成載入程序。

1. 在進行中的驗證程序中會識別不相符項目。

1. 根據重新同步排程時段，複寫任務會暫停一小段時間。

1. 資料重新同步會修正驗證程序期間所引發的問題。

1. 複寫程序會繼續並依照排程重複。

對任務所做的任何修改，例如在重新同步操作期間停止複寫任務，或重新載入並重新驗證資料表，都可能會影響任務的行為和結果。一些已知的行為變更如下所示：

**當您在重新同步操作進行時停止複寫任務時**：
+ 重新同步操作不會自動繼續。您必須再次重新啟動它。
+ 未來的重新同步操作會根據設定的排程進行。
+ 任何未完成的修正都會在下一個重新同步排程視窗中嘗試。

**當您在資料庫中重新載入資料表**時：
+ 重新同步操作會略過任何正在重新載入的資料表。
+ 系統會忽略已重新載入之資料表的先前驗證失敗。
+ 新的驗證會在重新載入動作完成後開始。

**當您重新驗證資料庫中的資料表時**：
+ 重新同步操作的所有統計資料都會重設。
+ 系統會忽略已重新驗證之資料表的先前驗證失敗。

**注意**  
升級或移動任務至 DMS 3.6.1 版及更高版本時，不會重新同步`awsdms_control.awsdms_validation_failures_v1`資料表中的任何失敗。只會重新同步`awsdms_validation_failures_v2`資料表中的失敗。若要在`awsdms_control.awsdms_validation_failures_v2`資料表中重新同步失敗，您必須重新載入任務、重新載入任務中的一或多個資料表，或重新驗證一或多個資料表。如需詳細資訊，請參閱下列連結：  
若要重新載入任務，請參閱 [`StartReplicationTask` API 參考](https://docs.aws.amazon.com/dms/latest/APIReference/API_StartReplicationTask.html)。
若要在任務中重新載入一或多個資料表，請參閱 *AWS CLI 命令參考*文件中[https://docs.aws.amazon.com/cli/latest/reference/dms/reload-tables.html](https://docs.aws.amazon.com/cli/latest/reference/dms/reload-tables.html)的 。
若要重新驗證一或多個資料表，請參閱 *AWS CLI 命令參考*文件中 [https://docs.aws.amazon.com/cli/latest/reference/dms/reload-tables.html](https://docs.aws.amazon.com/cli/latest/reference/dms/reload-tables.html)一節中的 `validate-only`選項。
.

## Cron 表達式規則
<a name="CHAP_DataResync.cron"></a>

若要在 中的複寫任務期間設定資料重新同步操作 AWS DMS ，您可以使用 cron 表達式規則。這些規則可讓您自訂重新同步時段，並根據您的業務需求進行排程。您可以使用各種參數，例如分鐘、小時、天、月和星期幾。每個參數的 cron 表達式規則為：

**分鐘**：  
+ 分鐘範圍從 0 到 59。
+ 您可以使用 (`-`)、`or`/`and` 來指定範圍。最多 10 個項目，以逗號 () 分隔`,`。
+ **範例**：
  + `2-5` 等於 `2,3,5,5`。
  + `1-2,3-4,5,7-10` 是有效的範圍。
  + `1,2,3,4,5,6,7,8,9,10` 是有效的範圍。
  + `1,2,3,4,5,6,7,8,9,10,11` 不是有效的範圍。重新同步操作會在第 10 個範圍項目之後略過。
+ 您可以使用 (`*`)。範例： `*` 等於 `0-59`。
+ 您只能將 (`/`) 與 (`-`) 或 () 搭配使用`*`。

  **範例**：
  + `2-7/2` 等於 `2,4,6`。
  + `*/15` 等於 `0,15,30,45`。

**小時**：  
與「**分鐘**」相同，但有效範圍是從 `0`到 `23`。

**天**：  
+ 與「**分鐘**」相同，但有效範圍是從 `1`到 `31`。
+ 重新同步組態`L`支援使用 。它被解譯為當月的最後一天。您不得將其與另一個語法搭配使用。

**月：**  
與「**分鐘**」相同，但有效範圍是從 `1`到 `12`。

**星期幾**：  
+ 與「**分鐘**」相同，但有效範圍是從 `0`到 `6`。
+ 您無法新增一週名稱的字串值。