使用微软 SQL Server 数据库作为来源 Amazon DMS - Amazon 数据库迁移服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用微软 SQL Server 数据库作为来源 Amazon DMS

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

有关 Amazon DMS 支持作为源的 SQL Server 版本的信息,请参见的来源 Amazon DMS

源 SQL Server 数据库可安装在您网络中的任意计算机上。在与 Amazon DMS 一起使用时,需要 SQL Server 账户,该账户对源数据库具有与选定任务类型相对应的访问权限。此账户必须具有 view definitionview server state 权限。您可以使用以下命令添加此权限:

grant view definition to [user] grant view server state to [user]

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

IPAddress\InstanceName

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

10.0.0.25\SQLTest

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

注意

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

可以使用 SSL 加密 SQL Server 终端节点与复制实例之间的连接。有关将 SSL 用于 SQL Server 终端节点的更多信息,请参阅将 SSL 与 Amazon Database Migration Service 配合使用

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

使用 SQL Server 作为源代码的限制 Amazon DMS

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

  • 列的身份属性不迁移到目标数据库列。

  • SQL Server 端点不支持使用带有稀疏列的表。

  • 不支持 Windows 身份验证。

  • 不复制对 SQL Server 中计算字段的更改。

  • 不支持临时表。

  • 不支持 SQL Server 分区切换。

  • 使用 WRITETEXT 和 UPDATETEXT 实用程序时, Amazon DMS 不会捕获应用于源数据库的事件。

  • 不支持以下数据操作语言(DML)模式。

    SELECT * INTO new_table FROM existing_table
  • 在将 SQL Server 作为源时,不支持列级别加密。

  • Amazon DMS 不支持将 SQL Server 2008 或 SQL Server 2008 R2 作为来源进行服务器级审计。这是因为 SQL Server 2008 和 2008 R2 存在已知问题。例如,运行以下命令会 Amazon 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';

  • Amazon DMS 不支持更改处理以设置和取消设置列默认值(使用带ALTER TABLEALTER COLUMN SET DEFAULT句的子句)。

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

  • 在 SQL Server 2012 和 SQL Server 2014 中,将 DMS 复制与可用性组一起使用时,无法将分发数据库放入可用性组。SQL 2016 支持将分发数据库放入可用性组中,但合并、双向或 peer-to-peer 复制拓扑中使用的分布数据库除外。

  • 对于分区表, Amazon DMS 不支持为每个分区设置不同的数据压缩设置。

  • 将值插入 SQL Server 空间数据类型(GEOGRAPHY 和 GEOMETRY)时,可以忽略空间参考系统标识符(SRID)属性或指定其他数字。复制具有空间数据类型的表时, Amazon DMS 将 SRID 替换为默认 SRID(几何为 0,地理位置为 4326)。

  • 如果您的数据库未配置为进行 MS-REPLICATION 或 MS-CDC,您仍然可以捕获没有主键的表,但只捕获 INSERT/DELETE DML 事件。将忽略 UPDATE 和 TRUNCATE TABLE 事件。

  • 不支持列存储索引。

  • 不支持内存优化表(使用内存中 OLTP)。

  • 当复制主键由多个列组成的表时,不支持在完全加载期间更新主键列。

  • 不支持延迟的耐久性。

  • 由于 RDS 执行备份的方式,readBackupOnly=Y 端点设置(额外连接属性)在 RDS for SQL Server 源实例上不起作用。

  • EXCLUSIVE_AUTOMATIC_TRUNCATION 在 Amazon RDS SQL Server 源实例上不起作用,因为 RDS 用户无权运行 SQL Server 存储过程 sp_repldone

  • Amazon DMS 不捕获截断命令。

  • Amazon DMS 不支持从开启了加速数据库恢复 (ADR) 的数据库进行复制。

  • Amazon DMS 不支持在单个事务中捕获数据定义语言 (DDL) 和数据操作语言 (DML) 语句。

  • Amazon DMS 不支持复制数据层应用程序包 (DACPAC)。

  • 当您将更改应用于目标数据库时,涉及主键或唯一索引并更新多个数据行的 UPDATE 语句可能会导致冲突。例如,当目标数据库通过 INSERT 和 DELETE 语句而不是单个 UPDATE 语句应用更新时,可能会发生这种情况。在批量优化应用模式中,该表可能会被忽略。在事务应用模式下,UPDATE 操作可能会导致违反约束。要避免出现此问题,请重新加载相关表。或者,在 Apply Exceptions 控制表(dmslogs.awsdms_apply_exceptions)中找到有问题的记录,然后在目标数据库中手动对其进行编辑。有关更多信息,请参阅更改处理优化设置

  • Amazon DMS 不支持表和架构的复制,其中名称包含以下集合中的特殊字符。

    \\ -- \n \" \b \r ' \t ;

  • 不支持数据屏蔽。 Amazon DMS 在不进行屏蔽的情况下迁移被屏蔽的数据。

  • Amazon DMS 最多复制 32,767 个带主键的表,每个表最多可复制 1,000 个列。这是因为 Amazon DMS 会为每个复制的表创建一个 SQL Server 复制文章,而 SQL Server 复制文章有这些限制。

  • 使用更改数据捕获(CDC)时,必须将构成唯一索引的所有列定义为 NOT NULL。如果不满足此要求,将导致出现 SQL Server 系统错误 22838。

