全部产品
数据传输服务DTS

SQL Server不停机迁移

更新时间:2017-06-07 13:26:11   分享:   

适用场景

DTS数据传输支持SQLServer增量数据迁移,通过增量数据迁移可以实现本地SQLServer业务不停服的情况下,完成SQLServer到RDS For SQLServer数据库的迁移。

本小节简单介绍使用DTS进行SQLServer到RDS For SQLServer不停机迁移的任务配置流程。

迁移类型

对于SQLserver到RDS For SQLserver数据迁移,DTS支持结构迁移、全量数据迁移及增量数据迁移,这个迁移类型的功能及限制如下:

  • 结构迁移

    DTS将迁移对象的结构定义迁移到目标实例。目前DTS支持结构迁移的对象有:表、视图、表触发器、同义词、SQL存储过程、SQL函数、plan guid、自定义类型、rule、default。其他对象暂不支持。

  • 全量数据迁移

    全量迁移将SQLServer实例的存量数据全部迁移到目标RDS实例。

  • 增量数据迁移

    将迁移过程中产生的增量数据迁移到目标库,通过增量数据迁移可以保证源数据库迁移过程产生的增量数据可以被同步到目标数据库,最终保证两个数据库的数据一致。

不停服迁移原理

不停服迁移原理

为保证迁移过程中,源数据库业务写入的所有变更数据能够被迁移到目标库,在全量迁移之前,数据传输后台就会开启增量数据拉取模块,拉取并保存迁移过程中,源数据库的业务写入。当全量数据迁移完成后,会启动增量写入模块,开始回放这些增量数据,从而实现源跟目标实例增量数据实时同步。

当迁移进入增量迁移阶段时,增量数据迁移是一个动态的过程,除非用户手动停止迁移,否则会一直保持两边数据实时同步,所以建议当增量迁移无延迟时,可以进行源数据库和目标数据库的数据校验,并在目标数据库进行业务测试,当这些验证都通过后,可以停止迁移任务,然后将业务切换到目标数据库上。通过这种迁移方式,可实现在数据迁移过程中,应用停服时间降低到分钟级别。

迁移限制

  • 如果使用了对象名映射功能后,依赖这个对象的其他对象可能迁移失败。
  • 增量迁移,不支持DDL同步。
  • 增量迁移,只支持含有聚簇索引,且聚簇索引为唯一键的表。
  • 增量迁移,不支持 只更新大字段的update语句的同步。
  • 增量迁移,不支持含有计算列的表。
  • 一个增量迁移任务,只支持一个数据库的迁移。 如果同时有多个数据库需要进行增量数据迁移,那么需要创建多个迁移任务。

迁移权限要求

当使用数据传输进行SQLServer迁移时,在不同迁移类型情况下,源跟目标数据库的迁移账号权限要求如下:

迁移类型 结构迁移 全量数据迁移 增量数据迁移
本地SQLServer实例 select select sysadmin
目的RDS实例 读写权限 读写权限 读写权限

环境准备

  1. 源数据库的日志格式必须为full,如果源数据库的日志格式不为full,那么需要通过下面两个步骤设置:

    1. 在源数据库执行:

      1. USE master;
      2. GO
      3. ALTER DATABASE database_name
      4. SET RECOVERY FULL
      5. WITH ROLLBACK IMMEDIATE;
      6. GO

      其中database_name为需要迁移的数据库名。

    2. 为了保证开启完整日志生效,需要在源数据库进行一次日志备份,在源数据库执行:
      1. BACKUP LOG database_name to DISK=backup_place WITH init
      其中database_name为待迁移的数据库名,backup_place为备份文件存储的地址。
  2. 创建RDS实例数据库

    在数据迁移过程中,如果待迁移的数据库在目标RDS实例中不存在,那么DTS自动会创建。但是对于如下两种情况,用户需要在配置迁移任务之前,手动创建数据库。

    • 数据库名称不符合:RDS定义规范(由小写字母、数字、下划线、中划线组成,字母开头,字母或数字结尾、最长64个字符)。
    • 待迁移数据库,在自建数据库跟目标RDS实例中名称不同。

      对于这两种情况,用户需要在配置迁移任务之前,先在RDS控制台完成数据库创建。具体参考RDS数据库创建流程

  3. 迁移账号创建

    迁移任务配置,需要提供本地SQLServer数据库及目标RDS实例的迁移账号。迁移账号所需权限详见上文的 迁移权限要求。

    如果本地SQLServer实例迁移账号尚未创建,那么您可以参考SQLServer User创建,创建满足权限要求的迁移账号。

    如果目标RDS实例迁移账号创建,那么您可以参考 RDS账号创建流程,创建对待迁移数据库有读写权限的迁移账号。

