将 Microsoft SQL Server 数据库作为 Amazon Database Migration Service 的目标 - Amazon 数据库迁移服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将 Microsoft SQL Server 数据库作为 Amazon Database Migration Service 的目标

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

有关 Amazon DMS 支持作为目标的 SQL Server 版本的信息,请参阅的目标 Amazon DMS

Amazon DMS 支持 Enterprise、Standard、Workgroup 和 Developer 版的本地和 Amazon RDS 版本。

有关使用 Amazon DMS 和 SQL Server 目标数据库的其他详细信息,请参阅以下内容。

将 SQL Server 作为 Amazon Database Migration Service 目标的限制

将 SQL Server 数据库作为 Amazon DMS 目标时,存在以下限制:

  • 在您手动创建带有计算列的 SQL Server 目标表时,如果使用 BCP 批量复制实用程序,则不支持完全加载复制。要使用完全加载复制,请通过在端点上设置额外连接属性 (ECA) 'useBCPFullLoad=false' 来禁用 BCP 加载。有关在端点上设置 ECA 的信息,请参阅创建源和目标终端节点。有关使用 BCP 的更多信息,请参阅 Microsoft SQL Server 文档

  • 在复制带有 SQL Server 空间数据类型(GEOMETRY 和 GEOGRAPHY)的表时,Amazon DMS 使用默认空间引用标识符 (SRID) 替换所有您可能插入的 SRID。对于 GEOMETRY,默认 SRID 为 0,对于 GEOGRAPHY,则为 4326。

  • 不支持临时表。在事务性应用模式下,如果在目标中手动创建这些表,则迁移临时表可能适用于仅复制任务。

  • 目前,PostgreSQL 源中的 boolean 数据类型会作为具有不一致值的 bit 数据类型迁移到 SQLServer 目标。

    作为解决方法,请执行下列操作:

    • 使用该列的 VARCHAR(1) 数据类型预先创建表(或者让 Amazon DMS 创建表)。然后,让下游处理将“F”视为 False,将“T”视为 True。

    • 为避免出现必须更改下游处理的情况,请在任务中添加转换规则,将“F”值更改为“0”,将“T”值更改为 1,并将它们存储为 SQL Server 位数据类型。

  • Amazon DMS 不支持通过更改处理来设置列的可空性(使用带 ALTER COLUMN [SET|DROP] NOT NULL 子句的 ALTER TABLE 语句)。

  • 不支持 Windows 身份验证。

将 SQL Server 作为 Amazon Database Migration Service 目标时的安全要求

下面介绍将 Amazon DMS 和 Microsoft SQL Server 目标结合使用时的安全要求:

  • Amazon DMS 用户账户必须在要连接到的 SQL Server 数据库上至少具有 db_owner 用户角色。

  • SQL Server 系统管理员必须向所有 Amazon DMS 用户账户提供此权限。

使用 SQL Server 作为 Amazon DMS 的目标时的端点设置

您可以使用端点设置来配置 SQL Server 目标数据库,这与使用额外连接属性类似。您可以在使用 Amazon DMS 控制台创建目标端点时指定设置,或者在 Amazon CLI 中使用符合 --microsoft-sql-server-settings '{"EndpointSetting": "value", ...}' JSON 语法的 create-endpoint 命令。

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

名称 描述

ControlTablesFileGroup

为 Amazon DMS 内部表指定文件组。当复制任务开始时,将在指定的文件组上创建所有内部 Amazon DMS 控制表(awsdms_ apply_exception、awsdms_apply、awsdms_changes)。

默认值:无

有效值:字符串

例如:--microsoft-sql-server-settings '{"ControlTablesFileGroup": "filegroup1"}'

以下是用于创建文件组的命令的示例。

ALTER DATABASE replicate ADD FILEGROUP Test1FG1; GO ALTER DATABASE replicate ADD FILE (        NAME = test1dat5,        FILENAME = 'C:\temp\DATA\t1dat5.ndf',        SIZE = 5MB,        MAXSIZE = 100MB,        FILEGROWTH = 5MB    )    TO FILEGROUP Test1FG1;    GO

ExecuteTimeout

使用此额外连接属性 (ECA) 设置 SQL Server 实例的客户端语句超时时间(以秒为单位)。默认值为 60 秒。

例如:'{"ExecuteTimeout": 100}'

UseBCPFullLoad

使用该属性为使用 BCP 的完全加载操作传输数据。如果目标表包含的身份列在源表中不存在,必须禁用使用 BCP 加载表选项。

默认值:true

有效值:true/false

例如:--microsoft-sql-server-settings '{"UseBCPFullLoad": false}'

Microsoft SQL Server 的目标数据类型

下表显示了使用 Amazon DMS 时支持的 Microsoft SQL Server 目标数据类型以及来自 Amazon DMS 数据类型的默认映射。有关 Amazon DMS 数据类型的其他信息,请参阅Amazon Database Migration Service 的数据类型

Amazon DMS 数据类型

SQL Server 数据类型

BOOLEAN

TINYINT

BYTES

VARBINARY(length)

DATE

对于 SQL Server 2008 及更高版本,请使用 DATE。

对于早期版本,如果小数位数等于或小于 3,请使用 DATETIME。在所有其他情况下,请使用 VARCHAR (37)。

TIME

对于 SQL Server 2008 及更高版本,请使用 DATETIME2 (%d)。

对于早期版本,如果小数位数等于或小于 3,请使用 DATETIME。在所有其他情况下,请使用 VARCHAR (37)。

DATETIME

对于 SQL Server 2008 及更高版本,请使用 DATETIME2(精度)。

对于早期版本,如果小数位数等于或小于 3,请使用 DATETIME。在所有其他情况下,请使用 VARCHAR (37)。

INT1

SMALLINT

INT2

SMALLINT

INT4

INT

INT8

BIGINT

NUMERIC

NUMERIC (p,s)

REAL4

REAL

REAL8

FLOAT

STRING

如果列是日期或时间列,请执行以下操作:

  • 对于 SQL Server 2008 及更高版本,请使用 DATETIME2。

  • 对于早期版本,如果小数位数等于或小于 3,请使用 DATETIME。在所有其他情况下,请使用 VARCHAR (37)。

如果列不是日期或时间列,请使用 VARCHAR (length)。

UINT1

TINYINT

UINT2

SMALLINT

UINT4

INT

UINT8

BIGINT

WSTRING

NVARCHAR (length)

BLOB

VARBINARY(max)

IMAGE

要将此数据类型用于 Amazon DMS,必须允许对特定任务使用 BLOB。Amazon DMS 仅在包含主键的表中支持 BLOB 数据类型。

CLOB

VARCHAR(max)

要将此数据类型用于 Amazon DMS,必须允许对特定任务使用 CLOB。在更改数据捕获 (CDC) 期间,Amazon DMS 仅在包含主键的表中支持 CLOB 数据类型。

NCLOB

NVARCHAR(max)

要将此数据类型用于 Amazon DMS,必须允许对特定任务使用 NCLOB。在 CDC 期间,Amazon DMS 仅在包含主键的表中支持 NCLOB 数据类型。