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

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

将 Microsoft SQL Server 数据库作为 Amazon DMS 的源

使用 Amazon DMS 从一个或多个 Microsoft SQL Server 数据库中迁移数据。将 SQL Server 数据库作为源时,您可以将数据迁移到另一个 SQL Server 数据库或其他 Amazon DMS 支持的数据库。以下列出了可用作本地数据库源的 SQL Server 版本。

SQL Server 版本 完全加载 持续复制 (CDC)

2005、2008、2008R2、2012、2014、2016、2017、2019

企业

标准

工作组

开发人员

Web

企业版

开发人员

标准版(版本 2016 SP1 及更高版本)

将 SQL Server 2005 作为源时,只支持满载。

以下列出了可用作 Amazon RDS 数据库源的 SQL Server 版本。

SQL Server 版本 完全加载 持续复制 (CDC)

2012、2014、2016、2017 和 2019

企业

标准

企业版

标准版(版本 2016 SP1 及更高版本)

注意

Support 将 Microsoft SQL Server 版本 2019 作为源。

源 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 的特定静态端口号。因此,在创建时,您想知道 SQL Server 命名实例的实际端口号。Amazon DMS源终端节点。

可以使用 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 作为源时,不支持列级别加密。

  • 支持在数据库级别启用透明数据加密 (TDE)。

  • 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 模式。

  • 不支持将辅助 SQL Server 数据库作为持续复制 (CDC) 任务的源数据库。

  • 在复制任务中使用 Microsoft SQL Server 源数据库时,如果删除该任务,则不会删除 SQL Server Replication Publisher 定义。Microsoft SQL Server 系统管理员必须从 Microsoft SQL Server 删除这些定义。

  • 不支持从索引视图复制数据。

  • 不支持使用 sp_rename 重命名表(例如,sp_rename 'Sales.SalesRegion', 'SalesReg;)

  • 不支持使用 sp_rename 重命名列(例如,sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';

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

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

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

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

  • 不支持加密的备份。

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

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

  • 备份事务日志必须位于具有相应权限和访问权限的共享文件夹中。

  • 活动的事务日志可通过 Microsoft SQL Server API(而不是在文件级)访问。

  • 不支持压缩的备份事务日志。

  • 不支持 UNIX 平台。

  • 不支持从多个条带读取备份日志。

  • 不支持 Microsoft SQL Server 备份到多个磁盘。

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

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

  • 不支持列存储索引。

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

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

  • 不支持延迟的耐久性。

  • 这些区域有:readBackupOnly=Y由于 RDS 执行备份的方式,终端节点设置 (ECA) 不适用于 SQL Server 源实例的 RDS。

  • EXCLUSIVE_AUTOMATIC_TRUNCATION不适用于 Amazon RDS SQL Server 源实例,因为 RDS 用户无权运行 SQL Server 存储过程,sp_repldone.

仅限满载任务的权限

执行仅满载任务需要以下权限。

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 或 Azure Sql 托管实例等云数据库使用持续复制 (更改数据捕获 (CDC))。

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

  • 必须配置 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)。

  • 在处理更改之前,您无法重用 SQL Server tlog

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

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

要从源 Microsoft SQL Server 数据库捕获更改,请确保为完整备份配置数据库。在完全恢复模式或大容量日志模式下配置数据库。

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

MS-复制

使用主键捕获具有主键的表的更改。您可以通过向Amazon DMS源 SQL Server 实例上的终端节点用户。或者,也可以按照本部分中的步骤操作,准备源并使用不具有 sysadmin 权限的用户。Amazon DMS终端节点。

MS-CDC

捕获不带主键的表的更改。在数据库级别和分别为所有表启用 MS-CDC。

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

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

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

在具有自管理 SQL Server 的 sysadmin 角色的情况下设置持续复制

Amazon DMSSQL Server 持续复制对于具有主键的表使用本机 SQL Server 复制,而对于无主键的表使用更改数据捕获 (CDC)。

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

对于具有主键的表,Amazon DMS通常可以在源上配置所需的项目。但是,对于自我管理的 SQL Server 源实例,请务必首先手动配置 SQL Server 分配。在你这样做后,Amazon DMS具有 sysadmin 权限的源用户可以自动为具有主键的表创建分发。

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

sp_get_distributor

如果结果为NULL对于列分发,未配置分发。您可以使用以下过程设置分发。

设置分发

  1. 使用 SQL Server Studio (SSMS) 工具 Connect 到 SQL Server 源数据库。

  2. 打开复制文件夹,然后选择配置分发. 此时将显示“配置分发向导”。

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

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

use [DBname] EXEC sys.sp_cdc_enable_db

接下来,为每个源表设置 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

对于既没有主键又没有唯一键的每个表,运行以下查询以设置 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 数据库源设置持续复制。您仍然需要具有 sysadmin 权限的用户才能为持续复制配置 SQL Server 数据库。

注意

您可以在 DMS 任务运行时执行此过程。如果 DMS 任务已停止,则仅当没有正在进行的事务日志或数据库备份时,才能执行此过程。这是因为 SQL Server 需要 SYSADMIN 权限才能在备份中查询日志序号 (LSN) 位置。

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

对于具有主键的表,请执行以下步骤。

在不使用 sysadmin 角色的情况下设置 SQL Server 数据库源进行持续复制

  1. 使用 SQL Server Management Studio (SSMS) 创建采用密码身份验证的新 SQL Server 账户。在此示例中,我们使用一个名为 dmstest 的账户。

  2. 在 SSMS 的 User Mappings (用户映射) 部分中,选择 MSDB 和 MASTER 数据库 (将提供公有权限),然后为您要使用持续复制的数据库分配 DB_OWNER 角色。

  3. 打开新帐户的上下文 (右键单击) 菜单,选择 Security (安全性),然后显式授予 Connect SQL 权限。

  4. 运行以下授权命令。

    GRANT SELECT ON FN_DBLOG TO dmstest; GRANT VIEW SERVER STATE TO dmstest; use msdb; GRANT EXECUTE ON MSDB.DBO.SP_STOP_JOB TO dmstest; GRANT EXECUTE ON MSDB.DBO.SP_START_JOB TO dmstest; GRANT SELECT ON MSDB.DBO.BACKUPSET TO dmstest; GRANT SELECT ON MSDB.DBO.BACKUPMEDIAFAMILY TO dmstest; GRANT SELECT ON MSDB.DBO.BACKUPFILE TO dmstest;
  5. 在 SSMS 中,打开复制文件夹的上下文 (右键单击) 菜单,然后选择配置分发。按照所有默认步骤操作并且针对分发配置此 SQL Server 实例。在数据库下创建分发数据库。

  6. 为 SQL Server 持续复制创建发布,如下所示:

    1. 使用 SYSADMIN 用户账户登录 SSMS。

    2. 展开 Replication (复制)

    3. 打开 Local Publications (本地发布) 的上下文(右键单击)菜单。

    4. 在新发布向导中,选择下一步.

    5. 选择要在其中创建发布的数据库。

    6. 选择 Transactional publication (事务性发布),然后选择 Next (下一步)

    7. Expand选择带 PK 的表以及要发布的表。选择下一步

    8. 选择 Next (下一步),因为不需要创建筛选器。

    9. Snapshot Agent (快照代理)屏幕中,选择第一个选项立即创建快照并使快照可用于初始化订阅。选择下一步

    10. 选择安全设置,然后选择在 SQL Server Agent 服务帐户下运行. 请确保选择通过模拟进程帐户用于发布商连接。选择 OK(确定)。

    11. 选择下一步

    12. 选择 Create the publication (创建发布)

    13. 提供采用 AR_PUBLICATION_000DBID 格式的发布名称。

      例如,如果DBID少于 10,为出版物命名AR_PUBLICATION_0000DBID>(4 个零)。如果您的DBID大于或等于 10,将发布命名为 AR_PUBLICATION_000DBID(3 个零)。您也可以使用DB_IDSQL Server 中的函数。有关DB_ID函数,请参阅SQL Server 文档.

  7. 创建新的Amazon DMS将 SQL Server 作为源终端节点的任务,使用您创建的用户帐户。

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

use [DBname] EXEC sys.sp_cdc_enable_db

接下来,为每个源表设置 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

对于既没有主键又没有唯一键的每个表,运行以下查询以设置 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 数据库实例上设置持续复制

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

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

Amazon RDS 不授予 sysadmin 权限以设置以下复制项目:Amazon DMS用于在源 SQL Server 实例中进行的持续更改。请确保按照以下过程为 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。这意味着事务日志将更改保留 86,399 秒(一天)。@pollinginterval = 86399. 过程 exec sp_cdc_start_job 'capture' 启动这些设置。

    注意

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

    如果您使用具有多可用区的 Amazon RDS,请确保还将辅助设置为在故障转移时具有正确的值。

    exec rdsadmin..rds_set_configuration 'cdc_capture_pollinginterval' , 86399

如果Amazon DMS捕获 SQL Server 源持续更改的复制任务停止超过一小时,请按照以下过程操作。

在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 实例上的存储空间可能会填满。

将 Amazon RDS for SQL Server 作为源时的可选设置Amazon DMS

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

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

为了解决 MS-CDC 导致的事务日志增加

  1. 检查Log Space Used %为数据库Amazon DMS正在复制并验证它是否持续增加。

    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动态基于监控结果。

SQL Server 支持的压缩方法

下表列出了 Amazon DMS 在每个 SQL Server 版本中支持的压缩方法。

SQL Server 版本

行/页压缩(在分区级别)

Vardecimal 存储格式

2005

2008

2012 年

2014

注意

不支持稀疏列和列式结构压缩。

使用 SQL Server AlwaysOn 可用性组

SQL Server AlwaysOn 可用性组配有高可用性和灾难恢复解决方案,提供数据库镜像的企业级替代功能。Amazon DMS不支持只读副本作为持续复制的源。

将 AlwaysOn 可用性组作为Amazon DMS,执行以下操作。

  • 在您的可用性副本中的所有 SQL Server 实例上启用分发选项。

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

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

注意

InAmazon DMS,您可以从单个 AlwaysOn 副本迁移更改,而仅适用于主副本。

将 SQL Server 作为 Amazon DMS 源时的额外连接属性

您可以使用额外的连接属性配置 SQL Server 源。在创建源终端节点时,您可以指定这些设置。如果您具有多个连接属性设置,请用分号将它们彼此分开,并且不需要额外的空格(例如,oneSetting;thenAnother)。

下表显示了将 SQL Server 作为源时可使用的额外连接属性:

名称 描述
alwaysOnSharedSynchedBackupIsEnabled

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

Amazon DMS增强了对配置为在 “始终开启” 群集中运行的 SQL Server 源数据库的支持。在本例中,Amazon DMS尝试跟踪事务备份是否从 All On 群集中的节点进行,而不是源数据库实例托管的节点。在迁移任务启动时,Amazon DMS尝试连接到群集中的每个节点,但如果无法连接到任何一个节点,则失败。

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

默认值:true

有效值:truefalse

示例:alwaysOnSharedSynchedBackupIsEnabled=false;

safeguardPolicy

为实现最佳性能,Amazon DMS 尝试从活动事务日志 (TLOG) 捕获所有未读取的更改。不过,有时由于截断,有效的 TLOG 可能未包含所有未读取的更改。在出现此情况时,Amazon DMS 将访问备份日志以捕获缺少的更改。为了最大程度地减小访问备份日志的需求,Amazon DMS 使用下列方法之一阻止截断:

1. 在数据库中启动交易:这是默认方法。在使用此方法时,Amazon DMS 通过模仿数据库中的事务来阻止 TLOG 截断。只要打开此类事务,事务开始后出现的更改就会被截断。如果您需要在数据库中启用 Microsoft Replication,则必须选择该方法。

2. 在单个任务中独家使用 sp_repldone:当使用这种方法时,Amazon DMS读取更改,然后使用 sp_repldone 将 TLOG 事务标记为可供截断。虽然此方法不涉及任何事务性活动,但只能在 Microsoft Replication 未运行时使用它。此外,在使用此方法时,仅一个 Amazon DMS 任务可在任意给定时间访问数据库。因此,如果需要对同一数据库运行并行 Amazon DMS 任务,请使用默认方法。

默认值:RELY_ON_SQL_SERVER_REPLICATION_AGENT

有效值:{EXCLUSIVE_AUTOMATIC_TRUNCATIONRELY_ON_SQL_SERVER_REPLICATION_AGENT}

示例:safeguardPolicy=RELY_ON_SQL_SERVER_REPLICATION_AGENT;

注意: EXCLUSIVE_AUTOMATIC_TRUNCATION 不适用于 SQL Server 源实例的 RDS,因为 RDS 用户无权运行 SQL Server 存储过程,sp_repldone.

readBackupOnly

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

有效值:NY. 默认为 N

示例:readBackupOnly=Y;

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

use3rdPartyBackupDevice

将此属性设置为Y、Amazon DMS处理第三方事务日志备份(如果是以本机格式创建的)。

MultiSubnetFailover=Yes

此 ODBC 驱动程序属性可帮助 DMS 在发生可用性组故障切换的情况下连接到新的主节点。此属性专为连接中断或监听器 IP 地址不正确的情况而设计。在这种情况下,Amazon DMS尝试连接到与可用性组侦听器关联的所有 IP 地址。

fatalOnSimpleModel

当设置为true,当 SQL Server 数据库恢复模型设置为时,此参数会生成致命错误simple.

DMS 3.4 及更高版本支持此参数。

默认值:false

有效值:truefalse

示例:fatalOnSimpleModel=true;

SQL Server 的源数据类型

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

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

有关 Amazon DMS 数据类型的其他信息,请参阅的数据类型AmazonDatabase 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 将为 UPDATE 语句更新目标中的 LOB 列,但不更改 SQL Server 中的 LOB 列的值。

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

NCHAR

WSTRING

NVARCHAR (length)

WSTRING

NVARCHAR (max)

NCLOB

NTEXT

要将此数据类型用于Amazon DMS,您必须允许对特定任务使用 SupportLOB。有关启用 Lob 支持的更多信息,请参阅。在 Amazon DMS 任务中为源数据库设置 LOB 支持.

对于 SQL Server 表,Amazon DMS 将为 UPDATE 语句更新目标中的 LOB 列,但不更改 SQL Server 中的 LOB 列的值。

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

BINARY

BYTES

VARBINARY

BYTES

VARBINARY (max)

BLOB

IMAGE

对于 SQL Server 表,Amazon DMS 将为 UPDATE 语句更新目标中的 LOB 列,但不更改 SQL Server 中的 LOB 列的值。

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

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

TIMESTAMP

BYTES

UNIQUEIDENTIFIER

STRING

HIERARCHYID

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

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

XML

NCLOB

对于 SQL Server 表,Amazon DMS 将为 UPDATE 语句更新目标中的 LOB 列,但不更改 SQL Server 中的 LOB 列的值。

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

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

GEOMETRY

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

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

GEOGRAPHY

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

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

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

  • CURSOR

  • SQL_VARIANT

  • TABLE

注意

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