RDS SQL Server实例间数据迁移

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍如何通过DTS控制台实现RDS SQL Server实例间的数据迁移。支持灵活配置库表结构迁移、全量数据迁移和增量数据迁移,同时配置这三种迁移类型可在应用不停服的情况下,平滑完成数据库迁移。

前提条件

注意事项

迁移前请务必关注如下核心注意事项,忽略可能导致任务失败或报错:

  • 库数量限制:单次迁移库数量不能超过10个,否则会导致稳定性和性能风险。

  • 表数量限制:包含增量迁移时,源库待同步表的数量不能超过1000张,否则可能导致任务延迟或不稳定。

  • 源库操作限制:在库表结构迁移和全量迁移阶段,请勿执行DDL操作(如修改库或表结构),否则会导致任务失败。

  • 表结构要求:待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能导致目标库出现重复数据。

  • 外键和触发器:若迁移任务包含增量数据迁移,需禁用目标库中已启用的触发器和外键,否则可能造成任务失败或数据丢失。

  • 数据库名称规范:如果待迁移的数据库名称不符合RDS SQL Server的定义规范,需提前在RDS SQL Server中手动创建数据库,否则任务可能无法正常运行。

  • 数据日志保存时间:增量迁移任务要求源库的数据日志保存24小时以上;全量+增量迁移任务要求数据日志至少保留7天以上,否则可能导致任务失败或数据不一致。

点击展开查询全部使用限制及注意事项

使用限制

  • 数据类型限制

    不支持迁移以下数据类型:CURSORROWVERSIONSQL_VARIANTHIERARCHYIDPOLYGONGEOMETRY 和 GEOGRAPHY

  • 增量迁移限制

    若迁移任务包含增量数据迁移,则不支持重建索引操作,否则可能导致任务失败或数据丢失。

    说明

    源库版本为RDS SQL Server 2008、2008 R2时,不支持增量数据迁移。

  • 表结构限制

    • 若增量同步模式选择为解析源库日志做增量同步(不支持堆表),则待迁移的表需具备聚集索引,且聚集索引中需包含主键列;不支持堆表、无主键表、压缩表、含计算列表。

    • 若增量同步模式选择为混合式日志解析,则无上述限制,但需确保源库CDC作业正常运行。

  • CDC相关限制

    • 不支持对聚集列存储索引表开启CDC。

    • 不支持对源库CDC实例(CDC Instance)进行变更操作,否则可能导致任务失败或数据丢失。

  • DDL操作限制

    • 不支持连续执行加减列操作(一分钟内执行超过两次加列或减列的DDL),否则可能导致任务失败。

    • 已开启CDC的表不支持进行主键相关的变更。

  • 增量数据采集限制

    DTS通过轮询方式查询每张表的CDC实例(CDC Instance)以获取增量数据,因此源库待迁移表的数量不建议超过1000,否则可能导致任务延迟或不稳定。

  • 目标库限制

    若目标实例为RDS SQL Server,DTS会自动创建数据库。如果待迁移的数据库名称不符合RDS SQL Server的定义规范,需在配置迁移任务前手动创建数据库。

  • 特殊场景限制

    • 若源库单表的日均增量变更SQL超过一千万条,需调整CDC数据保存时间为1440分钟(1天)。

    • 若开启CDC的表需要写入的单字段数据超过64KB,则需提前执行以下命令调整源库配置:

      EXEC sp_configure 'max text repl size', -1;
  • 任务恢复与覆盖风险

    DTS会在7天内尝试恢复失败的任务。为避免任务自动恢复后源端数据覆盖目标实例数据,在业务切换至目标实例前,务必结束或释放任务,或将DTS访问目标实例账号的写权限回收。

