数据传输服务DTS(Data Transmission Service),可以将自建SQL Server迁移至RDS SQL Server

前提条件

  • 自建SQL Server数据库支持的版本,请参见迁移方案概览
  • 已创建目标RDS SQL Server实例,具体请参见创建RDS SQL Server实例
  • RDS SQL Server实例的存储空间须大于自建SQL Server数据库占用的存储空间。

注意事项

类型 说明
源库限制
  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。
  • 待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。
  • 如迁移对象为表级别,且需进行编辑(如表列名映射),则单次迁移任务仅支持迁移至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待迁移的表,分批配置多个任务,或者配置整库的迁移任务。
  • 单次迁移任务仅支持迁移至多10个数据库。当超出数量限制,会出现稳定性和性能问题的风险,此时建议您拆分待迁移的表,分批配置任务。
  • 如需进行增量迁移,数据日志:
    • 需开启,备份模式设置为Full,且已成功执行过全量逻辑备份。
    • 如为增量迁移任务,DTS要求源数据库的数据日志保存24小时以上,如为全量迁移和增量迁移任务,DTS要求源数据库的数据日志至少保留7天以上(您可在全量迁移完成后将数据日志保存时间设置为24小时以上),否则DTS可能因无法获取数据日志而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的数据日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。

  • 源库的操作限制:
    • 在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务会失败。
    • 如仅执行全量数据迁移,请勿向源实例中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。
其他限制
  • 不支持迁移CURSOR、ROWVERSION、SQL_VARIANT、HIERACHYID和GEOMETRY。
  • 如在配置任务对象及高级配置时选择SQLServer增量同步模式解析源库日志做增量同步,则待迁移的表需具备聚集索引,且聚集索引中需包含主键列。
  • 如需跨版本迁移,请提前确认兼容性。
  • 为保证增量数据迁移延迟显示的准确性,DTS会在自建SQL Server数据库中新增一张心跳表,表名格式为待迁移表名_dts_mysql_heartbeat
  • 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库的负载上升。
  • 由于全量数据迁移会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标数据库的表存储空间会比源实例的表存储空间大。
  • 请确认DTS对数据类型为FLOAT或DOUBLE的列的迁移精度是否符合业务预期。DTS会通过ROUND(COLUMN,PRECISION)来读取这两类列的值。如果没有明确定义其精度,DTS对FLOAT的迁移精度为38位,对DOUBLE的迁移精度为308位。
  • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。
特殊情况 当目标实例为RDS SQL Server时

DTS会自动在RDS SQL Server中创建数据库,如果待迁移的数据库名称不符合RDS SQL Server的定义规范,您需要在配置迁移任务之前在RDS SQL Server中创建数据库。相关操作,请参见创建数据库

费用说明

迁移类型 链路配置费用 公网流量费用
结构迁移和全量数据迁移 不收费。 通过公网将数据迁移出阿里云时将收费,详情请参见产品定价
增量数据迁移 收费,详情请参见产品定价

迁移类型说明

  • 库表结构迁移

    DTS将源库中迁移对象的结构定义迁移到目标库。

    • 支持结构迁移的对象:表、视图、表触发器、同义词、SQL 存储过程、SQL 函数、plan guide、自定义类型、rule、default、sequence。
    • 不支持结构迁移的对象:assemblies、service broker、全文索引、全文目录、分布式schema、分布式函数、CLR存储过程、CLR标量函数、CLR表值函数、内部表、系统、聚合函数。
  • 全量迁移

    DTS将源库中迁移对象的存量数据,全部迁移到目标库中。

  • 增量迁移

    DTS在全量迁移的基础上,将源库的增量更新数据迁移到目标库中。通过增量数据迁移可以实现在自建应用不停服的情况下,平滑地完成数据迁移。

支持增量迁移的SQL操作

操作类型 SQL操作语句
DML INSERT、UPDATE、DELETE
说明 不支持增量迁移仅更新大字段的UPDATE语句。
DDL
  • CREATE TABLE
    说明 不支持分区、表定义内部包含函数。
  • ALTER TABLE

    仅包含ADD COLUMN、DROP COLUMN 

  • DROP TABLE
  • CREATE INDEX、DROP INDEX

数据库账号的权限要求

