

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Time Travel 任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel"></a>

要记录和调试复制任务，可以使用 T AWS DMS ime Travel。在此方法中，您可以使用 Amazon S3 来存储日志，并使用加密密钥对其进行加密。只有具有对您的 Time Travel S3 存储桶的访问权限，才能使用日期时间过滤器检索 S3 日志，然后根据需要查看、下载以及对日志进行模糊处理。由此，您可以安全地“回到过去”来调查数据库活动。Time Travel 的工作原理与 CloudWatch 日志记录无关。有关 CloudWatch 日志记录的更多信息，请参阅[日志记录任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.Logging.md)。

你可以在所有 AWS 区域使用支持的 Oracle、Microsoft SQL Server 和 PostgreSQL 源端点以及 AWS DMS支持的 PostgreSQL 和 MySQL 目标端点的 Time Travel。 AWS DMS只能为完全加载和更改数据捕获（CDC）任务以及仅 CDC 的任务启用 Time Travel。要打开 Time Travel 或修改任何现有的 Time Travel 设置，请确保您的复制任务已停止。

Time Travel 设置包括以下 `TTSettings` 属性：
+ `EnableTT` – 如果此选项设置为 `true`，则会为任务开启 Time Travel 日志记录。默认值为 `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 资源名称（ARN）。将角色名称设置为 `dms-tt-s3-access-role`。这是一项必需设置， AWS DMS 允许从 S3 存储桶中写入和读取对象。

  类型：字符串

  必需：如果已启用 Time Travel

  下面是该角色的策略示例。

------
#### [ 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` – 用于存储 Time Travel 日志的 S3 存储桶的名称。请务必先创建此 S3 存储桶，然后再启用 Time Travel 日志。

  类型：字符串

  必需：如果已启用 Time Travel
+ `BucketFolder` – 一个可选参数，用于在 S3 桶中设置文件夹的名称。如果您指定此参数，DMS 将在路径 `"/BucketName/BucketFolder/taskARN/YYYY/MM/DD/hh"` 中创建 Time Travel 日志。如果您未指定此参数，则 AWS DMS 会将默认路径创建为`"/BucketName/dms-time-travel-logs/taskARN/YYYY/MM/DD/hh`。

  类型：字符串

  必需：否
+ `EnableDeletingFromS3OnTaskDelete`— 当此选项设置为时`true`，如果任务已 AWS DMS 删除，则会从 S3 中删除时空旅行日志。默认值为 `false`。

  类型：字符串

  必需：否
+ `EnableRawData` – 当该选项设置为 `true` 时，Time Travel 日志的数据操作语言（DML）原始数据将显示在 Time Travel 日志的 `raw_data` 列下。有关详细信息，请参阅[使用 Time Travel 日志](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.LogSchema.md)。默认值为 `false`。当该选项设置为 `false` 时，仅捕获 DML 的类型。

  类型：字符串

  必需：否
+ `RawDataFormat`— 在 3.5.0 及更高 AWS DMS 版本中，当设置`EnableRawData`为。`true`该属性为 Time Travel 日志中 DML 的原始数据指定了一种格式，可以表示为：
  + `"TEXT"` – CDC 期间捕获的 DML 事件的已解析、可读的列名和值作为 `Raw` 字段。
  + `"HEX"` – CDC 期间为 DML 事件捕获的列名和值的原始十六进制值。

  该属性适用于 Oracle 和 Microsoft SQL Server 数据库源。

  类型：字符串

  必需：否
+ `OperationsToLog` – 指定要登录 Time Travel 日志的 DML 操作的类型。您可以指定以下几项之一：
  + `"INSERT"`
  + `"UPDATE"`
  + `"DELETE"`
  + `"COMMIT"`
  + `"ROLLBACK"`
  + `"ALL"`

  默认值为 `"ALL"`。

  类型：字符串

  必需：否
+ `MaxRecordSize` – 指定每行记录的 Time Travel 日志记录的最大大小。使用该属性可以控制极为繁忙表格的 Time Travel 日志的增长。默认值为 64 KB。

  类型：整数

  必需：否

有关启用和使用 Time Travel 日志的更多信息，请参阅以下主题。

**Topics**
+ [为任务启用 Time Travel 日志](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.TaskEnabling.md)
+ [使用 Time Travel 日志](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.LogSchema.md)
+ [将时空旅行日志 AWS DMS 上传到 S3 的频率](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.UploadsToS3.md)

# 为任务启用 Time Travel 日志
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.TaskEnabling"></a>

您可以使用前面描述的任务设置为 AWS DMS 任务启用 Time Travel。在启用 Time Travel 之前，请确保您的复制任务已停止。

**要打开 “时空旅行”，请使用 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 代码片段将此 Time Travel 设置文件指定为 `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
                               .
                               .
                               .
   ```

   其中，此 Time Travel 设置文件的名称是 `task-settings-tt-enabled.json`。

同样，您可以将此文件指定为 `modify-replication-task` 操作的一部分。

请注意，对任务操作的 Time Travel 日志的特殊处理如下所示：
+ `start-replication-task` – 运行复制任务时，如果无法访问用于 Time Travel 的 S3 存储桶，该任务将被标记为 `FAILED`。
+ `stop-replication-task`— 任务停止后， AWS DMS 立即将复制实例当前可用的所有时空旅行日志推送到用于时空旅行的 S3 存储桶。

当复制任务运行时，您可以将 `EncryptionMode` 值从 `"SSE_KMS"` 更改为 `"SSE_S3"`，但不能反向更改。

如果进行中任务的 Time Travel 日志大小超过 1 GB，则 DMS 会在达到该大小后的五分钟内将日志推送到 S3。任务运行后，如果 S3 存储桶或 KMS 密钥变得无法访问，DMS 将停止向该存储桶推送日志。如果您发现您的日志未被推送到 S3 存储桶，请检查您的 S3 和 AWS KMS 权限。有关 DMS 将这些日志推送到 S3 的频率的更多详细信息，请参阅[将时空旅行日志 AWS DMS 上传到 S3 的频率](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.UploadsToS3.md)。

要从控制台中为现有任务启用 Time Travel，请使用**任务设置**下的 JSON 编辑器选项添加一个 `TTSettings` 部分。

# 使用 Time Travel 日志
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.LogSchema"></a>

*Time Travel 日志文件*是逗号分隔值（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
```

将 Time Travel 日志推送到 S3 后，可使用 Amazon Athena 等工具直接访问和查询这些日志。或者，您可以像从 S3 下载任何文件一样下载日志。

以下示例显示一个 Time Travel 日志，其中记录了名为 `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 卸载 Time Travel 日志。

在以下情况下，Time Travel 日志会被推送到您的 Amazon S3 存储桶：
+ 如果当前日志大小超过 1 GB，则在五分钟内将日志 AWS DMS 上传到 S3。因此， AWS KMS 对于每个正在运行的任务，每小时最多 AWS DMS 可以向 S3 调用 12 个调用。
+ AWS DMS 无论日志大小如何，每小时都会将日志上传到 S3。
+ 任务停止后， AWS DMS 立即将时空旅行日志上传到 S3。