注意事项

  • 带宽与性能要求

    • 源库所属服务器需具备足够出口带宽,否则将影响数据迁移速率。

    • 建议在业务低峰期执行迁移任务,以避免因资源占用导致数据库负载上升。

  • 表结构与数据一致性

    • 待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能导致目标数据库中出现重复数据。

    • 在库表结构迁移和全量迁移阶段,请勿执行DDL操作(如修改表结构),否则会导致任务失败。

    • 若仅执行全量数据迁移,请勿向源实例写入新数据,否则可能导致源和目标数据不一致。建议选择结构迁移、全量数据迁移和增量数据迁移以保持数据一致性。

  • 日志备份与保存时间

    • 增量迁移任务要求源数据库的数据日志必须开启,备份模式设置为Full,并已成功执行过全量物理备份

    • 若为增量迁移任务,数据日志需保存24小时以上;若为全量+增量迁移任务,数据日志需至少保留7天以上(全量迁移完成后可调整为24小时以上)。否则,DTS可能因无法获取日志导致任务失败,甚至引发数据不一致或丢失。

  • CDC配置与运行要求

    • 若源库待迁移的表需要开启CDC,则需满足以下条件:

      • sys.sysservers视图的srvname字段与SERVERPROPERTY函数返回值保持一致。

      • 源库为RDS SQL Server时,数据库所有者需是sqlsa

    • 开启CDC的表数量不建议超过1000,否则可能导致任务延迟或不稳定。

    • CDC组件存储的增量数据默认保留3天,建议根据业务需求调整保存时间。若单表日均增量变更SQL超过一千万条,建议将保存时间设置为1440分钟(1天)。

  • 操作限制

    • 禁止在任务运行期间删除或修改DTS创建的系统账号(如rdsdt_dtsacct),否则可能导致任务失败。

    • 若源库为RDS SQL Server且包含增量迁移任务,为保障迁移实例稳定运行,请关闭透明数据加密(TDE)功能

    • 避免连续执行加减列操作(时间间隔小于10分钟),否则可能导致任务失败。

    • 若迁移任务包含增量数据迁移,请禁用目标库中已启用的触发器和外键。

  • 任务规模与稳定性

    • 单次迁移任务仅支持迁移至多10个数据库。当超出数量限制时,可能会出现稳定性和性能问题的风险,建议拆分待迁移的表并分批配置任务。

    • 如果迁移对象为表级别且需进行编辑(如表列名映射),则单次迁移任务仅支持迁移至多1000张表。超出数量限制时,任务提交后会报错,建议拆分任务或配置整库迁移。

    • 若源实例存在如下任一情况,建议拆分为多个迁移任务:

      • 数据库超过10个。

      • 单个数据库执行日志备份操作的频率超过1次/小时。

      • 单个数据库执行DDL操作的频率超过100条/小时。

      • 单个数据库的日志量超过20MB/s。

  • 其他注意事项

    • 若需跨版本迁移,请提前确认兼容性。更多详情,请参见RDS SQL Server各版本的功能差异

    • 源库为RDS SQL Server时,DTS会在源库中创建触发器(如dts_cdc_sync_ddl)、心跳表(如dts_sync_progress)和DDL存储表(如dts_cdc_ddl_history),以保障增量数据迁移的准确性。

    • 建议在全量数据迁移任务运行期间启用源库的事务处理模式参数READ_COMMITTED_SNAPSHOT,以避免共享锁对数据写入的影响。

    • 全量数据迁移会并发执行INSERT操作,可能导致目标数据库表产生碎片,迁移完成后目标表存储空间可能比源表更大。

    • DTS会在7天内尝试恢复失败的任务。为避免任务自动恢复后源端数据覆盖目标实例数据,在业务切换至目标实例前,务必结束或释放任务,或将DTS访问目标实例账号的写权限回收。

费用说明

迁移类型

链路配置费用

公网流量费用

结构迁移和全量数据迁移

不收费。

当目标库的接入方式公网IP时收取公网流量费用,详情请参见计费概述

增量数据迁移

收费,详情请参见计费概述

数据库账号的权限要求

为顺利完成数据迁移任务,请确保源库和目标库的数据库账号具备以下权限:

说明

您可以通过RDS控制台创建账号,并按需修改账号权限

数据库

结构迁移

全量迁移

增量迁移

源实例

读权限

读权限

待迁移对象的所有者权限。

目标实例

读写权限