访问备份事务日志时适用以下限制:

  • 不支持加密的备份。

  • 不支持存储在 URL 或 Windows Azure 上的备份。

  • Amazon DMS 不支持直接处理来自备用共享文件夹的文件级别的事务日志备份。

仅完全加载任务的权限

要执行仅完全加载的任务,需要以下权限。请注意,这 Amazon DMS 不会创建dms_user登录名。有关为 SQL Server 创建登录角色的信息,请参阅使用 Microsoft SQL Server 创建数据库用户

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 ; USE master; GRANT VIEW SERVER STATE TO dms_user;

在 SQL Server 源中使用持续复制(CDC)的先决条件

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

尤其在对作为 Amazon DMS 源的 SQL Server 数据库使用持续复制时,存在以下要求:

  • 必须配置 SQL Server 进行完整备份,并且您必须在开始复制数据之前先进行一次备份。

  • 恢复模式必须设置为 Bulk loggedFull

  • 不支持 SQL Server 备份到多个磁盘。如果将备份定义为将数据库备份写入不同磁盘上的多个文件,则 Amazon DMS 无法读取数据, Amazon DMS 任务将失败。

  • 对于自管理 SQL Server 源,在您删除任务时,DMS CDC 任务中使用的源数据库的 SQL Server Replication Publisher 定义不会被删除。SQL Server 系统管理员必须从 SQL Server 删除自管理源的这些定义。

  • 在 CDC 期间, Amazon DMS 需要查找 SQL Server 事务日志备份才能读取更改。 Amazon DMS 不支持使用本机格式的第三方备份软件创建的 SQL Server 事务日志备份。要支持采用本机格式并且使用第三方备份软件创建的事务日志备份,请将 use3rdPartyBackupDevice=Y 连接属性添加到源端点。

  • 对于自管理 SQL Server 源,请注意,在新创建的表发布前,SQL Server 不会捕获对它们的更改。将表添加到 SQL Server 源时,会 Amazon DMS 管理发布的创建。但是,该过程可能需要几分钟时间。不会将在该延迟期间对新创建的表执行的操作捕获或复制到目标中。

  • Amazon DMS 更改数据捕获需要在 SQL Server 中开启完整的事务日志记录。要在 SQL Server 中启用完整事务日志记录,请启用 MS-REPLICATION 或 CHANGE DATA CAPTURE(CDC)。

  • 在 MS CDC 捕获作业处理这些更改之前,SQL Server tlog 条目不会被标记为可重复使用。

  • 内存优化表上不支持 CDC 操作。该限制适用于 SQL Server 2014(在此版本中首次引入该功能)及更高版本。

  • Amazon DMS 默认情况下,更改数据捕获需要将 Amazon EC2 或 On-Prem SQL 服务器上的分布数据库作为源。因此,请确保在为带有主键的表配置 MS 复制时已激活分发服务器。

捕获本地或 Amazon EC2 上的自管理 SQL Server 的数据更改

