

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

# 時間歷程任務設定
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel"></a>

若要記錄和偵錯複寫任務，您可以使用 AWS DMS 時間歷程。您可以透過這種方法，使用 Amazon S3 儲存日誌並使用加密金鑰加密日誌。只有具備時間歷程 S3 儲存貯體的存取權，您才能使用日期時間篩選條件擷取 S3 日誌，然後視需要檢視、下載和混淆日誌。您可以透過這樣做，安全地「回到過去的時間」來調查資料庫活動。時間歷程與 CloudWatch 日誌記錄獨立運作。如需 CloudWatch 日誌記錄的詳細資訊，請參閱：[記錄任務設定](CHAP_Tasks.CustomizingTasks.TaskSettings.Logging.md)。

您可以在所有支援 AWS DMS Oracle、Microsoft SQL Server 和 PostgreSQL 來源端點，以及 AWS DMS支援 PostgreSQL 和 MySQL 目標端點 AWS 的區域中使用時間歷程。您只能針對完全載入和變更資料擷取 (CDC) 任務，以及僅限 CDC 的任務開啟「時間歷程」。若要開啟「時間歷程」或修改任何現有的「時間歷程」設定，請確保複寫任務已停止。

「時間歷程」設定包括下列 `TTSettings` 屬性：
+ `EnableTT` – 如果此選項設定為 `true`，則會為任務開啟「時間歷程」記錄。預設值為 `false`。

  類型：布林值

  必要：否
+ `EncryptionMode` – S3 儲存貯體上用來儲存資料和日誌的伺服器端加密類型。您可以指定為 `"SSE_S3"` (預設) 或 `"SSE_KMS"`。

  您可以將 `EncryptionMode` 從 `"SSE_KMS"` 變更為 `"SSE_S3"`，但不能反向變更。

  類型：字串

  必要：否
+ `ServerSideEncryptionKmsKeyId` – 如果您`"SSE_KMS"`為 指定 `EncryptionMode`，請提供自訂受管 AWS KMS 金鑰的 ID。請確定您使用的金鑰具有連接政策，該政策會開啟 AWS Identity and Access Management (IAM) 使用者許可，並允許使用金鑰。

  `"SSE_KMS"` 選項僅支援您自己的自訂受管對稱 KMS 金鑰。

  類型：字串

  必要：僅限您將 `EncryptionMode` 設定為 `"SSE_KMS"` 時
+ `ServiceAccessRoleArn` – 服務存取 IAM 角色所使用的 Amazon Resource Name (ARN)。將角色名稱設定為 `dms-tt-s3-access-role`。這是允許 從 S3 AWS DMS 儲存貯體寫入和讀取物件的必要設定。

  類型：字串

  必填：如果「時間歷程」已開啟

  以下為此角色的範例政策。

------
#### [ JSON ]

****  

  ```
  {
   "Version":"2012-10-17",		 	 	 
   "Statement": [
          {
              "Sid": "VisualEditor0",
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "kms:GenerateDataKey",
                  "kms:Decrypt",
                  "s3:ListBucket",
                  "s3:DeleteObject"
              ],
              "Resource": [
                  "arn:aws:s3:::S3bucketName*",
                  "arn:aws:kms:us-east-1:112233445566:key/1234a1a1-1m2m-1z2z-d1d2-12dmstt1234"
              ]
          }
      ]
  }
  ```

------

  以下為此角色的範例信任政策。

------
#### [ JSON ]

****  

  ```
  {
   "Version":"2012-10-17",		 	 	 
   "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       "dms.amazonaws.com"
                   ]
               },
               "Action": "sts:AssumeRole"
          }
      ]
  }
  ```

------
+ `BucketName` – 用來儲存時間歷程日誌的 S3 儲存貯體名稱。在開啟「時間歷程」日誌之前，請務必先建立此 S3 儲存貯體。

  類型：字串

  必填：如果「時間歷程」已開啟
+ `BucketFolder` – 選用參數，用於設定 S3 儲存貯體中的資料夾名稱。如果您指定此參數，DMS 會在路徑 `"/BucketName/BucketFolder/taskARN/YYYY/MM/DD/hh"` 中建立時間歷程記錄。如果您未指定此參數， 會將預設路徑 AWS DMS 建立為 `"/BucketName/dms-time-travel-logs/taskARN/YYYY/MM/DD/hh`。

  類型：字串

  必要：否
