

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

# 创建任务
<a name="CHAP_Tasks.Creating"></a>

要创建 AWS DMS 迁移任务，请执行以下操作：
+ 在创建迁移任务之前，创建源终端节点、目标终端节点以及复制实例。
+ 选择迁移方法：
  + **将数据迁移到目标数据库** – 该过程将在目标数据库中创建文件或表，并自动定义目标所需的元数据。它还会用源数据填充表。为提高效率，系统将并行加载表中的数据。此过程是中的 “**迁移现有数据**” 选项， AWS 管理控制台 在 API `Full Load` 中调用。
  + **迁移期间捕获更改** – 该过程捕获在将数据从源迁移到目标时对源数据库进行的更改。在完成最初请求的数据的迁移后，更改数据捕获 (CDC) 过程会将捕获到的更改应用于目标数据库。捕获更改并以单个提交事务为单位应用更改，并且可以将多个不同的目标表作为单个源提交进行更新。此方法可保证目标数据库中的事务完整性。该过程是控制台中的 **Migrate existing data and replicate ongoing changes (迁移现有数据并复制持续更改)** 选项，在 API 中称为 `full-load-and-cdc`。
  + **仅复制源数据库上的数据更改** – 该过程读取源数据库管理系统（DBMS）的恢复日志文件，并将每个事务的条目组合在一起。在某些情况下， AWS DMS 无法在合理的时间内对目标应用更改（例如，如果目标不可访问）。在这些情况下，只要有必要，就会在复制服务器上 AWS DMS 缓冲更改的时间。它不会重新读取源 DBMS 日志，这可能需要大量时间。该过程是 ** 控制台中的**仅复制数据更改 AWS DMS 选项。
+ 确定任务应如何处理源代码上的大型二进制对象 (LOBs)。有关更多信息，请参阅 [在任务中为源数据库设置 LOB 支持 AWS DMS](CHAP_Tasks.LOBSupport.md)。
+ 指定迁移任务设置。这些设置包括设置日志记录，指定写入到迁移控制表的数据，如何处理错误以及其他设置。有关任务设置的更多信息，请参阅[为 AWS Database Migration Service 任务指定任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.md)。
+ 设置表映射以定义用于选择和筛选要迁移的数据的规则。有关表映射的更多信息，请参阅[使用表映射指定任务设置](CHAP_Tasks.CustomizingTasks.TableMapping.md)。在指定映射之前，请确保查看有关源数据库和目标数据库之间的数据类型映射的文档部分。
+ 在运行任务之前，启用并运行迁移前任务评估。有关迁移前评估的更多信息，请参阅[为任务启用和使用迁移前评估](CHAP_Tasks.AssessmentReport.md)。
+ 指定迁移数据的任务所需的任何补充数据。有关更多信息，请参阅 [指定任务设置的补充数据](CHAP_Tasks.TaskData.md)。

您可以选择在 **Create task (创建任务)** 页面上指定任务的信息后立即启动任务。或者，您也可以稍后从控制面板页面启动任务。

以下过程假定您已经指定了复制实例信息和终端节点。有关设置端点的更多信息，请参阅[创建源和目标终端节点](CHAP_Endpoints.Creating.md)。