要从源 Microsoft SQL Server 数据库中捕获更改,请确保该数据库已配置为进行完整备份。将数据库配置为完全恢复模式或批量日志记录模式。

对于自行管理的 SQL Server 源,请 Amazon DMS 使用以下内容:

MS-Replication

用于捕获带主键的表的更改。您可以通过向源 SQL Server 实例上的 Amazon DMS 端点用户授予系统管理员权限来自动进行配置。或者,您可以按照本节中的步骤准备源代码并使用对端点不具有 sysadmin 权限的 Amazon DMS 用户。

MS-CDC

用于捕获不带主键的表的更改。MS-CDC 必须在数据库级别上启用,并且为各个表分别启用。

设置 SQL Server 数据库进行持续复制(CDC)时,可以执行下列操作之一:

  • 使用 sysadmin 角色设置持续复制。

  • 将持续复制设置为不使用 sysadmin 角色。

在自管理 SQL Server 上设置持续复制

本部分包含有关使用或不使用 sysadmin 角色在自管理 SQL Server 上设置持续复制的信息。

在自管理 SQL Server 上设置持续复制:使用 sysadmin 角色

Amazon DMS SQL Server 的持续复制对带主键的表使用本机 SQL Server 复制,对没有主键的表使用更改数据捕获 (CDC)。

在设置持续复制之前,请参阅在 SQL Server 源中使用持续复制(CDC)的先决条件

对于带有主键的表,通常 Amazon DMS 可以在源上配置所需的工件。但对于自管理 SQL Server 源数据库实例,必须先手动配置 SQL Server 分发。执行此操作后,具有 sysadmin 权限的 Amazon DMS 源用户可以自动为具有主键的表创建发布。

要检查是否已配置分发,请运行以下命令。

sp_get_distributor

如果列分发的结果是 NULL,则未配置分发。请使用以下过程设置分发。

设置分发
  1. 使用 SQL Server Management Studio(SSMS)工具连接到 SQL Server 源数据库。

  2. 打开复制文件夹的上下文(右键单击)菜单,然后选择配置分发。此时将显示“配置分发向导”。

  3. 按照向导输入默认值并创建分发。

设置 CDC

Amazon DMS 如果您不使用只读副本,3.4.7 及更高版本可以自动为您的数据库和所有表设置 MS CDC。要使用此功能,请将 SetUpMsCdcForTables ECA 设置为 true。有关 ECA 的信息,请参阅端点设置

对于 3.4.7 Amazon DMS 之前的版本或作为源的只读副本,请执行以下步骤:

  1. 对于无主键的表,请为数据库设置 MS-CDC。要执行此操作,请使用分配了 sysadmin 角色的账户,然后运行以下命令。

    use [DBname] EXEC sys.sp_cdc_enable_db
  2. 接下来,为每个源表设置 MS-CDC。对于具有唯一键但没有主键的每个表,运行以下查询来设置 MS-CDC。

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @index_name = N'unique_index_name', @role_name = NULL, @supports_net_changes = 1 GO
  3. 对于没有主键或唯一键的每个表,运行以下查询来设置 MS-CDC。

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL GO

有关为特定表设置 MS-CDC 的更多信息,请参阅 SQL Server 文档

在独立 SQL Server 上设置持续复制:不使用 sysadmin 角色

有关不使用 sysadmin 角色在独立 SQL Server 上设置持续复制的信息,请参阅在独立 SQL Server 上设置持续复制:不使用 sysadmin 角色

在云 SQL Server 数据库实例上设置持续复制

此部分介绍如何在云托管 SQL Server 数据库实例上设置 CDC。云托管的 SQL 服务器实例是在 Amazon RDS for SQL Server、Azure SQL 托管实例或任何其他托管云 SQL Server 实例上运行的实例。有关每种数据库类型的持续复制限制的信息,请参阅使用 SQL Server 作为源代码的限制 Amazon DMS

在设置持续复制之前,请参阅在 SQL Server 源中使用持续复制(CDC)的先决条件

不同于自管理 Microsoft SQL Server 源,Amazon RDS for SQL Server 不支持 MS-Replication。因此, Amazon DMS 需要对带或不带主键的表使用 MS-CDC。

