

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

# 使用微软 SQL Server 数据库作为来源 AWS DMS
<a name="CHAP_Source.SQLServer"></a>

使用迁移一个或多个 Microsoft SQL Server 数据库中的数据 AWS DMS。使用 SQL Server 数据库作为源，您可以将数据迁移到另一个 SQL Server 数据库或其他 AWS DMS 支持的数据库中。

有关 AWS DMS 支持作为源的 SQL Server 版本的信息，请参见[的来源 AWS DMS](CHAP_Introduction.Sources.md)。

源 SQL Server 数据库可安装在您网络中的任意计算机上。在与 AWS DMS一起使用时，需要 SQL Server 账户，该账户对源数据库具有与选定任务类型相对应的访问权限。有关更多信息，请参阅 [SQL Server 任务权限](#CHAP_Source.SQLServer.Permissions)。

AWS DMS 支持从 SQL Server 的命名实例迁移数据。当您创建源终端节点时，您可以在服务器名称中使用以下表示法。

```
IPAddress\InstanceName
```

例如，以下是正确的源终端节点服务器名称。在这里，名称的第一部分是服务器的 IP 地址，第二部分是 SQL Server 实例名称（在本示例中为 SQLTest）。

```
10.0.0.25\SQLTest
```

此外，请获取您的命名 SQL Server 实例监听的端口号，然后使用它来配置您的 AWS DMS 源端点。

**注意**  
端口 1433 是 Microsoft SQL Server 的默认端口。但是，也经常使用每次启动 SQL Server 时更改的动态端口，以及用于通过防火墙连接到 SQL Server 的特定静态端口号。因此，在创建 AWS DMS 源端点时，您想知道命名的 SQL Server 实例的实际端口号。

可以使用 SSL 加密 SQL Server 终端节点与复制实例之间的连接。有关将 SSL 用于 SQL Server 终端节点的更多信息，请参阅[将 SSL 与 AWS Database Migration Service](CHAP_Security.SSL.md)。

您可以使用 CDC 从 SQL Server 数据库进行持续迁移。有关为 CDC 配置源 SQL Server 数据库的信息，请参阅[捕获数据更改，以便从 SQL Server 进行持续复制](CHAP_Source.SQLServer.CDC.md)。

有关使用 SQL Server 源数据库和的更多详细信息 AWS DMS，请参阅以下内容。

**Topics**
+ [使用 SQL Server 作为源代码的限制 AWS DMS](#CHAP_Source.SQLServer.Limitations)
+ [SQL Server 任务权限](#CHAP_Source.SQLServer.Permissions)
+ [在 SQL Server 源中使用持续复制（CDC）的先决条件](#CHAP_Source.SQLServer.Prerequisites)
+ [支持的 SQL Server 压缩方法](#CHAP_Source.SQLServer.Compression)
+ [使用自行管理的 SQL Server AlwaysOn 可用性组](#CHAP_Source.SQLServer.AlwaysOn)
+ [使用 SQL Server 作为源时的端点设置 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)
+ [SQL Server 的源数据类型](#CHAP_Source.SQLServer.DataTypes)
+ [捕获数据更改，以便从 SQL Server 进行持续复制](CHAP_Source.SQLServer.CDC.md)

## 使用 SQL Server 作为源代码的限制 AWS DMS
<a name="CHAP_Source.SQLServer.Limitations"></a>

将 SQL Server 数据库作为 AWS DMS源时，存在以下限制：
+ 列的身份属性不迁移到目标数据库列。
+ SQL Server 端点不支持使用包含稀疏列的表。
+ 不支持 Windows 身份验证。
+ 不复制对 SQL Server 中计算字段的更改。
+ 不支持临时表。
+ 不支持 SQL Server 分区切换。
+ 使用 WRITETEXT 和 UPDATETEXT 实用程序时， AWS DMS 不会捕获应用于源数据库的事件。
+ 不支持以下数据操作语言（DML）模式。

  ```
  SELECT * INTO {{new_table}} FROM {{existing_table}}
  ```
+ 在将 SQL Server 作为源时，不支持列级别加密。
+ AWS DMS 不支持将 SQL Server 2008 或 SQL Server 2008 R2 作为来源进行服务器级审计。这是因为 SQL Server 2008 和 2008 R2 存在已知问题。例如，运行以下命令会 AWS DMS 导致失败。

  ```
  USE [master]
  GO 
  ALTER SERVER AUDIT [my_audit_test-20140710] WITH (STATE=on)
  GO
  ```
+ 使用 SQL Server 作为源时，在完全 Lob 模式下不支持几何列和地理列。应改用受限 LOB 模式，或将 `InlineLobMaxSize` 任务设置设为使用内联 LOB 模式。
+ 在复制任务中使用 Microsoft SQL Server 源数据库时，如果删除该任务，则不会删除 SQL Server Replication Publisher 定义。Microsoft SQL Server 系统管理员必须从 Microsoft SQL Server 删除这些定义。
+ 仅限满载的任务支持从架构绑定和 non-schema-bound视图迁移数据。
+ 不支持使用 sp\_rename 重命名表（例如，`sp_rename 'Sales.SalesRegion', 'SalesReg;)`
+ 不支持使用 sp\_rename 重命名列（例如，`sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';`）
+ AWS DMS 不支持更改处理以设置和取消设置列默认值（使用带`ALTER TABLE`语`ALTER COLUMN SET DEFAULT`句的子句）。
+ AWS DMS 不支持通过更改处理来设置列可为空性（使用带`ALTER TABLE`语`ALTER COLUMN [SET|DROP] NOT NULL`句的子句）。
+ 在 SQL Server 2012 和 SQL Server 2014 中，将 DMS 复制与可用性组一起使用时，无法将分发数据库放入可用性组。SQL 2016 支持将分发数据库放入可用性组中，但合并、双向或 peer-to-peer复制拓扑中使用的分布数据库除外。
+ 对于分区表， AWS DMS 不支持为每个分区设置不同的数据压缩设置。
+ 将值插入 SQL Server 空间数据类型（GEOGRAPHY 和 GEOMETRY）时，可以忽略空间参考系统标识符（SRID）属性或指定其他数字。复制具有空间数据类型的表时， AWS DMS 将 SRID 替换为默认 SRID（几何为 0，地理位置为 4326）。
+ 如果您的数据库未配置 MS-REPLICATION 或 MS-CDC，您仍然可以捕获没有主键的表，但只能捕获 INSERT/DELETE DML 事件。将忽略 UPDATE 和 TRUNCATE TABLE 事件。
+ 不支持列存储索引。
+ 不支持内存优化表（使用内存中 OLTP）。
+ 当复制主键由多个列组成的表时，不支持在完全加载期间更新主键列。
+ 不支持延迟的耐久性。
+ 由于 RDS 执行备份的方式，`readBackupOnly=true` 端点设置（额外连接属性）在 RDS for SQL Server 源实例上不起作用。
+ `EXCLUSIVE_AUTOMATIC_TRUNCATION` 在 Amazon RDS SQL Server 源实例上不起作用，因为 RDS 用户无权运行 SQL Server 存储过程 `sp_repldone`。
+ AWS DMS 不捕获截断命令。
+ AWS DMS 不支持从开启了加速数据库恢复 (ADR) 的数据库进行复制。
+ AWS DMS 不支持在单个事务中捕获数据定义语言 (DDL) 和数据操作语言 (DML) 语句。
+ AWS DMS 不支持复制数据层应用程序包 (DACPAC)。
+ 当您将更改应用于目标数据库时，涉及主键或唯一索引并更新多个数据行的 UPDATE 语句可能会导致冲突。例如，当目标数据库通过 INSERT 和 DELETE 语句而不是单个 UPDATE 语句应用更新时，可能会发生这种情况。在批量优化应用模式中，该表可能会被忽略。在事务应用模式下，UPDATE 操作可能会导致违反约束。要避免出现此问题，请重新加载相关表。或者，在 Apply Exceptions 控制表（`dmslogs.awsdms_apply_exceptions`）中找到有问题的记录，然后在目标数据库中手动对其进行编辑。有关更多信息，请参阅 [更改处理优化设置](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md)。
+ AWS DMS 不支持表和架构的复制，其中名称包含以下集合中的特殊字符。

  `\\ -- \n \" \b \r ' \t ;` 
+ 不支持数据屏蔽。 AWS DMS 在不进行屏蔽的情况下迁移被屏蔽的数据。
+ AWS DMS 最多复制 32,767 个带主键的表，每个表最多可复制 1,000 个列。这是因为 AWS DMS 会为每个复制的表创建一个 SQL Server 复制文章，而 SQL Server 复制文章有这些限制。
+ 使用更改数据捕获（CDC）时，必须将构成唯一索引的所有列定义为 `NOT NULL`。如果不满足此要求，将导致出现 SQL Server 系统错误 22838。
+ 如果 SQL Server 将事件从活动事务日志归档到备份日志，或者将其从活动事务日志中截断，则可能丢失事件。

访问备份事务日志时适用以下限制：
+ 不支持加密的备份。
+ 不支持存储在 URL 或 Windows Azure 上的备份。
+ AWS DMS doe snot 支持在文件级别直接处理备用共享文件夹中的事务日志备份。
+ 对于除适用于微软 SQL Server 的 Amazon RDS 以外的 Cloud SQL Server 源，仅 AWS DMS 支持使用活动事务日志进行持续复制 (CDC)。您不能将备份日志用于 CDC。如果 SQL Server 将事件从活动事务日志归档到备份日志，或者在 DMS 读取之前将事件从活动事务日志中截断，则可能丢失事件。
+ 对于适用于 Microsoft SQL Server 的 Amazon RDS 源， AWS DMS 3.5.2 及更低版本仅支持使用活动事务日志进行持续复制 (CDC)，因为 DMS 无法通过 CDC 访问备份日志。如果 RDS for SQL Server 将事件从活动事务日志归档到备份日志，或者在 DMS 读取之前将事件从活动事务日志中截断，则可能丢失事件。此限制不适用于 3.5.3 及更高 AWS DMS 版本。
+ AWS DMS 不支持将适用于 SQL Server 的 Amazon RDS 代理的 CDC 作为来源。
+ 如果 SQL Server 源在完全加载任务期间不可用，则即使数据迁移仍未完成， AWS DMS 也可能会在多次尝试重新连接后将任务标记为已完成。在这种情况下，目标表仅包含连接中断之前迁移的记录，这可能会在源系统和目标系统之间造成数据不一致。为确保数据的完整性，您必须完全重新启动满载任务，或者重新加载受连接中断影响的特定表。

## SQL Server 任务权限
<a name="CHAP_Source.SQLServer.Permissions"></a>

**Topics**
+ [仅完全加载任务的权限](#CHAP_Source.SQLServer.Permissions.FullLoad)
+ [持续复制任务权限](#CHAP_Source.SQLServer.Permissions.Ongoing)

### 仅完全加载任务的权限
<a name="CHAP_Source.SQLServer.Permissions.FullLoad"></a>

要执行仅完全加载的任务，需要以下权限。请注意， AWS DMS 不会创建 `dms_user` 登录角色。有关为 SQL Server 创建登录的信息，请参阅 *Microsoft 文档*中的[创建数据库用户](https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user?view=sql-server-ver16)主题。

```
USE db_name;
                
                CREATE USER dms_user FOR LOGIN dms_user; 
                ALTER ROLE [db_datareader] ADD MEMBER dms_user; 
                GRANT VIEW DATABASE STATE to dms_user;
                GRANT VIEW DEFINITION to dms_user;
                
                USE master;
                
                GRANT VIEW SERVER STATE TO dms_user;
```

### 持续复制任务权限
<a name="CHAP_Source.SQLServer.Permissions.Ongoing"></a>

无论是否使用 `sysadmin` 角色，都可以使用 DMS 将自管理 SQL Server 实例配置为持续复制。对于无法授予 `sysadmin` 角色的 SQL Server 实例，请确保 DMS 用户具有如下所述的权限。

**从自管理 SQL Server 数据库进行持续复制所需的设置权限**

1. 使用 SQL Server Management Studio（SSMS）或如前面的[仅完全加载任务的权限](#CHAP_Source.SQLServer.Permissions.FullLoad)中所述，创建采用密码身份验证的新 SQL Server 账户，例如 `self_managed_user`。

1. 运行以下 `GRANT` 命令：

   ```
   GRANT VIEW SERVER STATE TO {{self_managed_user}};
   
   USE msdb;
       GRANT SELECT ON msdb.dbo.backupset TO {{self_managed_user}};
       GRANT SELECT ON msdb.dbo.backupmediafamily TO {{self_managed_user}};
       GRANT SELECT ON msdb.dbo.backupfile TO {{self_managed_user}};
       
   USE db_name;
       CREATE USER {{self_managed_user}} FOR LOGIN {{self_managed_user}};
       ALTER ROLE [db_owner] ADD MEMBER {{self_managed_user}};
       GRANT VIEW DEFINITION to {{self_managed_user}};
   ```

1. 除上述权限外，用户还需要以下权限之一：
   + 用户必须是 `sysadmin` 固定服务器角色的成员
   + 配置和权限如[在可用性组环境中的 SQL Server 上设置持续复制：无 sysadmin 角色](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.ag)或[在独立 SQL Server 上设置持续复制：不使用 sysadmin 角色](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.standalone)中所述，具体取决于您的源配置。

#### 从云 SQL Server 数据库进行持续复制所需的设置权限
<a name="CHAP_Source.SQLServer.Permissions.Cloud"></a>

云托管的 SQL Server 实例是在 Amazon RDS for Microsoft SQL Server、Azure SQL 托管实例或 DMS 支持的任何其他托管云 SQL Server 实例上运行的实例。

使用 SQL Server Management Studio（SSMS）或如前面的[仅完全加载任务的权限](#CHAP_Source.SQLServer.Permissions.FullLoad)中所述，创建采用密码身份验证的新 SQL Server 账户，例如 `rds_user`。

运行以下授权命令。

```
GRANT VIEW SERVER STATE TO rds_user;
```

对于 Amazon RDS for Microsoft SQL Server 源，DMS 版本 3.5.3 及更高版本支持从事务日志备份中读取。为确保 DMS 能够访问日志备份，除上述权限外，还要授予 `master` 用户权限或 RDS SQL Server 源上的以下权限：

```
USE msdb;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_download TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_read TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_list_current_lsn TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_task_status TO rds_user;
    
USE db_name;
    CREATE USER rds_user FOR LOGIN rds_user;
    ALTER ROLE [db_owner] ADD MEMBER rds_user;
    GRANT VIEW DEFINITION to rds_user;
```

对于 Amazon Azure SQL 托管实例，请授予以下权限：

```
GRANT SELECT ON msdb.dbo.backupset TO rds_user;
GRANT SELECT ON msdb.dbo.backupmediafamily TO rds_user;
GRANT SELECT ON msdb.dbo.backupfile TO rds_user;
```

## 在 SQL Server 源中使用持续复制（CDC）的先决条件
<a name="CHAP_Source.SQLServer.Prerequisites"></a>

您可以针对本地或 Amazon EC2 上的自管理 SQL Server 数据库、诸如 Amazon RDS 之类的云数据库或者 Microsoft Azure SQL 托管实例使用持续复制（更改数据捕获（CDC））。

尤其在对作为 AWS DMS源的 SQL Server 数据库使用持续复制时，存在以下要求：
+ 必须配置 SQL Server 进行完整备份，并且您必须在开始复制数据之前先进行一次备份。
+ 恢复模式必须设置为 **Bulk logged** 或 **Full**。
+ 不支持 SQL Server 备份到多个磁盘。如果将备份定义为将数据库备份写入不同磁盘上的多个文件，则 AWS DMS 无法读取数据， AWS DMS 任务将失败。
+ 对于自管理 SQL Server 源，在您删除任务时，DMS CDC 任务中使用的源数据库的 SQL Server Replication Publisher 定义不会被删除。SQL Server 系统管理员必须从 SQL Server 删除自管理源的这些定义。
+ 在 CDC 期间， AWS DMS 需要查找 SQL Server 事务日志备份才能读取更改。 AWS DMS 不支持使用*非*本机格式的第三方备份软件创建的 SQL Server 事务日志备份。要支持*采用*本机格式并且使用第三方备份软件创建的事务日志备份，请将 `use3rdPartyBackupDevice=Y` 连接属性添加到源端点。
+ 对于自管理 SQL Server 源，请注意，在新创建的表发布前，SQL Server 不会捕获对它们的更改。将表添加到 SQL Server 源时，会 AWS DMS 管理发布的创建。但是，该过程可能需要几分钟时间。不会将在该延迟期间对新创建的表执行的操作捕获或复制到目标中。
+ AWS DMS 更改数据捕获需要在 SQL Server 中开启完整的事务日志记录。要在 SQL Server 中启用完整事务日志记录，请启用 MS-REPLICATION 或 CHANGE DATA CAPTURE（CDC）。
+ 在 MS CDC 捕获作业处理这些更改之前，SQL Server *tlog* 条目不会被标记为可重复使用。
+ 内存优化表上不支持 CDC 操作。该限制适用于 SQL Server 2014（在此版本中首次引入该功能）及更高版本。
+ AWS DMS 默认情况下，更改数据捕获需要将 Amazon EC2 或 On-Prem SQL 服务器上的分布数据库作为源。因此，请确保在为带有主键的表配置 MS 复制时已激活分发服务器。

## 支持的 SQL Server 压缩方法
<a name="CHAP_Source.SQLServer.Compression"></a>

请注意以下有关 AWS DMS支持的 SQL Server 压缩方法的内容：
+ AWS DMS 在 SQL Server 版本 2008 及更高版本中支持 Row/Page 压缩。
+ AWS DMS 不支持 Vardecimal 存储格式。
+ AWS DMS 不支持稀疏列和列结构压缩。

## 使用自行管理的 SQL Server AlwaysOn 可用性组
<a name="CHAP_Source.SQLServer.AlwaysOn"></a>

SQL Server Always On 可用性组配有高可用性和灾难恢复解决方案，提供数据库镜像的企业级替代功能。

在中 AWS DMS，您可以从单个主可用性组或辅助可用性组副本迁移更改。

### 使用主可用性组副本
<a name="CHAP_Source.SQLServer.AlwaysOn.Primary"></a>

 

**要在中使用主可用性组作为源 AWS DMS，请执行以下操作：**

1. 为可用性副本中的所有 SQL Server 实例启用分发选项。有关更多信息，请参阅 [在自管理 SQL Server 上设置持续复制](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC)。

1. 在 AWS DMS 控制台中，打开 SQL Server 源数据库设置。对于**服务器名称**，请指定为可用性组侦听器配置的域名服务（DNS）名称或 IP 地址。

首次启动 AWS DMS 任务时，可能需要比平时更长的时间才能启动。这种缓慢是因为可用性组服务器正在复制表项目的创建。

### 使用辅助可用性组副本
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary"></a>

**要在中使用辅助可用性组作为源 AWS DMS，请执行以下操作：**

1. 使用与 AWS DMS 源端点用户相同的凭据来连接各个副本。

1. 确保您的 AWS DMS 复制实例可以解析所有现有副本的 DNS 名称并连接到它们。您可以使用以下 SQL 查询来获取所有副本的 DNS 名称。

   ```
   select ar.replica_server_name, ar.endpoint_url from sys.availability_replicas ar
   JOIN sys.availability_databases_cluster adc
   ON adc.group_id = ar.group_id AND adc.database_name = '<source_database_name>';
   ```

1. 创建源端点时，请为端点的**服务器名称**或端点密钥的**服务器地址**指定可用性组侦听器的 DNS 名称。有关可用性组侦听器的更多信息，请参阅 SQL Server 文档中的[可用性组侦听器是什么？](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/availability-group-listener-overview?view=sql-server-ver15)。

   您可以使用公有 DNS 服务器或本地 DNS 服务器来解析可用性组侦听器、主副本和辅助副本。要使用本地 DNS 服务器，请配置 Amazon Route 53 Resolver。有关更多信息，请参阅 [使用您自己的本地名称服务器](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver)。

1. 请将以下额外连接属性添加到您的源端点。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Source.SQLServer.html)

1. 在您可用性组的所有副本上启用分发选项。将所有节点添加到分发服务器列表中。有关更多信息，请参阅 [设置分发](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC.Setup)。

1. 对主读写副本运行以下查询以启用数据库的发布。您只对数据库运行一次此查询。

   ```
   sp_replicationdboption @dbname = N'<source DB name>', @optname = N'publish', @value = N'true';
   ```



#### 限制
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.limitations"></a>

以下是使用辅助可用性组副本的限制：
+ AWS DMS 使用只读可用性组副本作为源时，不支持 Safeguard。有关更多信息，请参阅 [使用 SQL Server 作为源时的端点设置 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)。
+ AWS DMS 使用只读可用性组副本作为源时，不支持`setUpMsCdcForTables`额外的连接属性。有关更多信息，请参阅 [使用 SQL Server 作为源时的端点设置 AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)。
+ AWS DMS 从版本 3.4.7 开始，可以使用自我管理的辅助可用性组副本作为源数据库，用于持续复制（更改数据捕获或 CDC）。不支持云 SQL Server 多可用区只读副本。如果您使用早期版本的 AWS DMS，请确保使用主可用性组副本作为 CDC 的源数据库。

#### 失效转移到其他节点
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.failover"></a>

如果您将终端节点的`ApplicationIntent`额外连接属性设置为`ReadOnly`，则您的 AWS DMS 任务将连接到只读路由优先级最高的只读节点。当优先级最高的只读节点不可用时，它会失效转移到可用性组中的其他只读节点。如果未设置`ApplicationIntent`，则您的 AWS DMS 任务将仅连接到可用性组中的主（读/写）节点。

## 使用 SQL Server 作为源时的端点设置 AWS DMS
<a name="CHAP_Source.SQLServer.ConnectionAttrib"></a>

您可以使用端点设置来配置 SQL Server 源数据库，这与使用额外连接属性类似。您可以在使用 AWS DMS 控制台创建源端点时指定设置，或者使用中带有 `--microsoft-sql-server-settings '{"{{EndpointSetting"}}: {{"value"}}, {{...}}}'` JSON 语法的`create-endpoint`[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)命令来指定设置。

下表显示了将 SQL Server 作为源时您可以使用的端点设置。


| Name | 说明 | 
| --- | --- | 
| `ActivateSafeguard` | 此属性可开启或关闭 Safeguard。有关 Safeguard 的更多信息，请参阅下文的 `SafeguardPolicy`。<br />默认值：`true`<br />有效值：{`false`、`true`} <br />示例：`'{"ActivateSafeguard": true}'` | 
| AlwaysOnSharedSynchedBackupIsEnabled | 此属性调整从作为 Always On 可用性组群集一部分托管的 SQL Server 源数据库迁移 AWS DMS 时的行为。<br />AWS DMS 增强了对配置为在 Always On 群集中运行的 SQL Server 源数据库的支持。在这种情况下， AWS DMS 会尝试跟踪事务备份是否是在 Always On 集群中的节点（而非托管源数据库实例的节点）上发生。在迁移任务启动 AWS DMS 时，尝试连接到集群中的每个节点，但如果无法连接到任何一个节点，则会失败。<br />如果您 AWS DMS 需要轮询 Always On 集群中的所有节点以获取事务备份，请将此属性设置为`false`。<br />默认值：`true`<br />有效值：`true` 或 `false`<br />示例：`'{"AlwaysOnSharedSynchedBackupIsEnabled": false}'` | 
| `"ApplicationIntent": "readonly"` | 使用此 ODBC 驱动程序属性设置，SQL Server 可将您的复制任务路由到优先级最高的只读节点。如果不使用此设置，SQL Server 会将您的复制任务路由到主读写节点。 | 
| `ConnectionTimeout` | 使用此额外连接属性（ECA）设置 SQL Server 实例的端点连接超时时间（以秒为单位）。默认值为 10 秒。ECA 示例：`ConnectionTimeout=30`。 | 
| `EnableNonSysadminWrapper` | 在不使用 sysadmin 用户的情况下在独立 SQL 服务器上设置持续复制时，请使用此端点设置。3.4.7 及更高 AWS DMS 版本支持此参数。有关在独立 SQL Server 上设置持续复制的信息，请参阅[捕获数据更改，以便从 SQL Server 进行持续复制](CHAP_Source.SQLServer.CDC.md)。<br />默认值：`false`<br />有效值：`true`、`false`<br />示例：`'{"EnableNonSysadminWrapper": true}'` | 
| `ExecuteTimeout` | 使用此额外连接属性（ECA）设置 SQL Server 实例的客户端语句超时时间（以秒为单位）。默认值为 60 秒。<br />示例：`'{"ExecuteTimeout": 100}'` | 
| `FatalOnSimpleModel` | 如果设置为 `true`，当 SQL Server 数据库恢复模式设置为 `simple` 时，此设置会生成致命错误。<br />默认值：`false`<br />有效值：`true` 或 `false`<br />示例：`'{"FatalOnSimpleModel": true}'` | 
| `ForceLobLookup` | 强制在内联 LOB 上执行 LOB 查找。<br />默认值：`false`<br />有效值：`true`、`false`<br />示例：`'{"ForceLobLookup": false}'` | 
| `"MultiSubnetFailover": "Yes"` | 借助此 ODBC 驱动程序属性，DMS 可在可用性组失效转移时连接到新的主服务器。此属性专为连接中断或侦听器 IP 地址不正确的情况而设计。在这些情况下， AWS DMS 会尝试连接到与可用性组侦听器关联的所有 IP 地址。 | 
| `ReadBackupOnly` | 使用此属性需要 **sysadmin** 权限。当此属性设置为 `true` 时， AWS DMS 在持续复制期间仅从事务日志备份中读取更改，而不从活动事务日志文件中读取。通过将此参数设置为 `true`，可以在完全加载和持续复制任务期间控制活动事务日志文件的增长。但是，它会向持续复制添加一些源延迟。<br />有效值：`true` 或 `true`。默认值为 `false`。<br />示例：`'{"ReadBackupOnly": true}'` 由于 RDS 执行备份的方式，此参数在 Amazon RDS SQL Server 源实例上不起作用。  | 
| `SafeguardPolicy` | 为了获得最佳性能，请 AWS DMS 尝试从活动事务日志 (TLOG) 中捕获所有未读更改。不过，有时由于截断，有效的 TLOG 可能未包含所有未读取的更改。发生这种情况时， AWS DMS 访问日志备份以捕获缺少的更改。为了最大限度地减少访问日志备份的需求，请使用以下方法之一 AWS DMS 防止截断：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Source.SQLServer.html)<br />默认值：`RELY_ON_SQL_SERVER_REPLICATION_AGENT`<br />有效值：{`EXCLUSIVE_AUTOMATIC_TRUNCATION`、`RELY_ON_SQL_SERVER_REPLICATION_AGENT`} <br />示例：`'{"SafeguardPolicy": "EXCLUSIVE_AUTOMATIC_TRUNCATION"}'` | 
| `SetUpMsCdcForTables` | 此属性可为源数据库和任务映射中未启用 MS-Replication 的表启用 MS-CDC。将此值设置为 `true`，即可在源数据库上运行 `sp_cdc_enable_db` 存储过程，并在任务中未在源数据库中启用 MS-Replication 的每个表上运行 `sp_cdc_enable_table` 存储过程。有关启用分发的更多信息，请参阅[在自管理 SQL Server 上设置持续复制](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC)。<br />有效值：{`true`、`false`} <br />示例：`'{"SetUpMsCdcForTables": true}'` | 
| `TlogAccessMode` | 表示用于获取 CDC 数据的模式。<br />默认值：`PreferTlog`<br />有效值：`BackupOnly`、`PreferBackup`、`PreferTlog`、`TlogOnly`<br />示例：`'{"TlogAccessMode": "PreferTlog"}'` | 
| `Use3rdPartyBackupDevice` | 当此属性设置为 `Y` 时，如果第三方事务日志备份是以本机格式创建的， AWS DMS 会处理这些备份。 | 

## SQL Server 的源数据类型
<a name="CHAP_Source.SQLServer.DataTypes"></a>

使用 SQL Server 作为源的数据迁移 AWS DMS 支持大多数 SQL Server 数据类型。下表显示了使用时支持的 SQL Server 源数据类型 AWS DMS 以及 AWS DMS 数据类型的默认映射。

有关如何查看目标中映射的数据类型的信息，请参阅有关所使用的目标终端节点的部分。

有关 AWS DMS 数据类型的更多信息，请参见[AWS Database Migration Service 的数据类型](CHAP_Reference.DataTypes.md)。


|  SQL Server 数据类型  |  AWS DMS 数据类型  | 
| --- | --- | 
| BIGINT | INT8 | 
| BIT | BOOLEAN | 
| DECIMAL | NUMERIC | 
| INT | INT4 | 
| MONEY | NUMERIC | 
| NUMERIC (p,s) | NUMERIC  | 
| SMALLINT | INT2 | 
| SMALLMONEY | NUMERIC | 
| TINYINT | UINT1 | 
| REAL | REAL4 | 
| FLOAT | REAL8 | 
| DATETIME | DATETIME | 
| DATETIME2 （SQL Server 2008 及更高版本） | DATETIME | 
| SMALLDATETIME | DATETIME | 
| DATE | DATE | 
| TIME | TIME | 
| DATETIMEOFFSET | WSTRING | 
| CHAR | string | 
| VARCHAR | string | 
| VARCHAR (max) | CLOB<br />TEXT<br />要将此数据类型与一起使用 AWS DMS，必须为特定任务启用 CLOB 数据类型。<br />对于 SQL Server 表， AWS DMS 即使对于不更改 SQL Server 中 LOB 列值的 UPDATE 语句，也会更新目标中的 LOB 列。<br />在 CDC 期间，仅在包含主键的表中 AWS DMS 支持 CLOB 数据类型。 | 
| NCHAR | WSTRING | 
| NVARCHAR (length) | WSTRING | 
| NVARCHAR (max) | NCLOB<br />NTEXT<br />要将此数据类型与一起使用 AWS DMS，必须 SupportLobs 为特定任务启用使用。有关启用 Lob 支持的更多信息，请参阅[在任务中为源数据库设置 LOB 支持 AWS DMS](CHAP_Tasks.LOBSupport.md)。<br />对于 SQL Server 表， AWS DMS 即使对于不更改 SQL Server 中 LOB 列值的 UPDATE 语句，也会更新目标中的 LOB 列。<br />在 CDC 期间，仅在包含主键的表中 AWS DMS 支持 CLOB 数据类型。 | 
| BINARY | BYTES | 
| VARBINARY | BYTES | 
| VARBINARY (max) | BLOB<br />IMAGE<br />对于 SQL Server 表， AWS DMS 即使对于不更改 SQL Server 中 LOB 列值的 UPDATE 语句，也会更新目标中的 LOB 列。<br />要将此数据类型与一起使用 AWS DMS，必须允许将 BLOB 数据类型用于特定任务。<br />AWS DMS 仅在包含主键的表中支持 BLOB 数据类型。 | 
| TIMESTAMP | BYTES | 
| UNIQUEIDENTIFIER | string | 
| HIERARCHYID  | 在复制到 SQL Server 目标终端节点时，使用 HIERARCHYID。<br />在复制到所有其他目标终端节点时，使用 WSTRING (250)。 | 
| XML | NCLOB<br />对于 SQL Server 表， AWS DMS 即使对于不更改 SQL Server 中 LOB 列值的 UPDATE 语句，也会更新目标中的 LOB 列。<br />要将此数据类型与一起使用 AWS DMS，必须允许将 NCLOB 数据类型用于特定任务。<br />在 CDC 期间，仅在包含主键的表中 AWS DMS 支持 NCLOB 数据类型。 | 
| GEOMETRY | 在复制到支持此数据类型的目标终端节点时，使用 GEOMETRY。<br />在复制到不支持此数据类型的目标终端节点时，使用 CLOB。 | 
| GEOGRAPHY | 在复制到支持此数据类型的目标终端节点时，使用 GEOGRAPHY。<br />在复制到不支持此数据类型的目标终端节点时，使用 CLOB。 | 

AWS DMS 不支持包含以下数据类型的字段的表。
+ CURSOR
+ SQL\_VARIANT
+ TABLE

**注意**  
根据用户定义的数据类型的基类型来支持这些类型。例如，基于 DATETIME 的用户定义的数据类型将作为 DATETIME 数据类型进行处理。