**创建迁移任务**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/dms/v2](https://console.aws.amazon.com/dms/v2/)/上打开 AWS DMS 控制台。

   如果您以 AWS Identity and Access Management (IAM) 用户身份登录，请确保您拥有相应的访问权限 AWS DMS。有关所需权限的更多信息，请参阅[使用所需的 IAM 权限 AWS DMS](security-iam.md#CHAP_Security.IAMPermissions)。

1. 在导航窗格中选择**数据库迁移任务**，然后选择**创建任务**。

1. 在**创建数据库迁移任务**页面的**任务配置**部分，指定任务选项。下表描述了设置。  
![\[创建任务\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/images/datarep-gs-wizard4.png)    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Tasks.Creating.html)

1. 在**任务设置**部分，指定用于编辑任务、目标表格准备模式、停止任务、LOB 设置、验证和日志记录的值。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Tasks.Creating.html)

1. 在**迁移前评估**部分，选择是否运行迁移前评估。在启动数据库迁移任务之前，迁移前评估会提醒您注意潜在的迁移问题。有关更多信息，请参阅 [启用和使用迁移前评估](CHAP_Tasks.AssessmentReport.md)。

1. 在**迁移任务启动配置**部分，指定是否在创建任务后自动启动。

1. 在**标签**部分，指定组织任务所需的任意标签。您可以使用标签管理您的 IAM 角色和策略，并跟踪您的 DMS 成本。有关更多信息，请参阅 [为资源添加标签](CHAP_Tagging.md)。

1. 完成任务设置后，请选择 **Create task (创建任务)**。

# 为 AWS Database Migration Service 任务指定任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings"></a>

每个任务都具有可根据数据库迁移需求配置的设置。您可以在 JSON 文件中创建这些设置，或者通过某些设置，您可以使用 AWS DMS 控制台指定设置。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

有几种主要类型的任务设置，如下所列。

**Topics**
+ [任务设置示例](#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)
+ [目标元数据任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md)
+ [完全加载任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md)
+ [Time Travel 任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.TimeTravel.md)
+ [日志记录任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.Logging.md)
+ [控制表任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.md)
+ [流缓冲区任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.StreamBuffer.md)
+ [更改处理优化设置](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)
+ [数据验证任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.DataValidation.md)
+ [数据重新同步设置](CHAP_Tasks.CustomizingTasks.TaskSettings.DataResyncSettings.md)
+ [更改处理 DDL 处理的任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md)
+ [字符替换任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.CharacterSubstitution.md)
+ [之前映像任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.BeforeImage.md)
+ [错误处理任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.ErrorHandling.md)
+ [保存任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.Saving.md)


| Task settings（任务设置） | 相关文档 | 
| --- | --- | 
|   **创建任务评估报告**  您可以创建一个任务评估报告，以显示在迁移期间可能出现问题的任何不支持的数据类型。在运行任务之前，您可以针对任务运行该报告以找出潜在的问题。  |  [为任务启用和使用迁移前评估](CHAP_Tasks.AssessmentReport.md)  | 
|   **创建任务**  在创建任务时，您可以指定源、目标和复制实例以及任何迁移设置。  |  [创建任务](CHAP_Tasks.Creating.md)  | 
|   **创建持续复制任务**  您可以设置任务，以便在源和目标之间提供持续复制。  |  [使用为正在进行的复制创建任务 AWS DMS](CHAP_Task.CDC.md)  | 
|   **应用任务设置**  每个任务都具有可根据数据库迁移需求配置的设置。您可以在 JSON 文件中创建这些设置，或者通过某些设置，您可以使用 AWS DMS 控制台指定设置。  |  [为 AWS Database Migration Service 任务指定任务设置](#CHAP_Tasks.CustomizingTasks.TaskSettings)  | 
|   **数据验证**  使用数据验证将目标数据存储中的数据与源数据存储中的数据 AWS DMS 进行比较。  |  [AWS DMS 数据验证](CHAP_Validating.md)  | 
|   **修改任务**  停止任务后，您可以修改任务的设置。  |  [修改任务](CHAP_Tasks.Modifying.md)  | 
|   **在任务期间重新加载表**  如果任务期间出错，您可以重新加载表。  |  [在任务期间重新加载表](CHAP_Tasks.ReloadTables.md)  | 
|   **使用表映射**  表映射使用多个类型的规则来指定任务设置，例如数据源、源架构、数据以及任务期间将发生的任何转换。  |  选择规则 [选择规则和操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md) 转换规则 [转换规则和操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Transformations.md)  | 
|   **应用筛选器**  您可以使用源筛选器来限制从源传输到目标的记录的数量和类型。例如，您可以指定仅将总部员工移动到目标数据库。还可以对数据列应用筛选器。  |  [使用源筛选器](CHAP_Tasks.CustomizingTasks.Filters.md)  | 
| 监控任务 可通过多种方式获取有关任务性能以及任务使用的表的信息。  |  [监控 AWS DMS 任务](CHAP_Monitoring.md)  | 
| 管理任务日志 您可以使用 AWS DMS API 或查看和删除任务日志 AWS CLI。  |  [查看和管理 AWS DMS 任务日志](CHAP_Monitoring.md#CHAP_Monitoring.ManagingLogs)  | 

## 任务设置示例
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.Example"></a>

您可以使用 AWS 管理控制台 或 AWS CLI 来创建复制任务。如果您使用 AWS CLI，则可以通过创建 JSON 文件，然后将 JSON 文件的 file://URI 指定为[CreateReplicationTask](https://docs.aws.amazon.com/dms/latest/APIReference/API_CreateReplicationTask.html)操作[ ReplicationTaskSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_CreateReplicationTask.html#DMS-CreateReplicationTask-request-ReplicationTaskSettings)参数来设置任务设置。

以下示例说明如何使用调 AWS CLI 用`CreateReplicationTask`操作：

```
aws dms create-replication-task \
--replication-task-identifier MyTask \
--source-endpoint-arn arn:aws:dms:us-west-2:123456789012:endpoint:ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABC \
--target-endpoint-arn arn:aws:dms:us-west-2:123456789012:endpoint:ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABC \
--replication-instance-arn arn:aws:dms:us-west-2:123456789012:rep:ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABC \
--migration-type cdc \
--table-mappings file://tablemappings.json \
--replication-task-settings file://settings.json
```

前面的示例使用名为 `tablemappings.json` 的表映射文件。有关表映射的示例，请参阅[使用表映射指定任务设置](CHAP_Tasks.CustomizingTasks.TableMapping.md)。

任务设置 JSON 文件可能如下所示：

```
{
  "TargetMetadata": {
    "TargetSchema": "",
    "SupportLobs": true,
    "FullLobMode": false,
    "LobChunkSize": 64,
    "LimitedSizeLobMode": true,
    "LobMaxSize": 32,
    "InlineLobMaxSize": 0,
    "LoadMaxFileSize": 0,
    "ParallelLoadThreads": 0,
    "ParallelLoadBufferSize":0,
    "ParallelLoadQueuesPerThread": 1,
    "ParallelApplyThreads": 0,
    "ParallelApplyBufferSize": 100,
    "ParallelApplyQueuesPerThread": 1,    
    "BatchApplyEnabled": false,
    "TaskRecoveryTableEnabled": false
  },
  "FullLoadSettings": {
    "TargetTablePrepMode": "DO_NOTHING",
    "CreatePkAfterFullLoad": false,
    "StopTaskCachedChangesApplied": false,
    "StopTaskCachedChangesNotApplied": false,
    "MaxFullLoadSubTasks": 8,
    "TransactionConsistencyTimeout": 600,
    "CommitRate": 10000
  },
    "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
      }
  },
  "Logging": {
    "EnableLogging": false
  },
  "ControlTablesSettings": {
    "ControlSchema":"",
    "HistoryTimeslotInMinutes":5,
    "HistoryTableEnabled": false,
    "SuspendedTablesTableEnabled": false,
    "StatusTableEnabled": false
  },
  "StreamBufferSettings": {
    "StreamBufferCount": 3,
    "StreamBufferSizeInMB": 8
  },
  "ChangeProcessingTuning": { 
    "BatchApplyPreserveTransaction": true, 
    "BatchApplyTimeoutMin": 1, 
    "BatchApplyTimeoutMax": 30, 
    "BatchApplyMemoryLimit": 500, 
    "BatchSplitSize": 0, 
    "MinTransactionSize": 1000, 
    "CommitTimeout": 1, 
    "MemoryLimitTotal": 1024, 
    "MemoryKeepTime": 60, 
    "StatementCacheSize": 50 
  },
  "ChangeProcessingDdlHandlingPolicy": {
    "HandleSourceTableDropped": true,
    "HandleSourceTableTruncated": true,
    "HandleSourceTableAltered": true
  },
  "LoopbackPreventionSettings": {
    "EnableLoopbackPrevention": true,
    "SourceSchema": "LOOP-DATA",
    "TargetSchema": "loop-data"
  },

  "CharacterSetSettings": {
    "CharacterReplacements": [ {
        "SourceCharacterCodePoint": 35,
        "TargetCharacterCodePoint": 52
      }, {
        "SourceCharacterCodePoint": 37,
        "TargetCharacterCodePoint": 103
      }
    ],
    "CharacterSetSupport": {
      "CharacterSet": "UTF16_PlatformEndian",
      "ReplaceWithCharacterCodePoint": 0
    }
  },
  "BeforeImageSettings": {
    "EnableBeforeImage": false,
    "FieldName": "",  
    "ColumnFilter": "pk-only"
  },
  "ErrorBehavior": {
    "DataErrorPolicy": "LOG_ERROR",
    "DataTruncationErrorPolicy":"LOG_ERROR",
    "DataMaskingErrorPolicy": "STOP_TASK",
    "DataErrorEscalationPolicy":"SUSPEND_TABLE",
    "DataErrorEscalationCount": 50,
    "TableErrorPolicy":"SUSPEND_TABLE",
    "TableErrorEscalationPolicy":"STOP_TASK",
    "TableErrorEscalationCount": 50,
    "RecoverableErrorCount": 0,
    "RecoverableErrorInterval": 5,
    "RecoverableErrorThrottling": true,
    "RecoverableErrorThrottlingMax": 1800,
    "ApplyErrorDeletePolicy":"IGNORE_RECORD",
    "ApplyErrorInsertPolicy":"LOG_ERROR",
    "ApplyErrorUpdatePolicy":"LOG_ERROR",
    "ApplyErrorEscalationPolicy":"LOG_ERROR",
    "ApplyErrorEscalationCount": 0,
    "FullLoadIgnoreConflicts": true
  },
  "ValidationSettings": {
    "EnableValidation": false,
    "ValidationMode": "ROW_LEVEL",
    "ThreadCount": 5,
    "PartitionSize": 10000,
    "FailureMaxCount": 1000,
    "RecordFailureDelayInMinutes": 5,
    "RecordSuspendDelayInMinutes": 30,
    "MaxKeyColumnSize": 8096,
    "TableFailureMaxCount": 10000,
    "ValidationOnly": false,
    "HandleCollationDiff": false,
    "RecordFailureDelayLimitInMinutes": 1,
    "SkipLobColumns": false,
    "ValidationPartialLobSize": 0,
    "ValidationQueryCdcDelaySeconds": 0
  }
}
```

# 目标元数据任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata"></a>

目标元数据设置包括：有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。
+ `TargetSchema` – 目标表架构名称。如果此元数据选项为空，则使用源表中的架构。如果未定义任何源架构， AWS DMS 自动将目标数据库的所有者前缀添加到所有表。对于 MySQL 类型的目标终端节点，该选项应保留为空。在数据映射中重命名架构优先于此设置。
+ LOB 设置-决定如何管理大型对象 (LOBs) 的设置。如果您设置 `SupportLobs=true`，则必须将下列项之一设置为 `true`：
  + `FullLobMode` – 如果将该选项设置为 `true`，则必须为 `LobChunkSize` 选项输入值。输入在将数据复制到目标时要使用的 LOB 数据块的大小 (以 KB 为单位)。`FullLobMode` 选项最适合非常大的 LOB 大小，但往往会导致加载速度较慢。`LobChunkSize` 的建议值为 64 KB。将 `LobChunkSize` 的值增加到 64 KB 以上可能会导致任务失败。
  + `InlineLobMaxSize`— 此值决定了在满载期间哪些以内联方式 LOBs AWS DMS 传输。小额 LOBs 传输比从源表中查找更有效。在满载期间， AWS DMS 检查所有 LOBs 并对小于的进行内联传输`InlineLobMaxSize`。 LOBs AWS DMS 转账全部 LOBs 大于 `InlineLobMaxSize` in `FullLobMode`。`InlineLobMaxSize` 的默认值是 0，范围为 1–102400 KB（100 MB）。`InlineLobMaxSize`只有在您知道大多数值 LOBs 都小于中指定的值时，才为设置值`InlineLobMaxSize`。
  + `LimitedSizeLobMode` – 如果将该选项设置为 `true`，则必须为 `LobMaxSize` 选项输入值。输入单个 LOB 的最大大小（以 KB 为单位）。`LobMaxSize` 的最大值为 102400 KB（100 MB）。

  有关这些任务 LOB 设置的使用条件的更多信息，请参阅[在任务中为源数据库设置 LOB 支持 AWS DMS](CHAP_Tasks.LOBSupport.md)。您还可以控制对单个表 LOBs 的管理。有关更多信息，请参阅 [表和集合设置规则和操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)。
+ `BatchApplyEnabled` – 确定是否单独应用了每个事务或是否批量提交了更改。默认值为 `false`。

  将 `BatchApplyEnabled` 设置为 `true` 时，DMS 要求**源**表上有主键（PK）或唯一密钥（UK）。如果源表上没有 PK 或 UK，则只能应用批量插入，不能应用批量更新和删除。

  将 `BatchApplyEnabled` 设置为 `true` 时，如果**目标**表具有唯一约束和主键，则 AWS DMS 生成错误消息。如果 `BatchApplyEnabled` 设置为 `true`，则不支持同时具有唯一约束和主键的目标表。

  如果设置`BatchApplyEnabled`为 true，并且在使用默认错误处理策略的表中 AWS DMS 遇到数据错误，则其余表的 AWS DMS 任务会从批处理 one-by-one模式切换到模式。要更改此行为，可以在任务设置 JSON 文件的 `"ErrorBehavior"` 组属性中设置对以下策略的 `"SUSPEND_TABLE"` 操作：
  + `DataErrorPolicy`
  + `ApplyErrorDeletePolicy`
  + `ApplyErrorInsertPolicy`
  + `ApplyErrorUpdatePolicy`

  有关此 `"ErrorBehavior"` 组属性的更多信息，请参阅[为 AWS Database Migration Service 任务指定任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.md)中的任务设置 JSON 文件示例。将这些策略设置为后`"SUSPEND_TABLE"`，该 AWS DMS 任务会暂停所有引发错误的表上的数据错误，并继续以批处理模式处理所有表。

  您可以将 `BatchApplyEnabled` 参数与 `BatchApplyPreserveTransaction` 参数一起使用。如果 `BatchApplyEnabled` 设置为 `true`，则 `BatchApplyPreserveTransaction` 参数确定事务完整性。

  如果 `BatchApplyPreserveTransaction` 设置为 `true`，则保留事务完整性，并确保批处理包含源中的事务的所有更改。

  如果 `BatchApplyPreserveTransaction` 设置为 `false`，则会临时放弃事务完整性以提高性能。

  `BatchApplyPreserveTransaction` 参数仅适用于 Oracle 目标终端节点，并且仅在 `BatchApplyEnabled` 参数设置为 `true` 时相关。

  如果复制中包含 LOB 列，则只能在受限 LOB 模式下使用 `BatchApplyEnabled`。

  有关将这些设置用于更改数据捕获（CDC）负载的更多信息，请参阅[更改处理优化设置](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)。
+ `MaxFullLoadSubTasks` – 指示要并行加载的表的最大数目。默认值为 8；最大值为 49。
+ `ParallelLoadThreads`— 指定用于将每个表加载到目标数据库的线程数。 AWS DMS 对于非 RDBMS 目标，此参数具有最大值。DynamoDB 目标的最大值为 200。亚马逊 Kinesis Data Streams、Apache Kafka 或 OpenSearch 亚马逊服务目标的最大值为 32。您可以要求增加该最大值。`ParallelLoadThreads` 适用于完全加载任务。有关单个表的并行加载设置的信息，请参阅 [表和集合设置规则和操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)。

  该设置适用于以下端点引擎类型：
  + DynamoDB
  + Amazon Kinesis Data Streams
  + Amazon MSK
  + 亚马逊 OpenSearch 服务
  + Amazon Redshift

  AWS DMS 支持 My `ParallelLoadThreads` SQL 作为额外的连接属性。 `ParallelLoadThreads`不适用于作为任务设置的 MySQL。
+ `ParallelLoadBufferSize` 指定在缓冲区（并行加载线程将数据加载到目标时使用）中存储的最大记录数。默认值是 50。最大值为 1000。目前，此设置仅在 DynamoDB、Kinesis、Apache Kafka 或是目标时才有效。 OpenSearch 将此参数与 `ParallelLoadThreads` 一起使用。仅在有多个线程时 `ParallelLoadBufferSize` 才有效。有关单个表的并行加载设置的信息，请参阅 [表和集合设置规则和操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)。
+ `ParallelLoadQueuesPerThread` – 指定每个并发线程访问的队列数，以便从队列中取出数据记录并为目标生成批处理负载。默认值是 1。目前，只有在 Kinesis 或 Apache Kafka 为目标时，此设置才有效。
+ `ParallelApplyThreads`— 指定 CDC 加载期间 AWS DMS 用于将数据记录推送到亚马逊 DocumentDB、Kinesis、Amazon MSK OpenSearch 或 Amazon Redshift 目标终端节点的并发线程数。默认值为零（0）。

  该设置仅适用于 CDC。该设置不适用于完全加载。

  

  该设置适用于以下端点引擎类型：
  + Amazon DocumentDB（兼容 MongoDB）
  + Amazon Kinesis Data Streams
  + Amazon Managed Streaming for Apache Kafka
  + 亚马逊 OpenSearch 服务
  + Amazon Redshift
+ `ParallelApplyBufferSize`— 指定在每个缓冲队列中存储的最大记录数，以便并发线程在 CDC 加载期间推送到亚马逊 DocumentDB、Kinesis、Amazon MSK OpenSearch 或 Amazon Redshift 目标终端节点。默认值是 100。最大值为 1000。当 `ParallelApplyThreads` 指定多个线程时，请使用此选项。
+ `ParallelApplyQueuesPerThread`— 指定每个线程访问的队列数量，以便从队列中提取数据记录，并在 CDC 期间为 Amazon DocumentDB、Kinesis、Amazon MSK 或终端节点生成批量加载。 OpenSearch默认值是 1。

# 完全加载任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad"></a>

完全加载设置包括：有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。
+ 要指示如何在完全加载启动时加载目标，请为 `TargetTablePrepMode` 选项指定下列值之一：
  +  `DO_NOTHING` – 现有目标表的数据和元数据不受影响。
  +  `DROP_AND_CREATE` – 删除现有表并在其位置创建一个新表。
  +  `TRUNCATE_BEFORE_LOAD` – 数据被截断，但不会影响表元数据。
+ 要将主键或唯一索引的创建延迟到完全加载后，请将 `CreatePkAfterFullLoad` 选项设置为 `true`。
+ 对于完全加载和支持 CDC 的任务，您可以为 `Stop task after full load completes` 设置以下选项：
  + `StopTaskCachedChangesApplied` – 将该选项设置为 `true` 可在完全加载完成并且已应用缓存的更改后停止任务。
  + `StopTaskCachedChangesNotApplied` – 将该选项设置为 `true` 可在应用缓存的更改前停止任务。
+ 要指示要并行加载的表的最大数目，请设置 `MaxFullLoadSubTasks` 选项。默认值为 8；最大值为 49。
+ 设置 `ParallelLoadThreads` 选项以指示 DMS 在完全加载过程中将使用多少并发线程将数据记录推送到目标端点。默认值为零（0）。
**重要**  
`MaxFullLoadSubTasks` 控制要并行加载的表或表段的数量。`ParallelLoadThreads` 控制迁移任务用于执行并行加载的线程数。*这些设置为相乘关系*。因此，完全加载任务期间使用的线程总数大约为 `ParallelLoadThreads `的值乘以 `MaxFullLoadSubTasks` 的值（`ParallelLoadThreads` **\$1** `MaxFullLoadSubtasks)`）。  
如果您创建的任务包含大量完全加载子任务和大量并行加载线程，则任务可能会消耗过多的内存并失败。
+ 您可以设置在开始满负荷操作之前 AWS DMS 等待交易关闭的秒数。为此，如果在任务开始时事务处于打开状态，请设置 `TransactionConsistencyTimeout` 选项。默认值为 600（10 分钟）。 AWS DMS 即使有未完成的交易，也会在达到超时值后开始满负荷。 full-load-only任务不会等待 10 分钟，而是会立即开始。
+ 要指示可一起传输的事件的最大数量，请设置 `CommitRate` 选项。默认值是 10000，最大值是 50000。

# 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。

# 日志记录任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.Logging"></a>

在迁移过程中 CloudWatch ，日志使用 Amazon 来记录信息。使用日志记录任务设置，您可指定要记录的组件活动以及将写入日志的信息量。日志记录任务设置写入到 JSON 文件。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

您可以通过多种方式开启 CloudWatch 日志记录。创建迁移任务 AWS 管理控制台 时，可以选择上的`EnableLogging`选项。或者，您可以在使用 AWS DMS API 创建任务`true`时将该`EnableLogging`选项设置为。也可以任务设置的日志记录部分的 JSON 形式指定 `"EnableLogging": true`。

如果设置`EnableLogging`为`true`，则按如下方式 AWS DMS 分配 CloudWatch 群组名称和直播名称。您无法直接设置这些值。
+ **CloudWatchLogGroup**: `dms-tasks-<REPLICATION_INSTANCE_IDENTIFIER>`
+ **CloudWatchLogStream**: `dms-task-<REPLICATION_TASK_EXTERNAL_RESOURCE_ID>`

`<REPLICATION_INSTANCE_IDENTIFIER>` 是复制实例的标识符。`<REPLICATION_TASK_EXTERNAL_RESOURCE_ID>` 是任务 ARN 的 `<resourcename>` 部分的值。有关如何 AWS DMS 生成资源的信息 ARNs，请参阅[为其构造亚马逊资源名称 (ARN) AWS DMS](CHAP_Introduction.AWS.ARN.md)。

CloudWatch 与 AWS Identity and Access Management (IAM) 集成，您可以指定 AWS 账户中的用户可以执行哪些 CloudWatch操作。有关使用 IAM 的更多信息 CloudWatch，请参阅《亚马逊* CloudWatch 用户指南》中的 “[亚马逊身份 CloudWatch和访问管理](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/auth-and-access-control-cw.html)” 和 “[记录亚马逊 CloudWatch API 调用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/logging_cw_api_calls.html)”。*

要删除任务日志，可以在任务设置日志记录部分的 JSON 中将 `DeleteTaskLogs` 设置为 true。

您可以为以下事件类型指定日志记录：
+ `FILE_FACTORY` – 文件工厂管理用于批量应用和批量加载的文件，并管理 Amazon S3 端点。
+ `METADATA_MANAGER` – 元数据管理器在复制期间管理源和目标元数据、分区和表状态。
+ `SORTER` – `SORTER` 接收来自 `SOURCE_CAPTURE` 进程的传入事件。这些事件在事务中进行批处理，然后传送给 `TARGET_APPLY` 服务组件。如果 `SOURCE_CAPTURE` 进程生成事件的速度超过 `TARGET_APPLY` 组件消耗事件的速度，则 `SORTER` 组件会将积压的事件缓存到磁盘或交换文件中。缓存的事件是复制实例中存储空间不足的常见原因。

  `SORTER` 服务组件管理缓存的事件、收集 CDC 统计数据并报告任务延迟。
+ `SOURCE_CAPTURE` – 从源数据库或服务中捕获持续复制（CDC）数据，并传送到 SORTER 服务组件。
+ `SOURCE_UNLOAD` – 在完全加载期间从源数据库或服务中卸载数据。
+ `TABLES_MANAGER` – 表格管理器跟踪捕获的表、管理表迁移顺序并收集表统计信息。
+ `TARGET_APPLY` – 数据和数据定义语言（DDL）语句将应用于目标数据库。
+ `TARGET_LOAD` – 数据已加载到目标数据库中。
+ `TASK_MANAGER` – 任务管理器管理进行中任务，并将任务分解为子任务以进行并行数据处理。
+ `TRANSFORMATION` – 表映射转换事件。有关更多信息，请参阅 [使用表映射指定任务设置](CHAP_Tasks.CustomizingTasks.TableMapping.md)。
+ `VALIDATOR/ VALIDATOR_EXT` – `VALIDATOR` 服务组件验证数据是否已准确地从源迁移到目标。有关更多信息，请参阅 [数据验证](CHAP_Validating.md)。
+ `DATA_RESYNC` – 数据重新同步功能的常用组件，用于管理数据重新同步流程。有关更多信息，请参阅 [AWS DMS 数据重新同步](CHAP_Validating.DataResync.md)。
+ `RESYNC_UNLOAD` – 在重新同步流程期间从源数据库或服务中卸载数据。
+ `RESYNC_APPLY` – 在重新同步期间，数据操作语言（DML）语句应用于目标数据库。

使用 `LOGGER_SEVERITY_DETAILED_DEBUG` 日志严重性级别时，以下日志组件会生成大量日志：
+ `COMMON`
+ `ADDONS`
+ `DATA_STRUCTURE`
+ `COMMUNICATION`
+ `FILE_TRANSFER`
+ `FILE_FACTORY`

在故障排除期间，这些组件很少需要 `DEFAULT` 以外的其他日志级别。除非Su AWS pport特别要求，否则我们不建议更改这些组件的日志级别。`DEFAULT`

指定上述任一操作后，您可以指定记录的信息量，如以下列表所示。

严重性级别按信息的最低级别到最高级别排列。较高级别始终包含较低级别的信息。
+ LOGGER\$1SEVERITY\$1ERROR – 将错误消息写入日志。
+ LOGGER\$1SEVERITY\$1WARNING – 将警告和错误消息写入日志。
+ LOGGER\$1SEVERITY\$1INFO – 将信息性消息、警告和错误消息写入日志。
+ LOGGER\$1SEVERITY\$1DEFAULT – 将信息性消息、警告和错误消息写入日志。
+ LOGGER\$1SEVERITY\$1DEBUG – 将调试消息、信息性消息、警告和错误消息写入日志。
+ LOGGER\$1SEVERITY\$1DETAILED\$1DEBUG – 将所有信息写入日志。

以下 JSON 示例显示了用于记录所有操作和严重性级别的任务设置。

```
…
  "Logging": {
    "EnableLogging": true,
    "LogComponents": [
      {
        "Id": "FILE_FACTORY",
        "Severity": "LOGGER_SEVERITY_DEFAULT"
      },{
        "Id": "METADATA_MANAGER",
        "Severity": "LOGGER_SEVERITY_DEFAULT"
      },{
        "Id": "SORTER",
        "Severity": "LOGGER_SEVERITY_DEFAULT"
      },{
        "Id": "SOURCE_CAPTURE",
        "Severity": "LOGGER_SEVERITY_DEFAULT"
      },{
        "Id": "SOURCE_UNLOAD",
        "Severity": "LOGGER_SEVERITY_DEFAULT"
      },{
        "Id": "TABLES_MANAGER",
        "Severity": "LOGGER_SEVERITY_DEFAULT"
      },{
        "Id": "TARGET_APPLY",
        "Severity": "LOGGER_SEVERITY_DEFAULT"
      },{
        "Id": "TARGET_LOAD",
        "Severity": "LOGGER_SEVERITY_INFO"
      },{
        "Id": "TASK_MANAGER",
        "Severity": "LOGGER_SEVERITY_DEBUG"
      },{
        "Id": "TRANSFORMATION",
        "Severity": "LOGGER_SEVERITY_DEBUG"
      },{
        "Id": "VALIDATOR",
        "Severity": "LOGGER_SEVERITY_DEFAULT"
      }
    ],
    "CloudWatchLogGroup": null,
    "CloudWatchLogStream": null
  }, 
…
```

# 控制表任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable"></a>

控制表提供有关 AWS DMS 任务的信息。它们还提供有用的统计数据，可用来计划和管理当前迁移任务和将来任务。您可以在 JSON 文件中应用这些任务设置，也可以通过在 AWS DMS 控制台的 “**创建任务” 页面上选择 **“高级设置**” 来应用这些任务**设置。将始终在数据库目标上创建应用异常表（`dmslogs.awsdms_apply_exceptions`）。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

AWS DMS 仅在 Full Load \$1 CDC 或仅限 CDC 任务期间创建控制表，而不能在 “仅限满载” 任务期间创建控制表。

对于完全加载和 CDC（迁移现有数据并复制持续更改）以及仅 CDC（仅复制数据更改）任务，您还可以创建其他表，包括以下表：
+ **复制状态（dmslogs.awsdms\$1status）**– 此表提供有关当前任务的详细信息。其中包括任务状态、任务使用的内存量以及尚未应用于目标的更改的数量。此表还给出了源数据库中当前 AWS DMS 正在读取的位置。它还指示任务是完全加载阶段还是更改数据捕获（CDC）。
+ **暂停的表（dmslogs.awsdms\$1suspended\$1tables）**– 该表提供一系列暂停的表及其暂停原因。
+ **复制历史记录（dmslogs.awsdms\$1history）**– 此表提供有关复制历史记录的信息。此信息包括任务期间处理的记录的数量、CDC 任务结束时的延迟以及其他统计数据。

应用例外表 (`dmslogs.awsdms_apply_exceptions`) 包含以下参数。


| 列 | Type | 说明 | 
| --- | --- | --- | 
|  TASK\$1NAME  |  nvchar  |   AWS DMS 任务的资源 ID。资源 ID 可以在任务 ARN 中找到。  | 
|  TABLE\$1OWNER  |  nvchar  |  表所有者。  | 
|  TABLE\$1NAME  |  nvchar  |  表名称。  | 
|  ERROR\$1TIME  |  timestamp  |  异常 (错误) 的出现时间。  | 
|  STATEMENT  |  nvchar  |  出错时运行的语句。  | 
|  ERROR  |  nvchar  |  错误名称和描述。  | 

复制状态表 (`dmslogs.awsdms_status`) 包含任务和目标数据库的当前状态。它具有以下设置。


| 列 | Type | 说明 | 
| --- | --- | --- | 
|  SERVER\$1NAME  |  nvchar  |  复制任务运行于的计算机的名称。  | 
|  TASK\$1NAME  |  nvchar  |   AWS DMS 任务的资源 ID。资源 ID 可以在任务 ARN 中找到。  | 
|  TASK\$1STATUS  |  varchar  |  下列值之一： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.html) 只要至少一个表处于完全加载状态，任务状态就会设置为 FULL LOAD。加载所有表后，任务状态将变为 CHANGE PROCESSING (如果已启用 CDC)。在开始任务之前或任务完成之后，任务设置为 NOT RUNNING。  | 
| STATUS\$1TIME |  timestamp  |  任务状态的时间戳。  | 
|  PENDING\$1CHANGES  |  int  |  在源数据库中提交并缓存在复制实例的内存和磁盘中的更改记录的数量。  | 
|  DISK\$1SWAP\$1SIZE  |  int  |  旧的或卸载的事务所占用的磁盘空间量。  | 
| TASK\$1MEMORY |  int  |  当前使用的内存 (以 MB 为单位)。  | 
|  SOURCE\$1CURRENT \$1POSITION  |  varchar  |  源数据库中当前 AWS DMS 正在读取数据的位置。  | 
|  SOURCE\$1CURRENT \$1TIMESTAMP  |  timestamp  |  源数据库中当前 AWS DMS 正在读取的时间戳。  | 
|  SOURCE\$1TAIL \$1POSITION  |  varchar  |  未提交的最早开始事务的位置。此值是可在不丢失任何更改的情况下恢复到的最新位置。  | 
|  SOURCE\$1TAIL \$1TIMESTAMP  |  timestamp  |  未提交的最早开始事务的时间戳。此值是可在不丢失任何更改的情况下恢复到的最新时间戳。  | 
|  SOURCE\$1TIMESTAMP \$1APPLIED  |  timestamp  |  最后一个事务提交的时间戳。在批量应用过程中，此值是批处理中最后一个事务的提交时间戳。  | 

暂停表（`dmslogs.awsdms_suspended_tables`）包含以下参数。


| 列 | Type | 说明 | 
| --- | --- | --- | 
|  SERVER\$1NAME  |  nvchar  |  复制任务运行于的计算机的名称。  | 
|  TASK\$1NAME  |  nvchar  |   AWS DMS 任务的名称  | 
|  TABLE\$1OWNER  |  nvchar  |  表所有者。  | 
|  TABLE\$1NAME  |  nvchar  |  表名称。  | 
|  SUSPEND\$1REASON  |  nvchar  |  暂停的原因。  | 
|  SUSPEND\$1TIMESTAMP  |  timestamp  |  暂停发生的时间。  | 

复制历史记录表 (`dmslogs.awsdms_history`) 包含以下参数。


| 列 | Type | 说明 | 
| --- | --- | --- | 
|  SERVER\$1NAME  |  nvchar  |  复制任务运行于的计算机的名称。  | 
|  TASK\$1NAME  |  nvchar  |   AWS DMS 任务的资源 ID。资源 ID 可以在任务 ARN 中找到。  | 
|  TIMESLOT\$1TYPE  |  varchar  |  下列值之一： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.ControlTable.html) 如果任务正在运行完全加载和 CDC，两条历史记录将写入时段。  | 
| TIMESLOT |  timestamp  |  时段的结束时间戳。  | 
|  TIMESLOT\$1DURATION  |  int  |  时段的持续时间（以分钟为单位）。  | 
|  TIMESLOT\$1LATENCY  |  int  |  时段结束时的目标延迟（以秒为单位）。此值仅适用于 CDC 时段。  | 
| RECORDS |  int  |  时段内处理的记录数。  | 
|  TIMESLOT\$1VOLUME  |  int  |  已处理的数据量（以 MB 为单位）。  | 

验证失败表（`awsdms_validation_failures_v1`）包含任务的所有数据验证失败。有关更多信息，请参阅[数据验证故障排除](CHAP_Validating.md#CHAP_Validating.Troubleshooting)。

其他控制表设置包括：
+ `HistoryTimeslotInMinutes` – 使用该选项指示复制历史记录表中每个时段的长度。默认值为 5 分钟。
+ `ControlSchema`— 使用此选项来指明 AWS DMS 目标控制表的数据库架构名称。如果未为选项输入任何信息，则表将复制到数据库中的默认位置，如下所示：
  + PostgreSQL，公共
  + Oracle，目标架构
  + Microsoft SQL Server，目标数据库中的 dbo
  + MySQL，awsdms\$1control
  + MariaDB，awsdms\$1control
  + Amazon Redshift，公共
  + DynamoDB，创建作为数据库中的单独表
  + IBM Db2 LUW，awsdms\$1control

# 流缓冲区任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.StreamBuffer"></a>

您可以使用来设置流缓冲区设置 AWS CLI，包括以下内容。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。
+ `StreamBufferCount` – 使用该选项指定迁移任务的数据流缓冲区数。默认流缓冲区数为 3。增大该设置的值可能会加快数据提取速度。但是，此性能提高在很大程度上依赖于迁移环境，包括源系统和复制服务器的实例类。对于大多数情况，默认值已足够。
+ `StreamBufferSizeInMB` – 使用该选项指示每个数据流缓冲区的最大大小。默认大小为 8 MB。当你处理非常大的时，你可能需要增加此选项的值 LOBs。如果日志文件中包含一条指示流缓冲区大小不足的消息，则也可能需要增大此值。计算此选项的大小时，您可以使用以下方程式：` [Max LOB size (or LOB chunk size)]*[number of LOB columns]*[number of stream buffers]*[number of tables loading in parallel per task(MaxFullLoadSubTasks)]*3`
+ `CtrlStreamBufferSizeInMB` – 使用该选项设置控制流缓冲区的大小。该值以 MB 为单位，范围介于 1–8 之间。默认值是 5。当处理巨大数量的表（如数万个表）时，您可能需要增大此值。

# 更改处理优化设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning"></a>

以下设置决定了在更改数据捕获 (CDC) 期间如何 AWS DMS 处理目标表的更改。这些设置中的多个设置取决于目标元数据参数 `BatchApplyEnabled` 的值。有关 `BatchApplyEnabled` 参数的更多信息，请参阅[目标元数据任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md)。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

更改处理优化设置包括：

以下设置仅在目标元数据参数 `BatchApplyEnabled` 设置为 `true` 时应用。
+ `BatchApplyPreserveTransaction` – 如果设置为 `true`，则保留事务完整性，并确保批处理包含源中的事务的所有更改。默认值为 `true`。该设置仅适用于 Oracle 目标终端节点。

  如果设置为 `false`，则会临时丢失事务完整性以提高性能。不能保证将源中事务的所有更改都应用于单个批处理中的目标。

  默认情况下， AWS DMS 处理以事务模式进行更改，这样可以保持事务的完整性。如果您可以承受事务完整性的临时失效，可以改为使用批量优化应用 选项。该选项有效分组事务并批量应用，以实现提高效率的目的。使用批量优化的应用选项几乎总是违反引用完整性约束。因此，我们建议您在迁移过程中关闭这些限制，然后在割接过程中再次将其打开。
+ `BatchApplyTimeoutMin`— 设置每次应用批量更改之间 AWS DMS 等待的最短时间（以秒为单位）。默认值是 1。
+ `BatchApplyTimeoutMax`— 设置每次应用批量更改之间在超时之前 AWS DMS 等待的最大时间（以秒为单位）。默认值为 30。
+ `BatchApplyMemoryLimit` – 设置在**批量优化应用模式**中用于预处理的最大内存量（MB）。默认值是 500。
+ `BatchSplitSize` – 设置在单个批次中应用的最大更改数。默认值 0 意味着未应用任何限制。

以下设置仅在目标元数据参数 `BatchApplyEnabled` 设置为 `false` 时应用。
+ `MinTransactionSize` – 设置要包含在每个事务中的更改的最小数目。默认值是 1000。
+ `CommitTimeout`— 设置在宣布超时之前分批收集交易的最长时间（ AWS DMS 以秒为单位）。默认值是 1。

对于双向复制，以下设置仅在目标元数据参数 `BatchApplyEnabled` 设置为 `false` 时应用。
+ `LoopbackPreventionSettings` – 这些设置为双向复制中涉及的任何一对任务中每个正在进行的复制任务提供环回防护。*环回防护* 可防止在双向复制的两个方向上应用完全相同的更改，这可能会损坏数据。有关双向复制的更多信息，请参阅[执行双向复制](CHAP_Task.CDC.md#CHAP_Task.CDC.Bidirectional)。

AWS DMS 尝试将事务数据保存在内存中，直到事务完全提交给源、目标或两者。但是，超过所分配内存的事务或未在指定时限内提交的事务将写入到磁盘。

以下设置适用于更改处理优化，无论更改处理模式如何。
+ `MemoryLimitTotal` – 设置所有事务在写入磁盘前可占用的内存的最大内存（以 MB 为单位）。默认值是 1024。
+ `MemoryKeepTime` – 设置每个事务在写入磁盘之前可在内存中保留的最长时间（以秒为单位）。持续时间是从 AWS DMS 开始捕获交易的时间开始计算的。默认值是 60。
+ `StatementCacheSize` – 设置在向目标应用更改时要存储在服务器上以便稍后执行的预编译语句的最大数目。默认值为 50，最大值为 200。
+ `RecoveryTimeout`— 在 CDC 模式下恢复任务时， RecoveryTimeout 控制任务等待多长时间（以分钟为单位）才会遇到恢复检查点。如果在配置的时间范围内未遇到检查点，则任务将失败。默认行为是无限期等待检查点事件。

通过一个示例演示处理更改处理调优的任务设置是如何显示在任务设置 JSON 文件中的：

```
"ChangeProcessingTuning": {
        "BatchApplyPreserveTransaction": true,
        "BatchApplyTimeoutMin": 1,
        "BatchApplyTimeoutMax": 30,
        "BatchApplyMemoryLimit": 500,
        "BatchSplitSize": 0,
        "MinTransactionSize": 1000,
        "CommitTimeout": 1,
        "MemoryLimitTotal": 1024,
        "MemoryKeepTime": 60,
        "StatementCacheSize": 50
        "RecoveryTimeout": -1
}
```

要控制在执行数据复制任务期间向 Amazon S3 目标写入的频率，您可以配置 `cdcMaxBatchInterval` 和 `cdcMinFileSize` 额外连接属性。这可以提高分析数据的性能，而无需任何额外的开销操作。有关更多信息，请参阅 [使用 Amazon S3 作为目标时的终端节点设置 AWS DMS](CHAP_Target.S3.md#CHAP_Target.S3.Configuring)。

# 数据验证任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.DataValidation"></a>

您可以确保准确地将您的数据从源迁移到目标。如果为任务启用验证，则在对表执行满载后立即 AWS DMS 开始比较源数据和目标数据。有关任务数据验证、其要求、其数据库支持的范围以及它报告的指标的更多信息，请参阅[AWS DMS 数据验证](CHAP_Validating.md)。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

 数据验证设置及其值包括：
+ `EnableValidation` – 在设置为 true 时，启用数据验证。否则，将为任务禁用验证。默认值为 False。
+ `ValidationMode`— 控制如何根据源表 AWS DMS 验证目标表中的数据。从复制引擎版本 3.5.4 开始，对于支持的迁移路径，DMS 会自动将其设置为 `GROUP_LEVEL`，从而增强了验证性能，并大大加快了大型数据集的处理速度。此增强功能适用于 [AWS DMS 数据重新](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.DataResync.html#CHAP_DataResync.limitations)同步中列出的迁移路径的迁移。对于所有其他迁移路径，验证模式默认为 `ROW_LEVEL`。
**注意**  
无论设置如何，都会 AWS DMS 验证通过表验证配置的所有行。
+ `FailureMaxCount` – 指定在暂停任务的验证之前可验证失败的记录的最大数目。默认值是 10000。如果您希望验证继续而不管验证失败的记录数如何，请将此值设置为大于源中记录数的值。
+ `HandleCollationDiff` – 如果此选项设为 `true`，则验证会考虑源数据库和目标数据库之间的列排序规则差异。否则，将忽略列排序规则中的任何此类差异以进行验证。列排序规则可以规定行的顺序，这对于数据验证很重要。将 `HandleCollationDiff` 设置为 true 可自动解析这些排序规则差异并防止数据验证中出现误报。默认值为 `false`。
+ `RecordFailureDelayInMinutes` – 指定报告任何验证失败详细信息之前的延迟（以分钟为单位）。

  如果总体 DMS 任务 CDC 延迟大于 `RecordFailureDelayInMinutesthen` 的值，则优先考虑该值；例如，如果 `RecordFailureDelayInMinutes` 为 5，CDC 延迟为 7 分钟，则 DMS 将等待 7 分钟以报告验证失败详细信息。
+ `RecordFailureDelayLimitInMinutes`— 指定报告任何验证失败详细信息之前的延迟。 AWS DMS 使用任务延迟来识别对目标进行更改的实际延迟，以防止误报。此设置会覆盖实际延迟值和 DMS 任务 CDC 延迟值，并允许您在报告任何验证指标之前设置更高的延迟。默认值是 0。
+ `RecordSuspendDelayInMinutes` – 指定根据 `FailureMaxCount` 中设置的错误阈值而暂停验证表之前的延迟时间（以分钟为单位）。
+ `SkipLobColumns`— 当此选项设置为时`true`，将 AWS DMS 跳过任务验证中表中所有 LOB 列的数据验证。默认值为 `false`。
+ `TableFailureMaxCount` – 指定在暂停表的验证之前可验证失败的、一个表中的最大行数。默认值是 1000。
+ `ThreadCount`— 指定验证期间 AWS DMS 使用的执行线程数。每个线程都从源和目标中选择 not-yet-validated数据进行比较和验证。默认值是 5。如果设置`ThreadCount`为更高的数字，则 AWS DMS 可以更快地完成验证。但是， AWS DMS 随后将执行更多同步查询，这将消耗源和目标上的更多资源。
+ `ValidationOnly` – 当该选项设置为 `true` 时，任务会执行数据验证，而不执行任何数据迁移或复制。默认值为 `false`。创建任务后，您将无法修改 `ValidationOnly` 设置。

  必须**TargetTablePrepMode**将迁移类型设置为`DO_NOTHING`（仅限验证的任务的默认值），并将 “**迁移类型**” 设置为以下选项之一：
  + 满载-在 AWS DMS 控制台中将任务**迁移类型****设置为迁移现有数据**。或者，在 AWS DMS API 中将迁移类型设置为满载。
  + CDC – 在 AWS DMS 控制台中将任务**迁移类型**设置为**仅复制数据更改**。或者，在 AWS DMS API 中将迁移类型设置为 CDC。

  无论选择哪种迁移类型，在仅限验证的任务中，实际上都不会迁移或复制数据。

  有关更多信息，请参阅 [仅验证任务](CHAP_Validating.md#CHAP_Validating.ValidationOnly)。
**重要**  
该 `ValidationOnly` 设置是不可变的。创建任务后，无法修改该任务的内容。
+ `ValidationPartialLobSize` – 指定是否要对 LOB 列进行部分验证，而不是验证存储在该列中的所有数据。当只迁移一部分 LOB 数据而不是整个 LOB 数据集时，可能会发现这很有用。该值以 KB 为单位。默认值是 0，这意味着 AWS DMS 验证所有 LOB 列数据。例如，`"ValidationPartialLobSize": 32`表示 AWS DMS 仅验证源和目标中列数据的前 32KB。
+ `PartitionSize` – 指定要从源和目标读取的记录的批量大小，以便进行比较。默认值是 10000。
+ `ValidationQueryCdcDelaySeconds` – 每次更新 CDC 时，源和目标上验证查询首次延迟的时间长度。当迁移延迟较长时，这可能有助于减少资源争用。仅限验证的任务会自动将此选项设置为 180 秒。默认值是 0。

例如，以下 JSON 支持使用两倍于默认线程数的线程进行数据验证。它还解释了由 PostgreSQL 终端节点中的列排序规则差异导致的记录顺序差异。此外，它还提供验证报告延迟，以考虑处理任何验证失败所需的额外时间。

```
"ValidationSettings": {
     "EnableValidation": true,
     "ThreadCount": 10,
     "HandleCollationDiff": true,
     "RecordFailureDelayLimitInMinutes": 30
  }
```

**注意**  
对于 Oracle 端点， AWS DMS 使用 DBMS\$1CRYPTO 进行验证。 BLOBs如果您的 Oracle 终端节点使用 BLOBs，请向访问 Oracle 终端节点的用户帐户授予 DBMS\$1CRYPTO `execute` 权限。为此，运行以下语句。  

```
grant execute on sys.dbms_crypto to dms_endpoint_user;
```

# 数据重新同步设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.DataResyncSettings"></a>

数据重新同步功能允许您根据数据验证报告将目标数据库与源数据库重新同步。有关更多信息，请参阅 [AWS DMS 数据验证](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)。

您可以在配置重新同步过程的 `ReplicationTaskSettings` 端点中为 `ResyncSettings` 添加其他参数。有关更多信息，请参阅[为 AWS Database Migration Service 任务指定任务设置](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.html)中的[任务设置示例](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.html#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

**注意**  
如果启用了重新同步过程并且任务包含 CDC 组件，则需要提供 `ResyncSchedule` 和 `MaxResyncTime` 参数。它们不适用于仅完全加载的任务。

数据重新同步参数的设置和值如下所示：

`EnableResync`  
设置为 `true` 时启用数据重新同步功能。默认已禁用数据重新同步。  
**数据类型**：布尔值  
**必需**：否  
**默认值**：`false`  
**验证**：如果 `ResyncSettings` 参数存在于 `TaskSettings` 中，则不应为 null。

`ResyncSchedule`  
数据重新同步功能生效的时间窗口。必须以 Cron 格式存在。有关更多信息，请参阅 [Cron 表达式规则](CHAP_Validating.DataResync.md#CHAP_DataResync.cron)。  
**数据类型**：字符串  
**必需**：否  
**验证**：  
+ 必须以 Cron 表达式格式存在。
+ 对于 CDC 已将 `EnableResync` 设为 `true` 的任务，不应为 null。
+ 无法为没有 CDC 组件的任务进行设置。

`MaxResyncTime`  
数据重新同步功能生效的最大时间限制（以分钟为单位）。  
**数据类型**：整数  
**必需**：否  
**验证**：  
+ 对于具有 CDC 的任务，不应为 null。
+ 没有 CDC 的任务则不需要。
+ 最小值：`5 minutes`，最大值：`14400 minutes`（10 天）。

`Validation onlyTaskID`  
验证任务的唯一 ID。仅验证任务 ID 会附加在 ARN 的末尾。例如：  
+ 仅验证任务 ARN：`arn:aws:dms:us-west-2:123456789012:task:6DG4CLGJ5JSJR67CFD7UDXFY7KV6CYGRICL6KWI`
+ 仅验证任务 ID：`6DG4CLGJ5JSJR67CFD7UDXFY7KV6CYGRICL6KWI`
**数据类型**：字符串  
**必需**：否  
**验证**：对于启用了数据重新同步功能并禁用了验证的任务，不应为 null。  
示例：  

```
"ResyncSettings": {
    "EnableResync": true,
    "ResyncSchedule": "30 9 ? * MON-FRI", 
    "MaxResyncTime": 400,  
    "ValidationTaskId": "JXPP94804DJOEWIJD9348R3049"
},
```

# 更改处理 DDL 处理的任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling"></a>



以下设置决定了在更改数据捕获 (CDC) 期间如何 AWS DMS 处理目标表的数据定义语言 (DDL) 更改。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

用于处理更改处理 DDL 的任务设置包括以下内容：
+ `HandleSourceTableDropped –` 将该选项设置为 `true` 可在删除源表后删除目标表。
+ `HandleSourceTableTruncated` – 将该选项设置为 `true` 可在截断源表时截断目标表。
+ `HandleSourceTableAltered` – 将该选项设置为 `true` 可在更改源表时更改目标表。

以下示例演示了处理更改处理 DDL 的任务设置是如何显示在任务设置 JSON 文件中的：

```
                "ChangeProcessingDdlHandlingPolicy": {
                   "HandleSourceTableDropped": true,
                   "HandleSourceTableTruncated": true,
                   "HandleSourceTableAltered": true
                },
```

**注意**  
有关特定端点所支持的 DDL 语句的信息，请参阅介绍该端点的主题。

# 字符替换任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.CharacterSubstitution"></a>

您可以指定您的复制任务在目标数据库上对`WSTRING`数据类型为 AWS DMS `STRING`或的所有源数据库列执行字符替换。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

您可以为具有来自以下源和目标数据库的终端节点的任意任务配置字符替换：
+ 源数据库：
  + Oracle
  + Microsoft SQL Server
  + MySQL
  + MariaDB
  + PostgreSQL
  + SAP Adaptive Server Enterprise（ASE）
  + IBM Db2 LUW
+ 目标数据库：
  + Oracle
  + Microsoft SQL Server
  + MySQL
  + MariaDB
  + PostgreSQL
  + SAP Adaptive Server Enterprise（ASE）
  + Amazon Redshift

您可以在任务设置中使用 `CharacterSetSettings` 参数指定字符替换。这些字符替换发生在使用 Unicode 码位值（采用十六进制表示法）指定的字符处。您可以分两个阶段实施替换，在指定了这两个阶段时需按以下顺序进行：

1. **单个字符替换**- AWS DMS 可以将源上所选字符的值替换为目标上相应字符的指定替换值。使用 `CharacterSetSettings` 中的 `CharacterReplacements` 数组，选择具有您指定的 Unicode 码位的所有源字符。使用此数组还可以指定目标上对应字符的替换码位。

   要选择源上具有指定码位的所有字符，请将 `CharacterReplacements` 数组中 `SourceCharacterCodePoint` 的实例设置为该码位。然后通过在此数组中设置 `TargetCharacterCodePoint` 的对应实例，指定所有等同目标字符的替换码位。要删除目标字符而不是替换它们，请将 `TargetCharacterCodePoint` 的对应实例设置为零 (0)。您可以通过在 `CharacterReplacements` 数组中指定额外的 `SourceCharacterCodePoint` 和 `TargetCharacterCodePoint` 对，替换或删除所需任意数量的不同目标字符值。如果您为 `SourceCharacterCodePoint` 的多个实例指定了相同值，则 `TargetCharacterCodePoint` 的上一个对应设置的值应用到目标。

   例如，假设您为 `CharacterReplacements` 指定以下值。

   ```
   "CharacterSetSettings": {
       "CharacterReplacements": [ {
           "SourceCharacterCodePoint": 62,
           "TargetCharacterCodePoint": 61
           }, {
           "SourceCharacterCodePoint": 42,
           "TargetCharacterCodePoint": 41
           }
       ]
   }
   ```

   在此示例中， AWS DMS 将目标上源代码点十六进制值 62 的所有字符替换为代码点值 61 的字符。此外， AWS DMS 将目标上源代码点 42 的所有字符替换为代码点值 41 的字符。换而言之， AWS DMS 在目标上将字母 `'b'` 的所有实例替换为字母 `'a'`。同样， AWS DMS 用字母替换目标`'B'`上字母的所有实例`'A'`。

1. **字符集验证和替换**-完成任何单个字符替换后， AWS DMS 可以确保所有目标字符在您指定的单个字符集中都有有效的 Unicode 代码点。您可使用 `CharacterSetSettings` 中的 `CharacterSetSupport` 来配置此目标字符验证和修改。要指定验证字符集，请将 `CharacterSetSupport` 中的 `CharacterSet` 设置为字符集字符串值。（`CharacterSet` 的可能值见下文。） 您可以通过以下方式之一 AWS DMS 修改无效的目标字符：
   + 为所有无效目标字符指定单个替换 Unicode 码位，不论其当前码位如何。要配置此替换码位，请将 `CharacterSetSupport` 中的 `ReplaceWithCharacterCodePoint` 设置为指定值。
   + 通过将 `ReplaceWithCharacterCodePoint` 设置为零 (0) 配置删除所有无效目标字符。

   例如，假设您为 `CharacterSetSupport` 指定以下值。

   ```
   "CharacterSetSettings": {
       "CharacterSetSupport": {
           "CharacterSet": "UTF16_PlatformEndian",
           "ReplaceWithCharacterCodePoint": 0
       }
   }
   ```

   在此示例中， AWS DMS 删除目标上发现的字符集中无效的所有`"UTF16_PlatformEndian"`字符。因此，将删除使用十六进制值 `2FB6` 指定的任意字符。此值无效，因为这是一个 4 字节的 Unicode 码点，并且 UTF16 字符集仅接受带有 2 字节码点的字符。

**注意**  
复制任务在启动您通过表映射指定的任意全局或表级别转换之前，完成所有指定的字符替换。有关表映射的更多信息，请参阅[使用表映射指定任务设置](CHAP_Tasks.CustomizingTasks.TableMapping.md)。  
字符替换不支持 LOB 数据类型。这包括 DMS 认为是 LOB 数据类型的任何数据类型。例如，Oracle 中的 `Extended` 数据类型被视为 LOB。有关源数据类型的更多信息，请参阅下面的 [Oracle 的源数据类型](CHAP_Source.Oracle.md#CHAP_Source.Oracle.DataTypes)。

 AWS DMS 支持的值`CharacterSet`显示在下表中。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.CharacterSubstitution.html)

# 之前映像任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.BeforeImage"></a>

在将 CDC 更新写入数据流目标（如 Kinesis 或 Apache Kafka）时，可以在更新进行更改之前查看源数据库行的原始值。为此，请根据源数据库引擎提供的数据 AWS DMS 填充更新事件*之前的图像*。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。

为此，可使用 `BeforeImageSettings` 参数，它使用从源数据库系统收集的值向每个更新操作添加一个新的 JSON 属性。

确保仅对完全加载及 CDC 任务或仅 CDC 的任务应用 `BeforeImageSettings`。完全加载及 CDC 任务可迁移现有数据并复制持续更改。仅 CDC 任务仅仅复制数据更改。

不将 `BeforeImageSettings` 应用于仅完全加载的任务。

`BeforeImageSettings` 的可用选项如下所示：
+ `EnableBeforeImage` – 设置为 `true` 时，在映像前开启。默认值为 `false`。
+ `FieldName` – 为新的 JSON 属性指定名称。当 `EnableBeforeImage` 为 `true` 时，`FieldName` 是必填项且不能为空。
+ `ColumnFilter` – 指定要使用之前映像添加的列。要仅添加属于表主键一部分的列，请使用默认值 `pk-only`。要添加具有之前映像值的任何列，请使用 `all`。请注意，之前的图像不支持大型二进制对象（LOB）数据类型，例如 CLOB 和 BLOB。

下面的示例演示 `BeforeImageSettings` 的用法。

```
"BeforeImageSettings": {
    "EnableBeforeImage": true,
    "FieldName": "before-image",
    "ColumnFilter": "pk-only"
  }
```

有关 Kinesis 的之前映像设置（包括其他表映射设置）的信息，请参阅[使用之前映像查看 Kinesis 数据流（作为目标）的 CDC 行的原始值](CHAP_Target.Kinesis.md#CHAP_Target.Kinesis.BeforeImage)。

有关 Kafka 的之前映像设置（包括其他表映射设置）的信息，请参阅 [使用之前映像查看 Apache Kafka（作为目标）的 CDC 行的原始值](CHAP_Target.Kafka.md#CHAP_Target.Kafka.BeforeImage)。

# 错误处理任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.ErrorHandling"></a>

可以使用以下设置来设置复制任务的错误处理行为。有关如何使用任务配置文件来设置任务设置的信息，请参阅[任务设置示例](CHAP_Tasks.CustomizingTasks.TaskSettings.md#CHAP_Tasks.CustomizingTasks.TaskSettings.Example)。
+ `DataErrorPolicy`— 确定在记录级别出现与数据处理相关的错误时， AWS DMS 采取的操作。数据处理错误的一些示例包括转换错误、变换中的错误和不正确的数据。默认值为 `LOG_ERROR`。
  + `IGNORE_RECORD` – 任务继续，并且将忽略该记录的数据。`DataErrorEscalationCount` 属性的错误计数器将递增。因此，如果您为表设置错误数限制，则此错误将计入限制。
  + `LOG_ERROR` – 任务继续，并且错误将写入任务日志。
  + `SUSPEND_TABLE` – 任务继续，但带错误记录的表中的数据将移至错误状态，并且不会复制数据。
  + `STOP_TASK` – 任务停止，并且需要手动干预。
+ `DataTruncationErrorPolicy` – 决定在数据被截断时， AWS DMS 执行的操作。默认值为 `LOG_ERROR`。
  + `IGNORE_RECORD` – 任务继续，并且将忽略该记录的数据。`DataErrorEscalationCount` 属性的错误计数器将递增。因此，如果您为表设置错误数限制，则此错误将计入限制。
  + `LOG_ERROR` – 任务继续，并且错误将写入任务日志。
  + `SUSPEND_TABLE` – 任务继续，但带错误记录的表中的数据将移至错误状态，并且不会复制数据。
  + `STOP_TASK` – 任务停止，并且需要手动干预。
+ `DataErrorEscalationPolicy` – 决定在达到最大错误数（在 `DataErrorEscalationCount` 参数中设置）时， AWS DMS 执行的操作。默认值为 `SUSPEND_TABLE`。
  + `SUSPEND_TABLE` – 任务继续，但带错误记录的表中的数据将移至错误状态，并且不会复制数据。
  + `STOP_TASK` – 任务停止，并且需要手动干预。
+ `DataErrorEscalationCount` – 设置特定记录的数据可出现的错误的最大数目。当达到此数目时，将根据 `DataErrorEscalationPolicy` 中设置的策略来处理包含错误记录的表的数据。默认值是 0。
+ `EventErrorPolicy`— 确定 AWS DMS 在发送与任务相关的事件时发生错误时采取的操作。可能的值包括
  + `IGNORE` – 任务继续，与该事件关联的所有数据都将被忽略。
  + `STOP_TASK` – 任务停止，并且需要手动干预。
+ `TableErrorPolicy` – 决定在处理特定表的数据或元数据时出错的情况下， AWS DMS 执行的操作。此错误仅适用于常规表数据，而不是与特定记录相关的错误。默认值为 `SUSPEND_TABLE`。
  + `SUSPEND_TABLE` – 任务继续，但带错误记录的表中的数据将移至错误状态，并且不会复制数据。
  + `STOP_TASK` – 任务停止，并且需要手动干预。
+ `TableErrorEscalationPolicy` – 决定在达到最大错误数（使用 `TableErrorEscalationCount` 参数设置）时， AWS DMS 执行的操作。默认用户设置为 `STOP_TASK`，其中任务将停止，并且需要手动干预。
+ `TableErrorEscalationCount` – 特定表的常规数据或元数据可出现的错误的最大数目。当达到此数目时，将根据 `TableErrorEscalationPolicy` 中设置的策略处理表的数据。默认值是 0。
+ `RecoverableErrorCount` – 在出现环境错误时，可尝试重新启动任务的最大次数。在系统尝试重新启动任务指定次数时，任务将停止，并且需要手动干预。默认值为 -1。

  当您将此值设置为 -1 时，DMS 尝试的重试次数会根据返回的错误类型而有所不同，如下所示：
  + **运行状态，可恢复的错误**：如果出现可恢复的错误，例如连接中断或目标应用失败，DMS 将重试任务九次。
  + **启动状态，可恢复的错误**：DMS 重试任务六次。
  + **运行状态，DMS 处理的致命错误**：DMS 重试任务六次。
  + **运行状态，DMS 处理的致命错误**：DMS 不重试任务。
  + **除上述以外**：无限期 AWS DMS 重试任务。

  将此值设置为 0 将从不尝试重新启动任务。

  建议您设置 `RecoverableErrorCount` 和 `RecoverableErrorInterval` 值时应确保在足够的时间间隔内有足够的重试次数，以便 DMS 任务能够正常恢复。如果发生致命错误，则在大多数情况下，DMS 会停止尝试重新启动。
+ `RecoverableErrorInterval`— AWS DMS 在两次尝试重启任务之间等待的秒数。默认值是 5。
+ `RecoverableErrorThrottling` – 启用后，尝试重启任务的间隔将根据 `RecoverableErrorInterval` 的值连续增加。例如，如果 `RecoverableErrorInterval` 设置为 5 秒，则下一次重试将在 10 秒后进行，然后是 20 秒，然后是 40 秒，依此类推。默认值为 `true`。
+ `RecoverableErrorThrottlingMax`— 如果`RecoverableErrorThrottling`启用， AWS DMS 在尝试重启任务之间等待的最大秒数。默认值是 1800。
+ `RecoverableErrorStopRetryAfterThrottlingMax`— 默认值设置为`true`，达到两次恢复尝试之间 AWS DMS 等待的最大秒数后，DMS 将停止恢复任务。`RecoverableErrorStopRetryAfterThrottlingMax`如果设置为`false`，则在达到恢复尝试之间 AWS DMS 等待的最大秒数后，DMS 会继续恢复任务，`RecoverableErrorStopRetryAfterThrottlingMax`直到达到为止`RecoverableErrorCount`。
+ `ApplyErrorDeletePolicy` – 决定在与 DELETE 操作发生冲突时， AWS DMS 执行的操作。默认值为 `IGNORE_RECORD`。可能的值包括：
  + `IGNORE_RECORD` – 任务继续，并且将忽略该记录的数据。`ApplyErrorEscalationCount` 属性的错误计数器将递增。因此，如果您为表设置错误数限制，则此错误将计入限制。
  + `LOG_ERROR` – 任务继续，并且错误将写入任务日志。
  + `SUSPEND_TABLE` – 任务继续，但带错误记录的表中的数据将移至错误状态，并且不会复制数据。
  + `STOP_TASK` – 任务停止，并且需要手动干预。
+ `ApplyErrorInsertPolicy` – 决定在与 INSERT 操作发生冲突时， AWS DMS 执行的操作。默认值为 `LOG_ERROR`。可能的值包括：
  + `IGNORE_RECORD` – 任务继续，并且将忽略该记录的数据。`ApplyErrorEscalationCount` 属性的错误计数器将递增。因此，如果您为表设置错误数限制，则此错误将计入限制。
  + `LOG_ERROR` – 任务继续，并且错误将写入任务日志。
  + `SUSPEND_TABLE` – 任务继续，但带错误记录的表中的数据将移至错误状态，并且不会复制数据。
  + `STOP_TASK` – 任务停止，并且需要手动干预。
  + `INSERT_RECORD` – 如果存在带与插入的源记录相同的主键的现有目标记录，则更新该目标记录。
**注意**  
**在“事务应用”模式下**：在此过程中，系统首先尝试插入记录。如果由于主键冲突而导致插入失败，则会删除现有记录，然后插入新记录。
**在“批量应用”模式下**：在插入完整的新记录集之前，该过程会移除目标批次中的所有现有记录，从而确保干净地替换数据。
此过程可以防止数据重复，但与默认策略相比，会产生一些性能损失。确切的性能影响取决于您的具体工作负载特征。
+ `ApplyErrorUpdatePolicy` – 决定在与 UPDATE 操作发生缺少数据的冲突时， AWS DMS 执行的操作。默认值为 `LOG_ERROR`。可能的值包括：
  + `IGNORE_RECORD` – 任务继续，并且将忽略该记录的数据。`ApplyErrorEscalationCount` 属性的错误计数器将递增。因此，如果您为表设置错误数限制，则此错误将计入限制。
  + `LOG_ERROR` – 任务继续，并且错误将写入任务日志。
  + `SUSPEND_TABLE` – 任务继续，但带错误记录的表中的数据将移至错误状态，并且不会复制数据。
  + `STOP_TASK` – 任务停止，并且需要手动干预。
  + `UPDATE_RECORD`— 如果缺少目标记录，则会将缺失的目标记录插入到目标表中。 AWS DMS 完全禁用对任务的 LOB 列支持。选择该选项要求在 Oracle 作为源数据库时为所有源表列启用完整补充日志记录。
**注意**  
**在“事务应用”模式下**：在此过程中，系统首先尝试更新记录。如果由于目标上缺少记录而导致更新失败，则会对失败的记录执行删除操作，然后插入新记录。此过程需要 Oracle 源数据库的完整补充日志记录，而 DMS 禁用了对此任务的 LOB 列支持。
**在“批量应用”模式下**：在插入完整的新记录集之前，该过程会移除目标批次中的所有现有记录，从而确保干净地替换数据。
+ `ApplyErrorEscalationPolicy`— 确定当达到最大错误数（使用`ApplyErrorEscalationCount`参数设置）时， AWS DMS 将采取什么操作。默认值为 LOG\$1ERROR：
  + `LOG_ERROR` – 任务继续，并且错误将写入任务日志。
  + `SUSPEND_TABLE` – 任务继续，但带错误记录的表中的数据将移至错误状态，并且不会复制数据。
  + `STOP_TASK` – 任务停止，并且需要手动干预。
+ `ApplyErrorEscalationCount` – 该选项设置在更改处理操作期间，特定表可发生的 APPLY 冲突的最大次数。达到此数目时，将根据 `ApplyErrorEscalationPolicy` 参数中设置的策略处理表数据。默认值是 0。
+ `ApplyErrorFailOnTruncationDdl` – 如果将该选项设置为 `true`，则会导致在 CDC 期间对任何跟踪的表执行截断时任务失败。默认值为 `false`。

  此方式不适用于 PostgreSQL 11.x 或以下版本，以及不复制 DDL 表截断的任何其他源端点。
+ `FailOnNoTablesCaptured` – 如果将该选项设置为 `true`，则会导致在任务启动时为任务定义的表映射找不到表时任务失败。默认值为 `true`。
+ `FailOnTransactionConsistencyBreached` – 该选项适用于将 Oracle 作为 CDC 源的任务。默认值为 false。如果将该选项设置为 `true`，则会导致当事务的打开时间超出指定超时并可能删除时任务失败。

  当 CDC 任务从 Oracle 开始时，在启动 CDC 之前，需要 AWS DMS 等待最早的未平仓交易关闭一段有限的时间。如果最早的未结交易直到达到超时后才关闭，则在大多数情况下， AWS DMS 会启动 CDC，忽略该交易。如果将该选项设置为 `true`，则任务将失败。
+ `FullLoadIgnoreConflicts`— 将此选项设置为`true`在应用缓存事件时 AWS DMS 忽略 “受影响的零行” 和 “重复” 错误。如果设置为`false`，则 AWS DMS 报告所有错误而不是忽略错误。默认值为 `true`。
+ `DataMaskingErrorPolicy`— 确定由于数据类型不兼容或任何其他原因导致数据屏蔽失败时 AWS DMS 采取的操作。可用选项如下：
  + `STOP_TASK`（默认）– 任务停止，并且需要手动干预。
  + `IGNORE_RECORD` – 任务继续，并且将忽略该记录的数据。
  + `LOG_ERROR` – 任务继续，并且错误将写入任务日志。未掩蔽的数据将加载到目标表中。
  + `SUSPEND_TABLE` – 任务继续，但带错误记录的表中的数据将移至错误状态，并且不会复制数据。

**注意**  
 中报告了 Redshift 作为目标的表格加载错误。`STL_LOAD_ERRORS`有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [STL\$1LOAD\$1ERRORS](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_LOAD_ERRORS.html)。

**注意**  
与可恢复错误相关的参数更改只有在您停止并恢复 DMS 任务后才会生效。更改不适用于当前执行。

# 保存任务设置
<a name="CHAP_Tasks.CustomizingTasks.TaskSettings.Saving"></a>

可以将任务设置另存为 JSON 文件（如果您需要将这些设置重用于另一个任务）。您可以在任务的**概述详细信息**部分下找到要复制到 JSON 文件的任务设置。

**注意**  
在将任务设置重复用于其他任务时，请移除任何 `CloudWatchLogGroup` 和 `CloudWatchLogStream` 属性。否则，将出现以下错误：系统错误消息：任务设置 CloudWatchLogGroup 或 CloudWatchLogStream 无法在创建时进行设置。

例如，以下 JSON 文件包含为任务保存的设置。

```
{
    "TargetMetadata": {
        "TargetSchema": "",
        "SupportLobs": true,
        "FullLobMode": false,
        "LobChunkSize": 0,
        "LimitedSizeLobMode": true,
        "LobMaxSize": 32,
        "InlineLobMaxSize": 0,
        "LoadMaxFileSize": 0,
        "ParallelLoadThreads": 0,
        "ParallelLoadBufferSize": 0,
        "BatchApplyEnabled": false,
        "TaskRecoveryTableEnabled": false,
        "ParallelLoadQueuesPerThread": 0,
        "ParallelApplyThreads": 0,
        "ParallelApplyBufferSize": 0,
        "ParallelApplyQueuesPerThread": 0
    },
    "FullLoadSettings": {
        "TargetTablePrepMode": "DO_NOTHING",
        "CreatePkAfterFullLoad": false,
        "StopTaskCachedChangesApplied": false,
        "StopTaskCachedChangesNotApplied": false,
        "MaxFullLoadSubTasks": 8,
        "TransactionConsistencyTimeout": 600,
        "CommitRate": 10000
    },
    "Logging": {
        "EnableLogging": true,
        "LogComponents": [
            {
                "Id": "TRANSFORMATION",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "SOURCE_UNLOAD",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "IO",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "TARGET_LOAD",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "PERFORMANCE",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "SOURCE_CAPTURE",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "SORTER",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "REST_SERVER",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "VALIDATOR_EXT",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "TARGET_APPLY",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "TASK_MANAGER",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "TABLES_MANAGER",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "METADATA_MANAGER",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "FILE_FACTORY",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "COMMON",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "ADDONS",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "DATA_STRUCTURE",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "COMMUNICATION",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            },
            {
                "Id": "FILE_TRANSFER",
                "Severity": "LOGGER_SEVERITY_DEFAULT"
            }
        ]
    },
    "ControlTablesSettings": {
        "ControlSchema": "",
        "HistoryTimeslotInMinutes": 5,
        "HistoryTableEnabled": false,
        "SuspendedTablesTableEnabled": false,
        "StatusTableEnabled": false,
        "FullLoadExceptionTableEnabled": false
    },
    "StreamBufferSettings": {
        "StreamBufferCount": 3,
        "StreamBufferSizeInMB": 8,
        "CtrlStreamBufferSizeInMB": 5
    },
    "ChangeProcessingDdlHandlingPolicy": {
        "HandleSourceTableDropped": true,
        "HandleSourceTableTruncated": true,
        "HandleSourceTableAltered": true
    },
    "ErrorBehavior": {
        "DataErrorPolicy": "LOG_ERROR",
        "DataTruncationErrorPolicy": "LOG_ERROR",
        "DataErrorEscalationPolicy": "SUSPEND_TABLE",
        "DataErrorEscalationCount": 0,
        "TableErrorPolicy": "SUSPEND_TABLE",
        "TableErrorEscalationPolicy": "STOP_TASK",
        "TableErrorEscalationCount": 0,
        "RecoverableErrorCount": -1,
        "RecoverableErrorInterval": 5,
        "RecoverableErrorThrottling": true,
        "RecoverableErrorThrottlingMax": 1800,
        "RecoverableErrorStopRetryAfterThrottlingMax": true,
        "ApplyErrorDeletePolicy": "IGNORE_RECORD",
        "ApplyErrorInsertPolicy": "LOG_ERROR",
        "ApplyErrorUpdatePolicy": "LOG_ERROR",
        "ApplyErrorEscalationPolicy": "LOG_ERROR",
        "ApplyErrorEscalationCount": 0,
        "ApplyErrorFailOnTruncationDdl": false,
        "FullLoadIgnoreConflicts": true,
        "FailOnTransactionConsistencyBreached": false,
        "FailOnNoTablesCaptured": true
    },
    "ChangeProcessingTuning": {
        "BatchApplyPreserveTransaction": true,
        "BatchApplyTimeoutMin": 1,
        "BatchApplyTimeoutMax": 30,
        "BatchApplyMemoryLimit": 500,
        "BatchSplitSize": 0,
        "MinTransactionSize": 1000,
        "CommitTimeout": 1,
        "MemoryLimitTotal": 1024,
        "MemoryKeepTime": 60,
        "StatementCacheSize": 50
    },
    "PostProcessingRules": null,
    "CharacterSetSettings": null,
    "LoopbackPreventionSettings": null,
    "BeforeImageSettings": null,
    "FailTaskWhenCleanTaskResourceFailed": false
}
```

# 在任务中为源数据库设置 LOB 支持 AWS DMS
<a name="CHAP_Tasks.LOBSupport"></a>

大型二进制对象 (LOBs) 有时可能很难在系统之间迁移。 AWS DMS 提供了许多选项来帮助调整 LOB 列。要了解何时考虑 LOBs 哪些数据类型 AWS DMS，请参阅 AWS DMS 文档。

当您将数据从一个数据库迁移到另一个数据库时，您可能会借此机会重新考虑您的 LOBs 存储方式，尤其是对于异构迁移。如果您需要这样做，则无需迁移 LOB 数据。

如果您决定包含 LOBs，则可以决定其他 LOB 设置：
+ LOB 模式决定了如何处理 LOBs ：
  + **完整 LOB 模式** — 在完整 LOB 模式下，无论大小如何，都会将所有 LOBs 内容从源 AWS DMS 迁移到目标。在此配置中， AWS DMS 没有关于预期的最大 LOBs 大小的信息。因此 LOBs ，逐个迁移。完整 LOB 模式下的速度非常慢。
  + **受限 LOB 模式** – 在受限 LOB 模式下，您设置 DMS 接受的最大 LOB 大小。这使得 DMS 能够预先分配内存并批量加载 LOB 数据。 LOBs超过最大 LOB 大小的会被截断，并向日志文件发出警告。在受限 LOB 模式下，您可以获得比完整 LOB 模式高得多的性能。如果可能，建议您使用受限 LOB 模式。此参数的最大值为 102400 KB（100 MB）。
**注意**  
使用值大于 63KB 的最大 LOB 大小（K）选项会影响配置为在受限 LOB 模式下运行的完全加载的性能。在完全加载期间，DMS 通过将最大 LOB 大小（K）值乘以提交速率来分配内存，乘积乘以 LOB 列数。当 DMS 无法预先分配该内存时，它会消耗 SWAP 内存，从而对完全加载任务的性能产生负面影响。如果您在使用受限 LOB 模式时遇到性能问题，请考虑降低提交速率，直到达到可接受的性能水平。在 CDC 模式下，DMS 通过以下方式来分配内存：将 LOB 列数乘以在受限 LOB 任务设置中指定的“最大 LOB 大小”参数，再乘以记录大小。对于每个 DMS 任务，DMS CDC 流程是单线程的。有关更多信息，请参阅[更改处理优化设置](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.html)。  
要验证受限 LOB 大小，必须将 `ValidationPartialLobSize` 设置为与 `LobMaxSize`（K）相同的值。
  + **内联 LOB 模式** — 在内联 LOB 模式下，您可以设置 DMS 以内联方式传输的最大 LOB 大小。 LOBs 小于指定大小的将以内联方式传输。 LOBs 大于指定大小的将使用完整 LOB 模式进行复制。 LOBs 当大多数都很小时，您可以选择此选项来同时复制 LOBs 大小和大小。对于不支持完整 LOB 模式的端点，例如 S3 和 Redshift，DMS 不支持内联 LOB 模式。
**注意**  
在 Oracle 中，只要 LOBs 有可能，就会被视为 VARCHAR 数据类型。这种方法意味着从数据库中批量 AWS DMS 获取它们，这比其他方法快得多。Oracle 中的 VARCHAR 的最大大小为 32 K。因此，当 Oracle 为源数据库时，小于 32 K 的受限 LOB 大小最佳。
+ 如果将任务配置为在受限 LOB 模式下运行，**Max LOB size (K) (最大 LOB 大小 (K))** 选项设置 AWS DMS 接受的最大大小 LOB。任何 LOBs 大于此值的值都将被截断为该值。
+ 将任务配置为使用完整 LOB 模式时，将分 AWS DMS 段检索 LOBs 。**LOB 块大小 (K)** 选项确定每个分段的大小。在设置该选项时，请特别注意网络配置允许的最大包大小。如果 LOB 块大小超出允许的最大包大小，则可能会看到连接断开错误。`LobChunkSize` 的建议值为 64 KB。将 `LobChunkSize` 的值增加到 64 KB 以上可能会导致任务失败。
+ 将任务配置为在内联 LOB 模式下运行时，该`InlineLobMaxSize`设置将决定哪个 LOBs DMS 以内联方式传输。
**注意**  
在更改数据捕获（CDC）操作期间，包含 LOB 列的表必须使用主键。DMS 使用此键在源表中查找 LOB 值。此要求仅适用于 CDC 任务 - 完全加载任务可以不受限制地直接从源读取整个 LOB 列并将其复制到目标。

有关指定这些选项的任务设置的信息，请参阅[目标元数据任务设置](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md)

## 用于检查源表上最大 LOB 列长度的 SQL 命令
<a name="CHAP_Tasks.Creating.SQLCommandsLOB"></a>

使用以下 SQL 命令检查最大 LOB 列长度，并相应地配置 DMS 有限的 LOB 设置，以避免在迁移过程中出现任何数据截断：

**Oracle**  

```
SELECT dbms_lob.getlength(<COL_NAME>) as LOB_LENGTH
FROM <TABLE_NAME>
ORDER BY dbms_lob.getlength(<COL_NAME>) DESC
FETCH FIRST 10 ROWS ONLY;

Select ((max(length(<COL_NAME>)))/(1024)) from <TABLE_NAME>
```

**SQL Server**  

```
Select top 10 datalength(<COL_NAME>) as fieldsize from <TABLE_NAME> order by datalength(<COL_NAME>) desc;
```

**MySQL**  

```
Select (max(length(<COL_NAME>))/(1024)) as "Size in KB" from <TABLE_NAME>;
```

**PostgreSQL**  

```
Select max((octet_length(<COL_NAME>))/(1024.0)) as "Size in KB" from <TABLE_NAME>;
```

**db2 哈哈哈**  

```
-- Method 1: Using SYSCAT.COLUMNS (converting to KB)

SELECT TABSCHEMA, TABNAME, COLNAME, LENGTH/1024 as LENGTH_KB, TYPENAME FROM SYSCAT.COLUMNS WHERE TYPENAME IN ('BLOB', 'CLOB', 'DBCLOB') ORDER BY LENGTH DESC;

-- Method 2: For specific table with KB conversion

  SELECT COLNAME, LENGTH/1024 as LENGTH_KB, TYPENAME FROM SYSCAT.COLUMNS WHERE TABSCHEMA = 'YOUR_SCHEMA'AND TABNAME = 'YOUR_TABLE'AND TYPENAME IN ('BLOB', 'CLOB', 'DBCLOB'); 
  
-- Method 3: Using SYSIBM.SYSCOLUMNS

SELECT TBCREATOR, TBNAME, NAME, LENGTH/1024 as LENGTH_KB, COLTYPE FROM SYSIBM.SYSCOLUMNS WHERE COLTYPE IN ('BLOB', 'CLOB', 'DBCLOB') ORDER BY LENGTH DESC;

SYBASE :

SELECT c.name as column_name, t.name as data_type, (c.length)/1024 as length_KB FROM syscolumns c JOIN systypes t ON c.usertype = t.usertype WHERE object_name(c.id) = 'YOUR_TABLE_NAME'AND t.name IN ('text', 'image', 'unitext') ORDER BY c.length DESC;
```

# 创建多个任务
<a name="CHAP_Tasks.ReplicationTasks.MultipleTasks"></a>

在某些迁移方案中，您可能必须创建多个迁移任务。任务可以独立运行，也可以并发运行。每个任务都有其自己的初始负载、CDC 和日志读取过程。通过数据操作语言 (DML) 相关的表必须属于同一任务。

为迁移创建多个任务的部分原因包括：
+ 任务的目标表位于不同的数据库中，例如，当您将一个系统分散到或分成多个系统时。
+ 您需要使用筛选功能将大型表的迁移分为多个任务。

**注意**  
由于每个任务有其自己的更改捕获和日志读取过程，因此*不* 会跨任务协调更改。因此，当使用多个任务执行迁移时，请确保每个单独的源事务完全包含在单个任务中。如果没有将单个事务拆分到不同的任务中，则可以使用多个任务来执行迁移。