Amazon RDS 不授予系统管理员设置用于源 SQL Server 实例中持续更改的复制项目的权限。 Amazon DMS 请确保在以下过程中使用主用户权限为 Amazon RDS 实例启用 MS-CDC。

在云 SQL Server 数据库实例上启用 MS-CDC
  1. 在数据库级别运行以下查询之一。

    对于 RDS for SQL Server 数据库实例,请使用此查询。

    exec msdb.dbo.rds_cdc_enable_db 'DB_name'

    对于 Azure SQL 托管数据库实例,请使用此查询。

    USE DB_name GO EXEC sys.sp_cdc_enable_db GO
  2. 对于带主键的每个表,运行以下查询来启用 MS-CDC。

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL, @supports_net_changes = 1 GO

    对于有唯一键但没有主键的每个表,运行以下查询来启用 MS-CDC。

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @index_name = N'unique_index_name', @role_name = NULL, @supports_net_changes = 1 GO

    对于既没有主键又没有唯一键的每个表,运行以下查询来启用 MS-CDC。

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL GO
  3. 使用以下命令设置要在源上可用的更改的保留期。

    use dbname EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 86399 exec sp_cdc_stop_job 'capture' exec sp_cdc_start_job 'capture'

    参数 @pollinginterval 按秒计,建议值设置为 86399。当该参数为 @pollinginterval = 86399 时,这意味着事务日志将更改保留 86399 秒(一天)。过程 exec sp_cdc_start_job 'capture' 启动这些设置。

    注意

    对于某些 SQL Server 版本,如果 pollinginterval 的值设置为超过 3599 秒,该值将重置为默认的五秒。发生这种情况时,T-Log 条目会在读取之前 Amazon DMS 被清除。要确定哪些 SQL Server 版本受到此已知问题的影响,请参阅这篇 Microsoft 知识库文章

    如果您使用带有多可用区的 Amazon RDS,请确保也设置辅助项,以便在失效转移时具有正确的值。

    exec rdsadmin..rds_set_configuration 'cdc_capture_pollinginterval' , 86399

如果捕获 SQL Server 源正在进行的更改的 Amazon DMS 复制任务停止超过一小时,请使用以下步骤。

在执行 Amazon DMS 复制任务期间保持保留期
  1. 使用以下命令停止截断事务日志的作业。

    exec sp_cdc_stop_job 'capture'
  2. 在 Amazon DMS 控制台上找到您的任务并继续执行任务。

  3. 选择监控选项卡,然后勾选 CDCLatencySource 指标。

  4. 如果 CDCLatencySource 指标等于 0(零)并保持不变,请使用以下命令重新启动截断事务日志的作业。

    exec sp_cdc_start_job 'capture'

记得启动截断 SQL Server 事务日志的作业。否则,您的 SQL Server 实例上的存储空间可能会被填满。

云 SQL Server 数据库实例上的持续复制限制

  • Amazon DMS 仅支持活动事务日志的持续复制 (CDC)。您不能将备份日志用于 CDC。

  • 如果将事件从活动事务日志移动到备份日志,或者将其从活动事务日志中截断,则可能丢失事件。

使用适用于 SQL Server 的 Amazon RDS 作为来源时的推荐设置 Amazon DMS

当您使用 Amazon RDS for SQL Server 作为源时,捕获作业依赖于参数 maxscansmaxtrans。这些参数控制捕获对事务日志执行的最大扫描次数以及每次扫描处理的事务数。

对于事务数大于 maxtrans*maxscans 的数据库,增加其 polling_interval 值可能会导致活动事务日志记录的累积。这种累积反过来又会导致事务日志的大小增加。

请注意,这 Amazon DMS 并不依赖于 MS-CDC 捕获作业。MS-CDC 捕获作业将事务日志条目标记为已处理。这样可允许事务日志备份作业从事务日志中删除条目。