数据库 结构迁移 全量迁移 增量迁移
自建SQL Server数据库 SELECT权限 SELECT权限 sysadmin
RDS SQL Server实例 读写权限

数据库账号创建及授权方法:

数据迁移流程

为解决对象间的依赖,提高迁移成功率,DTS对SQL Server结构和数据的迁移流程如下:
  1. 执行表、视图、同义词、自定义类型、rule、default和plan guide的结构迁移。
  2. 执行全量数据迁移。
  3. 执行SQL存储过程、SQL函数、触发器和外键的结构迁移。
  4. 执行增量数据迁移。

准备工作

说明 如需进行增量迁移,在正式配置数据迁移任务之前,需要在自建SQL Server数据库上进行日志配置并创建聚集索引。
警告 如果有多个数据库需要迁移,您需要重复执行准备工作中的步骤1到步骤4。
  1. 在自建SQL Server数据库中执行如下命令,将待迁移的数据库恢复模式修改为完整模式。
    use master;
    GO
    ALTER DATABASE <database_name> SET RECOVERY FULL WITH ROLLBACK IMMEDIATE;
    GO
    参数说明:

    <database_name>:待迁移的数据库名。

    示例:
    use master;
    GO
    ALTER DATABASE mytestdata SET RECOVERY FULL WITH ROLLBACK IMMEDIATE;
    GO
  2. 执行如下命令,将待迁移的数据库进行逻辑备份。如您已进行过逻辑备份,可跳过本步骤。
    BACKUP DATABASE <database_name> TO DISK='<physical_backup_device_name>';
    GO
    参数说明:
    • <database_name>:待迁移的数据库名。
    • <physical_backup_device_name>:指定备份文件存储的路径和文件名。
    示例:
    BACKUP DATABASE mytestdata TO DISK='D:\backup\dbdata.bak';
    GO
  3. 执行如下命令,将待迁移的数据库日志进行备份。
    BACKUP LOG <database_name> to DISK='<physical_backup_device_name>' WITH init;
    GO
    参数说明:
    • <database_name>:待迁移的数据库名。
    • <physical_backup_device_name>:指定备份文件存储的路径和文件名。
    示例:
    BACKUP LOG mytestdata TO DISK='D:\backup\dblog.bak' WITH init;
    GO
  4. 为待迁移的表创建聚集索引,详情请参见创建聚集索引