操作步骤

1.登录DTS控制台

以目标RDS实例所属阿里云账号登录DTS数据传输控制台,单击右上角的创建迁移任务,开始任务配置。

2. 设置实例连接信息

在这个步骤中,主要配置迁移任务名称,迁移源实例(本地SQLServer)及目标RDS实例连接信息。其中:

  • 任务名称

DTS为每个任务自动生成一个任务名称,任务名称没有唯一性要求。您可以根据需要修改任务名称,建议为任务配置具有业务意义的名称,便于后续的任务识别。

  • 源实例连接信息

    • 数据库类型:选择 SQLServer
    • 主机名或IP地址:配置本地SQLSerever数据库访问地址,如果本地SQLServer实例有公网访问地址,那么配置实例的公网访问地址。如果本地SQLServer实例没有公网访问地址,但是可以通过专线或VPN网关被VPC ECS访问,那么可以在VPC ECS通过nginx进行本地SQLServer的代理转发,这个配置项就配置nginx所部署ECS的EIP。
    • 端口:SQLServer实例监听端口,或nginx的代理转发端口 。
    • 数据库账号:SQLServer实例访问账号 。
    • 数据库密码:上面SQLServer访问账号对应的密码 。
  • 目标RDS实例连接信息

    • 实例类型:选择 RDS实例
    • RDS实例ID: 配置迁移的目标RDS实例的实例ID。DTS支持经典网络、VPC网络的RDS实例。
    • 数据库账号:RDS实例的连接账号。
    • 数据库密码:上面数据库账号对应的数据库密码。

连接信息配置

3. 迁移对象及迁移类型配置

  • DTS支持迁移类型

    • 结构迁移
    • 全量数据迁移
    • 增量数据迁移

说明:进行不停机迁移,需要选择:结构迁移+全量数据迁移+增量数据迁移。

  • 迁移对象

迁移对象,需要选择您要迁移的对象。迁移对象选择的粒度可以为:库、表、列三个粒度。默认情况下,对象迁移到RDS实例后,对象名跟本地SQLServer实例一致。如果您迁移的对象在源实例跟目标实例上名称不同,那么需要使用DTS提供的对象名映射功能,详细使用方式可以参考库表列映射

4. 预检查

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

如果预检查失败,那么可以点击具体检查项后的按钮,查看具体的失败详情,并根据失败原因修复后,重新进行预检查。

预检查失败

5. 启动迁移任务

当预检查通过后,可以启动迁移任务,任务启动后,可以到任务列表中查看任务具体的迁移状态及进度。

增量数据迁移是个动态同步的过程,所以建议在增量迁移达到无延迟状态时,在目标数据库上进行业务验证,如果验证成功,那么可以停掉迁移任务,然后将业务切换到目标数据库。

6. 数据同步验证

为了验证迁移过程中,源数据库变更是否可以同步到目标库,我们在迁移过程中,往源库插入一条记录,具体如下图。

源库导入

可以查看此时源库表sbtest1中新增了一条记录,此时到目标库中查询这条记录。

目标校验

所以,通过这种方式可以将迁移过程中源库产生的增量数据实时同步到目标库,从而实现数据迁移过程中,应用停机时间降低到分钟级别。

至此,完成本地SQLServer数据库到RDS For SQLServer不停服迁移的任务配置。

本文导读目录
本文导读目录
以上内容是否对您有帮助?