我们建议您监控事务日志的大小和 MS-CDC 作业是否成功。如果 MS-CDC 作业失败,事务日志可能会过度增长并导致 Amazon DMS 复制失败。您可以使用源数据库中的 sys.dm_cdc_errors 动态管理视图来监控 MS-CDC 捕获作业错误。您可以使用 DBCC SQLPERF(LOGSPACE) 管理命令来监控事务日志的大小。

解决由 MS-CDC 引起的事务日志增加问题
  1. 检查数据库是否 Amazon DMS 正在从中复制,并验证它是否持续增加。Log Space Used %

    DBCC SQLPERF(LOGSPACE)
  2. 确定阻碍事务日志备份过程的原因。

    Select log_reuse_wait, log_reuse_wait_desc, name from sys.databases where name = db_name();

    如果 log_reuse_wait_desc 值等于 REPLICATION,则说明日志备份保留是 MS-CDC 中的延迟所导致。

  3. 通过增加 maxtransmaxscans 参数值来增加捕获作业处理的事件数。

    EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@maxtrans = 5000, @maxscans = 20 exec sp_cdc_stop_job 'capture' exec sp_cdc_start_job 'capture'

要解决此问题,请将maxscansmaxtrans的值设置maxtrans*maxscans为等于每天为从源数据库 Amazon DMS 复制的表生成的事件的平均数。

如果将这些参数设置为高于建议值,则捕获作业会处理事务日志中的所有事件。如果将这些参数设置为低于建议值,则 MS-CDC 延迟会增加,事务日志也会增加。

maxscansmaxtrans 确定合适的值可能很困难,因为工作负载的变化会产生不同数量的事件。在这种情况下,建议您对 MS-CDC 延迟设置监控。有关更多信息,请参阅 SQL Server 文档中的监控流程。然后根据监控结果动态配置 maxtransmaxscans

如果 Amazon DMS 任务找不到恢复或继续任务所需的日志序列号 (LSN),则该任务可能会失败并需要完全重新加载。

注意

使用 Amazon DMS 从 RDS for SQL Server 源复制数据时,在 Amazon RDS 实例的停止启动事件之后尝试恢复复制时,您可能会遇到错误。这是由于 SQL Server Agent 进程在停止启动事件后重新启动时,会重新启动捕获作业进程。这绕过了 MS-CDC 轮询间隔。

因此,在事务量低于 MS-CDC 捕获任务处理的数据库上,这可能会导致数据在从停止位置恢复之前 Amazon DMS 被处理或标记为已复制和备份,从而导致以下错误:

[SOURCE_CAPTURE ]E: Failed to access LSN '0000dbd9:0006f9ad:0003' in the backup log sets since BACKUP/LOG-s are not available. [1020465] (sqlserver_endpoint_capture.c:764)

要缓解此问题,请按照之前的建议设置 maxtransmaxscans 值。

支持的 SQL Server 压缩方法

请注意以下有关 Amazon DMS 支持的 SQL Server 压缩方法的内容:

  • Amazon DMS 在 SQL Server 版本 2008 及更高版本中支持行/页压缩。

  • Amazon DMS 不支持 Vardecimal 存储格式。

  • Amazon DMS 不支持稀疏列和列结构压缩。

使用自行管理的 SQL Server AlwaysOn 可用性组

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

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

使用主可用性组副本

要在中使用主可用性组作为源 Amazon DMS,请执行以下操作:
  1. 为可用性副本中的所有 SQL Server 实例启用分发选项。有关更多信息,请参阅在自管理 SQL Server 上设置持续复制

  2. 在 Amazon DMS 控制台中,打开 SQL Server 源数据库设置。对于服务器名称,请指定为可用性组侦听器配置的域名服务(DNS)名称或 IP 地址。

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

使用辅助可用性组副本

