

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

# 使用微软 SQL Server 数据库作为目标 AWS Database Migration Service
<a name="CHAP_Target.SQLServer"></a>

你可以使用将数据迁移到微软 SQL Server 数据库 AWS DMS。将 SQL Server 数据库作为目标时，您可以从另一个 SQL Server 数据库或其他支持的数据库之一迁移数据。

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

AWS DMS 支持企业版、标准版、工作组版和开发版的本地版和 Amazon RDS 版。

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

**Topics**
+ [使用 SQL Server 作为目标的限制 AWS Database Migration Service](#CHAP_Target.SQLServer.Limitations)
+ [使用 SQL Server 作为目标时的安全要求 AWS Database Migration Service](#CHAP_Target.SQLServer.Security)
+ [使用 SQL Server 作为目标时的端点设置 AWS DMS](#CHAP_Target.SQLServer.ConnectionAttrib)
+ [Microsoft SQL Server 的目标数据类型](#CHAP_Target.SQLServer.DataTypes)

## 使用 SQL Server 作为目标的限制 AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Limitations"></a>

将 SQL Server 数据库作为 AWS DMS目标时，存在以下限制：
+ 在您手动创建带有计算列的 SQL Server 目标表时，如果使用 BCP 批量复制实用程序，则不支持完全加载复制。要使用完全加载复制，请通过在端点上设置额外连接属性（ECA）`'useBCPFullLoad=false'` 来禁用 BCP 加载。有关 ECAs 在终端节点上进行设置的信息，请参阅[创建源和目标终端节点](CHAP_Endpoints.Creating.md)。有关使用 BCP 的更多信息，请参阅 [Microsoft SQL Server 文档](https://docs.microsoft.com/en-us/sql/relational-databases/import-export/import-and-export-bulk-data-by-using-the-bcp-utility-sql-server)。
+ 复制具有 SQL Server 空间数据类型（几何和地理）的表时， AWS DMS 使用默认 SRID 替换您可能已插入的任何空间参考标识符 (SRID)。对于 GEOMETRY，默认 SRID 为 0，对于 GEOGRAPHY，则为 4326。
+ 不支持临时表。在事务性应用模式下，如果在目标中手动创建这些表，则迁移临时表可能适用于仅复制任务。
+ 当前，PostgreSQL 源中的`boolean`数据类型作为值不一致的数据类型迁移到 SQLServer 目标`bit`中。

  作为解决方法，请执行下列操作：
  + 使用列`VARCHAR(1)`的数据类型预先创建表（或者让我们 AWS DMS 创建表）。然后，让下游处理将“F”视为 False，将“T”视为 True。
  + 为避免出现必须更改下游处理的情况，请在任务中添加转换规则，将“F”值更改为“0”，将“T”值更改为 1，并将它们存储为 SQL Server 位数据类型。
+ AWS DMS 不支持通过更改处理来设置列可为空性（使用带`ALTER TABLE`语`ALTER COLUMN [SET|DROP] NOT NULL`句的子句）。
+ 不支持 Windows 身份验证。

## 使用 SQL Server 作为目标时的安全要求 AWS Database Migration Service
<a name="CHAP_Target.SQLServer.Security"></a>

以下内容描述了与微软 SQL Server 目标 AWS DMS 一起使用的安全要求：
+  AWS DMS 用户帐户必须至少具有您要连接的 SQL Server 数据库上的`db_owner`用户角色。
+ SQL Server 系统管理员必须向所有 AWS DMS 用户账户提供此权限。

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

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

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


| Name | 说明 | 
| --- | --- | 
| `ControlTablesFileGroup` | 为 AWS DMS 内部表指定文件组。当复制任务启动时，所有内部 AWS DMS 控制表（awsdms\_ apply\_exception、awsdms\_apply、awsdms\_changes）都将在指定的文件组上创建。<br />默认值： n/a <br />有效值：字符串 <br />示例：`--microsoft-sql-server-settings '{"ControlTablesFileGroup": "filegroup1"}'`<br />以下是用于创建文件组的命令的示例。<pre>ALTER DATABASE replicate ADD FILEGROUP Test1FG1; <br />GO ALTER DATABASE replicate <br />  ADD FILE (        <br />    NAME = test1dat5,        <br />    FILENAME = 'C:\temp\DATA\t1dat5.ndf',        <br />    SIZE = 5MB,        <br />    MAXSIZE = 100MB,        <br />    FILEGROWTH = 5MB    <br />  )    <br />TO FILEGROUP Test1FG1;    <br />GO<br />                                </pre> | 
| `ConnectionTimeout` | 使用此额外连接属性（ECA）设置 SQL Server 实例的端点连接超时时间（以秒为单位）。默认值为 10 秒。ECA 示例：`ConnectionTimeout=30`。 | 
| `ExecuteTimeout` | 使用此额外连接属性（ECA）设置 SQL Server 实例的客户端语句超时时间（以秒为单位）。默认值为 60 秒。<br />示例：`'{"ExecuteTimeout": 100}'` | 
| `UseBCPFullLoad` | 使用该属性为使用 BCP 的完全加载操作传输数据。如果目标表包含的身份列在源表中不存在，必须禁用**使用 BCP 加载表**选项。<br />默认值：true <br />有效值： true/false <br />示例：`--microsoft-sql-server-settings '{"UseBCPFullLoad": false}'` | 

## Microsoft SQL Server 的目标数据类型
<a name="CHAP_Target.SQLServer.DataTypes"></a>

下表显示了使用时支持的 Microsoft SQL Server 目标数据类型 AWS DMS 以及 AWS DMS 数据类型的默认映射。有关 AWS DMS 数据类型的更多信息，请参见[AWS Database Migration Service 的数据类型](CHAP_Reference.DataTypes.md)。


|  AWS DMS 数据类型  |  SQL Server 数据类型  | 
| --- | --- | 
| BOOLEAN | TINYINT | 
| BYTES | VARBINARY(length) | 
| DATE | 对于 SQL Server 2008 及更高版本，请使用 DATE。<br />对于早期版本，如果小数位数等于或小于 3，请使用 DATETIME。在所有其他情况下，请使用 VARCHAR (37)。 | 
| TIME | 对于 SQL Server 2008 及更高版本，请使用 DATETIME2 (%d)。<br />对于早期版本，如果小数位数等于或小于 3，请使用 DATETIME。在所有其他情况下，请使用 VARCHAR (37)。 | 
| DATETIME | 对于 SQL Server 2008 及更高版本，请使用 DATETIME2 （缩放）。<br />对于早期版本，如果小数位数等于或小于 3，请使用 DATETIME。在所有其他情况下，请使用 VARCHAR (37)。 | 
| INT1 | SMALLINT | 
| INT2 | SMALLINT | 
| INT4 | INT | 
| INT8 | BIGINT | 
| NUMERIC | NUMERIC (p,s) | 
| REAL4 | REAL | 
| REAL8 | FLOAT | 
| STRING | 如果列是日期或时间列，请执行以下操作：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Target.SQLServer.html)<br />如果列不是日期或时间列，请使用 VARCHAR (length)。 | 
| UINT1 | TINYINT | 
| UINT2 | SMALLINT | 
| UINT4 | INT | 
| UINT8 | BIGINT | 
| WSTRING | NVARCHAR (length) | 
| BLOB | VARBINARY(max)<br />IMAGE<br />要将此数据类型与一起使用 AWS DMS，必须 BLOBs 为特定任务启用使用。 AWS DMS 仅在包含主键的表中支持 BLOB 数据类型。 | 
| CLOB | VARCHAR(max)<br />要将此数据类型与一起使用 AWS DMS，必须 CLOBs 为特定任务启用使用。在更改数据捕获 (CDC) 期间， AWS DMS 仅在包含主键的表中支持 CLOB 数据类型。 | 
| NCLOB | NVARCHAR(max)<br />要将此数据类型与一起使用 AWS DMS，必须 NCLOBs 为特定任务启用使用。在 CDC 期间，仅在包含主键的表中 AWS DMS 支持 NCLOB 数据类型。 | 