操作步骤

  1. 登录新版DTS迁移任务的列表页面
    说明 您也可以登录DMS数据管理服务。在顶部菜单栏中,选择传输与加工(DTS) > 数据迁移
  2. 在页面左上角,选择迁移实例所属地域。
    地域
  3. 单击创建任务,配置源库及目标库信息。
    警告 选择源和目标实例后,建议您仔细阅读页面上方显示的使用限制,以成功创建并执行迁移任务。
    源目库信息
    类别 配置 说明
    任务名称

    DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。

    源库信息 数据库类型 选择SQL Server
    接入方式 选择有公网IP的自建数据库
    说明 当选择为自建数据库时,您还需要执行相应的准备工作,详情请参见准备工作概览
    实例地区 选择自建SQL Server数据库所属地域。
    主机名或IP地址 填入源自建SQL Server数据库的访问地址,本案例中填入公网地址。
    端口 填入自建SQL Server数据库的服务端口,默认为1433
    数据库账号 填入自建SQL Server的数据库账号,权限要求请参见数据库账号的权限要求
    数据库密码

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

    目标库信息 数据库类型 选择SQL Server
    接入方式 选择阿里云实例
    实例地区 选择目标RDS SQL Server实例所属地域。
    实例ID 选择目标RDS SQL Server实例ID。
    数据库账号 填入目标RDS SQL Server实例的数据库账号,权限要求请参见数据库账号的权限要求
    数据库密码

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

  4. 如果您的自建数据库具备白名单安全设置,您需要复制弹跳框中的DTS服务器IP地址,并加入自建数据库的白名单安全设置中。然后单击测试连接以进行下一步
  5. 配置任务对象及高级配置。
    • 基础配置基础配置
      配置 说明
      任务步骤
      • 如果只需要进行全量迁移,请同时勾选库表结构迁移全量迁移
      • 如果需要进行不停机迁移,请同时勾选库表结构迁移全量迁移增量迁移
      说明 如果未选择增量迁移,为保障数据一致性,数据迁移期间请勿在源实例中写入新的数据。
      目标已存在表的处理模式
      • 预检查并报错拦截:检查目标数据库中是否有同名的表。如果目标数据库中没有同名的表,则通过该检查项目;如果目标数据库中有同名的表,则在预检查阶段提示错误,数据迁移任务不会被启动。

        说明 如果目标库中同名的表不方便删除或重命名,您可以更改该表在目标库中的名称,请参见库表列名映射
      • 忽略报错并继续执行:跳过目标数据库中是否有同名表的检查项。
        警告 选择为忽略报错并继续执行,可能导致数据不一致,给业务带来风险,例如:
        • 表结构一致的情况下,在目标库遇到与源库主键的值相同的记录,则会保留目标库中的该条记录,即源库中的该条记录不会迁移至目标库中。
        • 表结构不一致的情况下,可能导致只能迁移部分列的数据或迁移失败。
      SQLServer增量同步模式
      • 解析源库日志做增量同步
        • 优点:
          • 延迟低、性能好;
          • 对源库无侵入。
        • 缺点:
          • 不支持堆表、无主键表;
          • 源库写入较大且频繁做日志截断、归档有可能会导致DTS任务中断。
      • 基于CDC做增量同步
        • 优点:
          • 支持堆表、无主键表;
          • 源库日志截断也不会导致DTS任务中断。
        • 缺点:
          • DTS会在源库创建库、表的CDC;
          • 延迟相比日志解析的模式相对较高。
      迁移对象

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

      说明 迁移对象选择的粒度为库、表、列。若选择的迁移对象为表或列,其他对象(如视图、触发器、存储过程)不会被迁移至目标库。
      映射名称更改
      • 如需更改单个同步对象在目标实例中的名称,请右击已选择对象中的同步对象,设置方式,请参见库表列名单个映射
      • 如需批量更改同步对象在目标实例中的名称,请单击已选择对象方框右上方的批量编辑设置方式,请参见库表列名批量映射
      说明 如果使用了对象名映射功能,可能会导致依赖这个对象的其他对象迁移失败。
      过滤待迁移数据

      支持设置条件过滤数据,详情请参见通过SQL条件过滤任务数据

      增量迁移的SQL操作 选择增量迁移DDL和DML操作,请右击已选择对象中的迁移对象,在弹跳框中选择所需增量迁移的DDL和DML操作。支持的操作,请参见支持增量迁移的SQL操作
    • 高级配置高级配置(无dmsddl)
      配置 说明
      设置告警
      是否设置告警,当迁移失败或延迟超过阈值后,将通知告警联系人。
      • 不设置:不设置告警。
      • 设置:设置告警,您还需要设置告警阈值和告警联系人。
      源、目标库无法连接重试时间
      默认重试120分钟,您也可以在取值范围(10~1440分钟)内自定义重试时间,建议设置30分钟以上。如果DTS在设置的时间内重新连接上源、目标库,迁移任务将自动恢复。否则,迁移任务将失败。
      说明
      • 针对同源或者同目标的多个DTS实例,如DTS实例A和DTS实例B,设置网络重试时间时A设置30分钟,B设置60分钟,则重试时间以低的30分钟为准。
      • 由于连接重试期间,DTS将收取任务运行费用,建议您根据业务需要自定义重试时间,或者在源和目标库实例释放后尽快释放DTS实例。
  6. 上述配置完成后,单击页面右下角的下一步保存任务并预检查
    说明
    • 在迁移任务正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动迁移任务。
    • 如果预检查失败,单击具体检查项后的提示,查看失败详情。
      • 您可以根据提示修复后重新进行预检查。
      • 如无需修复告警检测项,您也可以选择确认屏蔽忽略告警项并重新进行预检查,跳过告警检测项重新进行预检查。
  7. 预检查通过率显示为100%时,单击下一步购买
  8. 购买页面,选择数据迁移实例的链路规格,详细说明请参见下表。
    类别 参数 说明
    信息配置 链路规格

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

  9. 配置完成后,阅读并勾选《数据传输(按量付费)服务条款》
  10. 单击购买并启动,迁移任务正式开始,您可在任务列表查看具体进度。