要在中使用辅助可用性组作为源 Amazon DMS,请执行以下操作:
  1. 使用与 Amazon DMS 源端点用户相同的凭据来连接各个副本。

  2. 确保您的 Amazon 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>';
  3. 创建源端点时,请为端点的服务器名称或端点密钥的服务器地址指定可用性组侦听器的 DNS 名称。有关可用性组侦听器的更多信息,请参阅 SQL Server 文档中的可用性组侦听器是什么?

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

  4. 请将以下额外连接属性添加到您的源端点。

    额外连接属性 注意事项
    applicationIntent ReadOnly 如果没有此 ODBC 设置,复制任务将路由到主可用性组副本。有关更多信息,请参阅 SQL Server 文档中的对高可用性、灾难恢复的 SQL Server Native Client 支持
    multiSubnetFailover yes 有关更多信息,请参阅 SQL Server 文档中的对高可用性、灾难恢复的 SQL Server Native Client 支持
    alwaysOnSharedSynchedBackupIsEnabled false 有关更多信息,请参阅使用 SQL Server 作为源时的端点设置 Amazon DMS
    activateSafeguard false 有关更多信息,请参阅下面的限制
    setUpMsCdcForTables false 有关更多信息,请参阅下面的限制
  5. 在您可用性组的所有副本上启用分发选项。将所有节点添加到分发服务器列表中。有关更多信息,请参阅设置分发

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

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

限制

以下是使用辅助可用性组副本的限制:

  • Amazon DMS 使用只读可用性组副本作为源时,不支持 Safeguard。有关更多信息,请参阅使用 SQL Server 作为源时的端点设置 Amazon DMS

  • Amazon DMS 使用只读可用性组副本作为源时,不支持setUpMsCdcForTables额外的连接属性。有关更多信息,请参阅使用 SQL Server 作为源时的端点设置 Amazon DMS

  • Amazon DMS 从版本 3.4.7 开始,可以使用自我管理的辅助可用性组副本作为源数据库,用于持续复制(更改数据捕获或 CDC)。不支持云 SQL Server 多可用区只读副本。如果您使用早期版本的 Amazon DMS,请确保使用主可用性组副本作为 CDC 的源数据库。

失效转移到其他节点

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

使用 SQL Server 作为源时的安全要求 Amazon Database Migration Service

Amazon DMS 用户帐户必须至少具有您要连接的源 SQL Server 数据库上的db_owner用户角色。

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

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

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

名称 描述

ActivateSafeguard

此属性可开启或关闭 Safeguard。有关 Safeguard 的更多信息,请参阅下文的 SafeguardPolicy

默认值:true

有效值:{falsetrue}

例如:'{"ActivateSafeguard": true}'

AlwaysOnSharedSynchedBackupIsEnabled

此属性调整从作为 Always On 可用性组群集一部分托管的 SQL Server 源数据库迁移 Amazon DMS 时的行为。

Amazon DMS 增强了对配置为在 Always On 群集中运行的 SQL Server 源数据库的支持。在这种情况下, Amazon DMS 会尝试跟踪事务备份是否是在 Always On 集群中的节点(而非托管源数据库实例的节点)上发生。在迁移任务启动 Amazon DMS 时,尝试连接到集群中的每个节点,但如果无法连接到任何一个节点,则会失败。

如果您 Amazon DMS 需要轮询 Always On 集群中的所有节点以获取事务备份,请将此属性设置为false

默认值:true

有效值:truefalse

示例:'{"AlwaysOnSharedSynchedBackupIsEnabled": false}'

"ApplicationIntent": "readonly"

使用此 ODBC 驱动程序属性设置,SQL Server 可将您的复制任务路由到优先级最高的只读节点。如果不使用此设置,SQL Server 会将您的复制任务路由到主读写节点。

EnableNonSysadminWrapper

在不使用 sysadmin 用户的情况下在独立 SQL 服务器上设置持续复制时,请使用此端点设置。3.4.7 及更高 Amazon DMS 版本支持此参数。有关在独立 SQL Server 上设置持续复制的信息,请参阅在独立 SQL Server 上设置持续复制:不使用 sysadmin 角色

默认值:false

有效值:truefalse

例如:'{"EnableNonSysadminWrapper": true}'

ExecuteTimeout

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

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

FatalOnSimpleModel

如果设置为 true,当 SQL Server 数据库恢复模式设置为 simple 时,此设置会生成致命错误。

默认值:false

有效值:truefalse

示例:'{"FatalOnSimpleModel": true}'

ForceLobLookup

强制在内联 LOB 上执行 LOB 查找。

默认值:false

有效值:truefalse

例如:'{"ForceLobLookup": false}'