操作步骤

  1. 访问数据传输服务DTS控制台

  2. 在左侧导航栏单击数据迁移,在上方选择地域。

  3. 单击创建任务,配置源库和目标库信息。

    类别

    配置

    说明

    任务名称

    请配置具有业务意义的名称(无唯一性要求),便于后续识别;也可保持系统自动生成的任务名称。

    源库信息

    选择已有连接信息

    若您已将源库信息录入DTS数据连接管理页面,可在此直接选择已录入的数据库,后续可免去手动输出源库信息。

    数据库类型

    选择SQL Server

    接入方式

    选择为云实例

    实例地区

    选择源RDS SQL Server实例所属地域。

    是否跨阿里云账号

    本示例为同一阿里云账号间迁移,选择不跨账号

    RDS实例ID

    选择源RDS SQL Server实例ID。

    数据库账号

    填入源RDS SQL Server实例的数据库账号,并确保账号具备所需权限

    数据库密码

    填入该数据库账号对应的密码。

    连接方式

    • 若源库未开启SSL加密,请选择非加密连接

    • 若源库已开启SSL加密,请选择SSL安全连接,DTS默认信任服务端证书。

    目标库信息

    选择已有连接信息

    若您已将目标库信息录入DTS数据连接管理页面,可在此直接选择已录入的数据库,后续可免去手动输出目标库信息。

    数据库类型

    选择SQL Server

    接入方式

    选择云实例

    实例地区

    选择目标RDS SQL Server实例所属地域。

    实例ID

    选择目标RDS SQL Server实例ID。

    数据库账号

    填入目标RDS SQL Server实例的数据库账号,并确保账号具备所需权限

    数据库密码

    填入该数据库账号对应的密码。

    连接方式

    • 若目标库未开启SSL加密,请选择非加密连接

    • 若目标库已开启SSL加密,请选择SSL安全连接,DTS默认信任服务端证书。

  4. 配置完成后,在页面下方单击测试连接以进行下一步

    说明

    请确保DTS服务的IP地址段能够被自动或手动添加至源库和目标库的安全设置中,以允许DTS服务器的访问。

  5. 配置任务对象。

    1. 对象配置页面,配置待迁移的对象。

      配置

      说明

      迁移类型

      • 若需进行全量迁移:建议选中库表结构迁移全量迁移

      • 若需进行不停机迁移:建议选中库表结构迁移全量迁移增量迁移

      说明
      • 更多详情,请参见附录:支持增量迁移的SQL操作

      • 若未选中库表结构迁移,请确保目标库中存在接收数据的数据库和表,并根据实际情况,在已选择对象框中使用库表列名映射功能。

      • 若未选中增量迁移,为保障数据一致性,数据迁移期间请勿在源实例中写入新的数据。

      源库触发器迁移方式

      请根据实际情况选择迁移触发器的方式,若您待迁移的对象不涉及触发器,则无需配置。

      说明

      仅当迁移类型同时勾选库表结构迁移增量迁移时才可以配置。

      SQLServer增量同步模式

      • 非堆表用日志解析增量同步,堆表用CDC增量同步(混合式日志解析)

        • 优点:

          • 支持源库堆表、无主键表、压缩表、含计算列表等场景。

          • 链路稳定性较高。能拿到完整的DDL语句,DDL场景支持丰富。

        • 缺点:

          • DTS会在源库中创建触发器dts_cdc_sync_ddl、心跳表dts_sync_progress、DDL存储表dts_cdc_ddl_history以及会开启库级别CDC和部分表CDC。

          • 不支持在源库对开启CDC的表执行SELECT INTO、TRUNCATERENAME COLUMN语句,DTS在源库中创建的触发器不允许手动删除。

      • 解析源库日志做增量同步(不支持堆表)

        • 优点:对源库无侵入。

        • 缺点:不支持源库堆表、无主键表、压缩表、含计算列表等场景。

      • 轮询查询CDC实例做增量同步

        • 优点:

          • 源库为Amazon RDS for SQL Server、Azure SQL Database、Azure SQL Managed Instance、Azure SQL Server on Virtual Machine、Google Cloud SQL for SQL Server等时支持全量和增量迁移。

          • 使用SQL Server原生CDC组件获取增量数据,增量迁移更加稳定,占用的网络带宽更少。

        • 缺点:

          • DTS实例使用的源库账号需具备开启CDC的权限,且增量数据迁移约有10秒的延迟。

          • 在迁移多库多表的场景,可能会有稳定性和性能问题的风险。

      说明
      • 仅当迁移类型的选择结果包含增量迁移时,才有此配置项。

      • 若源库为Web版的RDS SQL Server,则在配置任务时SQLServer增量同步模式需选择为解析源库日志做增量同步(不支持堆表)

      • 在混合式日志解析模式下(即SQLServer增量同步模式非堆表用日志解析增量同步,堆表用CDC增量同步的实例),支持的源库有:

        • EnterpriseEnterprise Evaluation版:2012、2014、2016、20192022版本。

        • Standard版:2016、20192022版本。

      DTS支持开启CDC的表最大数量限制

      请合理设置当前迁移实例允许开启CDC的表数量,默认为1000。

      说明

      SQLServer增量同步模式选择解析源库日志做增量同步(不支持堆表)时,不会有此配置项。

      目标已存在表的处理模式

      • 预检查并报错拦截:检查目标数据库中是否存在与源库同名的表。若不存在同名表,则通过检查任务正常启动;否则将在预检查阶段报错,数据迁移任务不会启动。

        解决方案:如果目标库中的同名表不方便删除或重命名,您可通过配置库表列名映射更改该表在目标库中的名称。

      • 忽略报错并继续执行:跳过目标数据库中是否有同名表的检查项。

        警告

        选择忽略报错并继续执行可能导致数据不一致,给业务带来风险,例如:

        • 表结构一致的情况下,若目标库已存在与源库主键值相同的记录:

          • 全量迁移阶段,DTS保留目标库中的现有记录,而不会将源库中的对应记录迁移到目标库中。

          • 增量迁移阶段,目标库中的数据可能会被源库的新数据覆盖,导致目标库中的历史数据丢失。

        • 表结构不一致的情况下,可能导致只能迁移部分列的数据或迁移失败,请谨慎操作。

      源库对象

      源库对象框中单击待迁移的对象,然后单击向右小箭头将其移动到已选择对象框。

      说明

      迁移对象选择的粒度为Schema、表、列。若选择的迁移对象为表或列,其他对象(如视图、触发器、存储过程)不会被迁移至目标库。

      已选择对象

      • 如需更改单个迁移对象在目标实例中的名称,请右击已选择对象中的迁移对象,设置方式,请参见库表列名单个映射

      • 如需批量更改迁移对象在目标实例中的名称,请单击已选择对象方框右上方的批量编辑,设置方式,请参见库表列名批量映射

      说明
      • 如果使用了对象名映射功能,可能会导致依赖这个对象的其他对象迁移失败。

      • 如需设置WHERE条件过滤数据,请在已选择对象中右击待迁移的表,在弹出的对话框中设置过滤条件

      • 如需按库或表级别选择迁移的SQL操作,请在已选择对象中右击待迁移对象,并在弹出的对话框中选择所需迁移的SQL操作

    2. 单击下一步高级配置,进行高级参数配置。

      配置

      说明

      选择调度该任务的专属集群

      DTS默认将任务调度到共享集群上,您无需选择。若您希望任务更加稳定,可以购买专属集群来运行DTS迁移任务。

      源库、目标库无法连接后的重试时间

      在迁移任务启动后,若源库或目标库连接失败则DTS会报错,并会立即进行持续的重试连接,默认重试720分钟,您也可以在取值范围(10~1440分钟)内自定义重试时间,建议设置30分钟以上。如果DTS在设置的时间内重新连接上源、目标库,迁移任务将自动恢复。否则,迁移任务将失败。

      说明
      • 针对同源或者同目标的多个DTS实例,网络重试时间以后创建任务的设置为准。

      • 由于连接重试期间,DTS将收取任务运行费用,建议您根据业务需要自定义重试时间,或者在源和目标库实例释放后尽快释放DTS实例。

      源库、目标库出现其他问题后的重试时间

      在迁移任务启动后,若源库或目标库出现非连接性的其他问题(如DDLDML执行异常),则DTS会报错并会立即进行持续的重试操作,默认持续重试时间为10分钟,您也可以在取值范围(1~1440分钟)内自定义重试时间,建议设置10分钟以上。如果DTS在设置的重试时间内相关操作执行成功,迁移任务将自动恢复。否则,迁移任务将会失败。

      重要

      源库、目标库出现其他问题后的重试时间的值需要小于源库、目标库无法连接后的重试时间的值。

      是否限制全量迁移速率

      在全量迁移阶段,DTS将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升。您可以根据实际情况,选择是否对全量迁移任务进行限速设置(设置每秒查询源库的速率QPS每秒全量迁移的行数RPS每秒全量迁移的数据量(MB)BPS),以缓解目标库的压力。

      说明

      是否限制增量迁移速率

      您也可以根据实际情况,选择是否对增量迁移任务进行限速设置(设置每秒增量迁移的行数RPS每秒增量迁移的数据量(MB)BPS),以缓解目标库的压力。

      说明

      环境标签

      您可以根据实际情况,选择用于标识实例的环境标签。本示例无需选择。

      配置ETL功能

      根据业务需求选择是否配置ETL功能,对数据进行加工处理。

      • :配置ETL功能,您还需要在文本框中输入数据处理语句

      • :不配置ETL功能。

      监控告警

      根据业务需求选择是否设置告警并接收告警通知。

      • 不设置:不设置告警。

      • 设置:设置告警。您还需要设置告警阈值告警联系人,当迁移失败或延迟超过阈值后,系统将进行告警通知。

    3. 单击下一步数据校验,进行数据校验任务配置。

      若您需要使用数据校验功能,配置方法请参见配置数据校验

  6. 保存任务并进行预检查。

    • 若您需要查看调用API接口配置该实例时的参数信息,请将鼠标光标移动至下一步保存任务并预检查按钮上,然后单击气泡中的预览OpenAPI参数

    • 若您无需查看或已完成查看API参数,请单击页面下方的下一步保存任务并预检查

    说明
    • 在迁移任务正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动迁移任务。

    • 如果预检查失败,请单击失败检查项后的查看详情,并根据提示修复后重新进行预检查。

    • 如果预检查产生警告:

      • 对于不可以忽略的检查项,请单击失败检查项后的查看详情,并根据提示修复后重新进行预检查。

      • 对于可以忽略无需修复的检查项,您可以依次单击点击确认告警详情确认屏蔽确定重新进行预检查,跳过告警检查项重新进行预检查。如果选择屏蔽告警检查项,可能会导致数据不一致等问题,给业务带来风险。

  7. 购买实例。

    1. 预检查通过率显示为100%时,单击下一步购买

    2. 购买页面,选择数据迁移实例的链路规格,详细说明请参见下表。

      类别

      参数

      说明

      信息配置

      资源组配置

      选择实例所属的资源组,默认为default resource group。更多信息,请参见什么是资源管理

      链路规格

      DTS为您提供了不同性能的迁移规格,迁移链路规格的不同会影响迁移速率,您可以根据业务场景进行选择。更多信息,请参见数据迁移链路规格说明

    3. 配置完成后,阅读并选中《数据传输(按量付费)服务条款》

    4. 单击购买并启动,并在弹出的确认对话框,单击确定

      您可以在迁移任务列表页面,查看迁移实例的具体进度。

      说明
      • 若迁移实例不包含增量迁移任务,则迁移实例会自动结束。迁移实例自动结束后,运行状态已完成

      • 若迁移实例包含增量迁移任务,则迁移实例不会自动结束,增量迁移任务会持续进行。在增量迁移任务正常运行期间,迁移实例的运行状态运行中

附录:支持增量迁移的SQL操作

DML操作

INSERT、UPDATE、DELETE

说明

不支持迁移仅更新大字段的UPDATE语句。

DDL操作

  • ALTER TABLE,仅包含ADD COLUMN、DROP COLUMN、RENAME COLUMN

  • CREATE TABLE、CREATE INDEX

    说明

    CREATE TABLE不支持分区、表定义内部包含函数。

  • DROP TABLE

  • RENAME TABLE

  • TRUNCATE TABLE

说明
  • 不支持迁移事务性的DDL操作。例如,单条SQL语句中添加多个列的DDL操作或者单条SQL语句中同时包含DDLDML的操作,都可能导致数据丢失。

  • 不支持迁移包含自定义类型的DDL操作。

  • 不支持迁移Online DDL操作。

  • 不支持迁移将保留关键字用作属性名的DDL操作。

  • 不支持迁移系统存储过程执行的DDL操作

  • 不支持迁移TRUNCATE TABLE操作。