+ `EnableDeletingFromS3OnTaskDelete` – 當此選項設定為 時`true`，如果任務已刪除， 會從 S3 AWS DMS 刪除時間歷程日誌。預設值為 `false`。

  類型：字串

  必要：否
+ `EnableRawData` – 將此選項設定為 `true` 時，時間歷程日誌的資料處理語言 (DML) 原始資料會顯示在時間歷程記錄的 `raw_data` 資料欄下。如需詳細資訊，請參閱：[使用時間歷程日誌](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.LogSchema.md)。預設值為 `false`。當此選項設定為 `false` 時，只會擷取 DML 類型。

  類型：字串

  必要：否
+ `RawDataFormat` – 在 3.5.0 版和更新 AWS DMS 版本中，當 `EnableRawData` 設定為 `true`時。此屬性指定時間歷程日誌中 DML 原始資料的格式，並可顯示為：
  + `"TEXT"` – 對於 CDC 期間擷取為 `Raw` 欄位的 DML 事件，可顯示為已剖析且可讀的資料欄名稱和值。
  + `"HEX"` – 對於 CDC 期間為 DML 事件擷取的資料欄名稱和值原始十六進位法。

  此屬性適用於 Oracle 和 Microsoft SQL Server 資料庫來源。

  類型：字串

  必要：否
+ `OperationsToLog` – 指定登入時間歷程記錄的 DML 操作類型。您可以指定下列其中一個選項：
  + `"INSERT"`
  + `"UPDATE"`
  + `"DELETE"`
  + `"COMMIT"`
  + `"ROLLBACK"`
  + `"ALL"`

  預設值為 `"ALL"`。

  類型：字串

  必要：否
+ `MaxRecordSize` – 指定每列記錄的「時間歷程」日誌記錄大小上限。使用此屬性可控制特別忙碌資料表的「時間歷程」記錄的增長。預設值為 64 KB。

  類型：整數

  必要：否

如需開啟和使用時間歷程日誌的詳細資訊，請參閱下列主題。

**Topics**
+ [開啟任務的時間歷程日誌](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.TaskEnabling.md)
+ [使用時間歷程日誌](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.LogSchema.md)
+ [將時間歷程日誌 AWS DMS 上傳至 S3 的頻率](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.UploadsToS3.md)

# 開啟任務的時間歷程日誌
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.TaskEnabling"></a>

您可以使用上述 AWS DMS 任務設定來開啟任務的時間歷程。請確定您的複寫任務已停止，然後再開啟 [時間歷程]。

**使用 開啟時間歷程 AWS CLI**