"MultiSubnetFailover": "Yes"

借助此 ODBC 驱动程序属性,DMS 可在可用性组失效转移时连接到新的主服务器。此属性专为连接中断或侦听器 IP 地址不正确的情况而设计。在这些情况下, Amazon DMS 会尝试连接到与可用性组侦听器关联的所有 IP 地址。

ReadBackupOnly

使用此属性需要 sysadmin 权限。当此属性设置为时Y,在正在进行的复制过程中,只能从事务日志备份中 Amazon DMS 读取更改,而不会从活动事务日志文件中读取更改。通过将此参数设置为 Y,可以在完全加载和持续复制任务期间控制活动事务日志文件的增长。但是,它会向持续复制添加一些源延迟。

有效值:NY。默认值为 N

例如:'{"ReadBackupOnly": Y}'

注意:由于 RDS 执行备份的方式,此参数在 Amazon RDS SQL Server 源实例上不起作用。

SafeguardPolicy

为了获得最佳性能,请 Amazon DMS 尝试从活动事务日志 (TLOG) 中捕获所有未读更改。不过,有时由于截断,有效的 TLOG 可能未包含所有未读取的更改。发生这种情况时, Amazon DMS 访问日志备份以捕获缺少的更改。为了最大限度地减少访问日志备份的需求,请使用以下方法之一 Amazon DMS 防止截断:

  1. RELY_ON_SQL_SERVER_REPLICATION_AGENT启动数据库中的事务):这是的默认设置 Amazon DMS。

    使用此设置时, Amazon DMS 要求运行 SQL Server 日志读取器代理,以便 Amazon DMS 可以从活动 TLOG 中移动标记为复制的事务。请注意,如果未运行日志读取器代理,活动的 TLOG 可能会变满,从而导致源数据库切换到只读模式,直到您能够解决这个问题。如果您出于其他目的需要在数据库中启用 Microsoft 复制 Amazon DMS,则必须选择此设置。

    使用此设置时,通过创建名为的表来 Amazon DMS 最大限度地减少日志备份读取,awsdms_truncation_safeguard并通过模仿数据库中打开的事务来防止 TLOG 截断。这可以防止数据库在五分钟内(默认情况下)截断事件并将其移至备份日志。确保该表未包含在任何维护计划中,因为它可能会导致维护作业失败。如果没有使用 Start Transactions 数据库选项配置的任务,则可以安全地删除此表。

  2. EXCLUSIVE_AUTOMATIC_TRUNCATION(仅用于sp_repldone单个任务):使用此设置时 Amazon DMS ,可以完全控制将日志条目标记为ready for truncation使用的复制代理进程sp_repldone。使用此设置时, Amazon DMS 不会像RELY_ON_SQL_SERVER_REPLICATION_AGENT(默认)设置那样使用虚拟事务。只有当 MS Replication 不用于源数据库以外 Amazon DMS 的任何其他目的时,才能使用此设置。此外,使用此设置时,只有一个 Amazon DMS 任务可以访问数据库。如果需要对同一个数据库运行 parallel Amazon DMS 任务,请使用RELY_ON_SQL_SERVER_REPLICATION_AGENT

    • 此设置要求在数据库中停止日志读取器代理。如果任务启动时日志阅读器代理正在运行,则该 Amazon DMS 任务将强制其停止。或者,也可以在启动此任务之前手动停止日志读取器代理。

    • 将此方法用于 MS-CDC 时,应停止并禁用 MS-CDC 捕获MS-CDC 清理作业。

    • Microsoft SQL Server 迁移作业在远程 Distributor 计算机上运行时,你 Amazon DMS 无法使用此设置,因为无法访问远程计算机。

    • EXCLUSIVE_AUTOMATIC_TRUNCATION 在 Amazon RDS for SQL Server 源实例上不起作用,因为 Amazon RDS 用户无权运行 sp_repldone 存储过程。

    • 如果在不使用 sysadmin 角色的情况下将 SafeguardPolicy 设置为 EXCLUSIVE_AUTOMATIC_TRUNCATION,则必须向 dmsuser 用户授予 dbo.syscategoriesdbo.sysjobs 对象的权限。