1. 建立 DMS 任務組態 JSON 檔案，並新增如下所示的 `TTSettings` 區段。如需使用任務組態檔案來設定任務設定的相關資訊，請參閱：[任務設定範例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

   ```
    .
    .
    .
       },
   "TTSettings" : {
     "EnableTT" : true,
     "TTS3Settings": {
         "EncryptionMode": "SSE_KMS",
         "ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-west-2:112233445566:key/myKMSKey",
         "ServiceAccessRoleArn": "arn:aws:iam::112233445566:role/dms-tt-s3-access-role",
         "BucketName": "myttbucket",
         "BucketFolder": "myttfolder",
         "EnableDeletingFromS3OnTaskDelete": false
       },
     "TTRecordSettings": {
         "EnableRawData" : true,
         "OperationsToLog": "DELETE,UPDATE",
         "MaxRecordSize": 64
       },
    .
    .
    .
   ```

1. 在適當的任務動作中，使用 `--replication-task-settings` 選項指定此 JSON 檔案。例如，下列 CLI 程式碼片段會將此「時間歷程」設定檔案指定為 `create-replication-task` 的一部分。

   ```
   aws dms create-replication-task 
   --target-endpoint-arn arn:aws:dms:us-east-1:112233445566:endpoint:ELS5O7YTYV452CAZR2EYBNQGILFHQIFVPWFRQAY \
   --source-endpoint-arn arn:aws:dms:us-east-1:112233445566:endpoint:HNX2BWIIN5ZYFF7F6UFFZVWTDFFSMTNOV2FTXZA \
   --replication-instance-arn arn:aws:dms:us-east-1:112233445566:rep:ERLHG2UA52EEJJKFYNYWRPCG6T7EPUAB5AWBUJQ \
   --migration-type full-load-and-cdc --table-mappings 'file:///FilePath/mappings.json' \
   --replication-task-settings 'file:///FilePath/task-settings-tt-enabled.json' \
   --replication-task-identifier test-task
                               .
                               .
                               .
   ```

   其中，此時間歷程設定檔案的名稱是 `task-settings-tt-enabled.json`。

同樣地，您可以將此檔案指定為 `modify-replication-task` 動作的一部分。

請注意下列任務動作對時間歷程日誌的特殊處理方式：
+ `start-replication-task` – 執行複寫任務時，如果無法存取用於「時間歷程」的 S3 儲存貯體，則會將任務標記為 `FAILED`。
+ `stop-replication-task` – 當任務停止時， 會 AWS DMS 立即將所有可用於複寫執行個體的時間歷程日誌推送到用於時間歷程的 S3 儲存貯體。

執行複製任務時，您可以將 `EncryptionMode` 值從 `"SSE_KMS"` 變更為 `"SSE_S3"`，但無法反向變更。

如果進行中任務的時間歷程日誌大小超過 1 GB，DMS 會在達到該大小後的五分鐘內將日誌推送到 S3。任務執行後，如果 S3 儲存貯體或 KMS 金鑰變為無法存取，DMS 會停止將日誌推送到此儲存貯體。如果您發現日誌未推送至 S3 儲存貯體，請檢查您的 S3 和 AWS KMS 許可。如需 DMS 將這些日誌推送到 S3 的頻率詳細資訊，請參閱：[將時間歷程日誌 AWS DMS 上傳至 S3 的頻率](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.UploadsToS3.md)。

若要從主控台為現有任務開啟「時間歷程」，請使用**任務設定**下的 JSON 編輯器選項來新增 `TTSettings` 區段。

# 使用時間歷程日誌
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.LogSchema"></a>

*時間歷程日誌檔案*是逗號分隔值 (CSV) 檔案，包含下列欄位。

```
log_timestamp 
component 
dms_source_code_location 
transaction_id 
event_id 
event_timestamp 
lsn/scn 
primary_key
record_type 
event_type 
schema_name 
table_name 
statement 
action 
result 
raw_data
```

在 S3 提供時間歷程日誌之後，您可以使用 Amazon Athena 等工具直接存取和查詢這些記錄。或者，您可以從 S3 下載任何檔案的日誌。

以下範例顯示「時間歷程」日誌，其中會記錄名為 `mytable` 資料表的交易。為了方便閱讀，下列日誌會新增行尾。

```
"log_timestamp ","tt_record_type","dms_source_code_location ","transaction_id",
"event_id","event_timestamp","scn_lsn","primary_key","record_type","event_type",
"schema_name","table_name","statement","action","result","raw_data"
"2021-09-23T01:03:00:778230","SOURCE_CAPTURE","postgres_endpoint_wal_engine.c:00819",
"609284109","565612992","2021-09-23 01:03:00.765321+00","00000E9C/D53AB518","","DML",
"UPDATE (3)","dmstest","mytable","","Migrate","","table dmstest.mytable:
UPDATE: id[bigint]:2244937 phone_number[character varying]:'phone-number-482'
age[integer]:82 gender[character]:'f' isactive[character]:'true ' 
date_of_travel[timestamp without time zone]:'2021-09-23 01:03:00.76593' 
description[text]:'TEST DATA TEST DATA TEST DATA TEST DATA'"
```

# 將時間歷程日誌 AWS DMS 上傳至 S3 的頻率
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.UploadsToS3"></a>

為了將複寫執行個體的儲存用量降至最低， 會定期從中 AWS DMS 卸載時間歷程日誌。

時間歷程日誌推送到 Amazon S3 儲存貯體的情況如下：
+ 如果日誌目前的大小超過 1 GB， 會在五分鐘內將日誌 AWS DMS 上傳至 S3。因此， 最多 AWS DMS 可以 AWS KMS 為每個執行中的任務每小時呼叫 S3 和 12 次。
+ AWS DMS 無論日誌的大小為何， 都會每小時將日誌上傳至 S3。
+ 當任務停止時， 會 AWS DMS 立即將時間歷程日誌上傳至 S3。