默认值:RELY_ON_SQL_SERVER_REPLICATION_AGENT

有效值:{EXCLUSIVE_AUTOMATIC_TRUNCATIONRELY_ON_SQL_SERVER_REPLICATION_AGENT}

例如:'{"SafeguardPolicy": "EXCLUSIVE_AUTOMATIC_TRUNCATION"}'

SetUpMsCdcForTables

此属性可为源数据库和任务映射中未启用 MS-Replication 的表启用 MS-CDC。将此值设置为 true,即可在源数据库上运行 sp_cdc_enable_db 存储过程,并在任务中未在源数据库中启用 MS-Replication 的每个表上运行 sp_cdc_enable_table 存储过程。有关启用分发的更多信息,请参阅在自管理 SQL Server 上设置持续复制

有效值:{truefalse}

例如:'{"SetUpMsCdcForTables": true}'

TlogAccessMode

表示用于获取 CDC 数据的模式。

默认值:PreferTlog

有效值:BackupOnlyPreferBackupPreferTlogTlogOnly

例如:'{"TlogAccessMode": "PreferTlog"}'

Use3rdPartyBackupDevice

当此属性设置为 Y 时,如果第三方事务日志备份是以本机格式创建的, Amazon DMS 会处理这些备份。

SQL Server 的源数据类型

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

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

有关 Amazon DMS 数据类型的更多信息,请参见Amazon Database Migration Service 的数据类型

SQL Server 数据类型

Amazon 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

TEXT

要将此数据类型与一起使用 Amazon DMS,必须为特定任务启用 CLOB 数据类型。

对于 SQL Server 表, Amazon DMS 即使对于不更改 SQL Server 中 LOB 列值的 UPDATE 语句,也会更新目标中的 LOB 列。

在 CDC 期间,仅在包含主键的表中 Amazon DMS 支持 CLOB 数据类型。

NCHAR

WSTRING

NVARCHAR (length)

WSTRING

NVARCHAR (max)

NCLOB

NTEXT

要将此数据类型与一起使用 Amazon DMS,必须 SupportLobs 为特定任务启用使用。有关启用 Lob 支持的更多信息,请参阅为任务中的源数据库设置 LOB 支持 Amazon DMS

对于 SQL Server 表, Amazon DMS 即使对于不更改 SQL Server 中 LOB 列值的 UPDATE 语句,也会更新目标中的 LOB 列。

在 CDC 期间,仅在包含主键的表中 Amazon DMS 支持 CLOB 数据类型。

BINARY

BYTES

VARBINARY

BYTES

VARBINARY (max)

BLOB

IMAGE

对于 SQL Server 表, Amazon DMS 即使对于不更改 SQL Server 中 LOB 列值的 UPDATE 语句,也会更新目标中的 LOB 列。

要将此数据类型与一起使用 Amazon DMS,必须允许将 BLOB 数据类型用于特定任务。

Amazon DMS 仅在包含主键的表中支持 BLOB 数据类型。

TIMESTAMP

BYTES

UNIQUEIDENTIFIER

string

HIERARCHYID

在复制到 SQL Server 目标终端节点时,使用 HIERARCHYID。

在复制到所有其他目标终端节点时,使用 WSTRING (250)。

XML

NCLOB

对于 SQL Server 表, Amazon DMS 即使对于不更改 SQL Server 中 LOB 列值的 UPDATE 语句,也会更新目标中的 LOB 列。

要将此数据类型与一起使用 Amazon DMS,必须允许将 NCLOB 数据类型用于特定任务。

在 CDC 期间,仅在包含主键的表中 Amazon DMS 支持 NCLOB 数据类型。

GEOMETRY

在复制到支持此数据类型的目标终端节点时,使用 GEOMETRY。

在复制到不支持此数据类型的目标终端节点时,使用 CLOB。

GEOGRAPHY

在复制到支持此数据类型的目标终端节点时,使用 GEOGRAPHY。

在复制到不支持此数据类型的目标终端节点时,使用 CLOB。

Amazon DMS 不支持包含以下数据类型的字段的表。

  • CURSOR

  • SQL_VARIANT

  • TABLE

注意

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