全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
数据传输服务DTS

SQL Server 不停机迁移

更新时间:2017-10-31 09:21:30

适用场景

数据传输 DTS 支持 SQL Server 数据库实例的结构迁移、全量数据迁移和增量数据迁移,通过这些迁移方式的结合可以实现将本地 SQL Server 数据库中的数据,在业务不停服的情况下,从本地 SQL Server 数据库实例迁移到阿里云 RDS for SQL Server 实例,ECS 上自建的 SQL Server 数据库实例,或者其他的本地 SQL Server 数据库实例。

本小节以使用数据传输 DTS(以下简称 DTS)进行本地 SQL Server 数据库实例到阿里云 RDS for SQL Server 实例不停机迁移为例,简单介绍 DTS 进行 SQL Server 不停机迁移的任务配置流程。

迁移类型

对于本地 SQL server 数据库到阿里云 RDS for SQL Server 实例的数据迁移,DTS 支持结构迁移、全量数据迁移及增量数据迁移,各个迁移类型的功能及限制如下:

  • 结构迁移

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

  • 全量数据迁移

    全量迁移将源 SQL Server 数据库实例的存量数据全部迁移到目标 RDS for SQL Server 实例。

  • 增量数据迁移

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

不停服迁移原理

不停服迁移原理

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

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

迁移限制

  • 当前 SQL Server 结构迁移和全量数据迁移支持 SQL Server 2005,2008,2008 R2,2012,2014 和 2016 版本,增量数据迁移支持 SQL Server 2008,2008 R2,2012 和 2014 版本。
  • 如果某对象使用了对象名映射功能,则可能导致依赖该对象的其他对象迁移失败。
  • 结构迁移不支持 assemblies、库级存储过程、service broker、全文索引、全文目录、分布式 schema、分布式函数、CLR 标量函数、CLR 标值函数、内部表、聚合函数、系统的迁移。
  • 如果使用结构迁移 + 全量数据迁移 + 增量数据迁移,在结构迁移开始后,增量数据迁移开始前,请不要对迁移涉及的对象进行 DDL 操作,否则可能导致迁移失败。
  • 增量迁移,有限支持 DDL 语句同步,具体支持的 DDL 语句请参考 增量数据迁移过程中支持同步的 DDL 操作 部分。
  • 增量迁移,只支持含有聚簇索引,且聚簇索引为主键或者唯一键的表。
  • 增量迁移,不支持只更新大字段的 update 语句的同步。
  • 增量迁移,不支持含有计算列的表。
  • 一个增量迁移任务,只支持一个数据库的迁移。 如果同时有多个数据库需要进行增量数据迁移,那么需要创建多个迁移任务。

增量数据迁移过程中支持同步的 DDL 操作

增量迁移过程中支持同步的 DDL 操作及其限制条件(在括号内说明)包括:

  • CREATE TABLE (不支持函数,分区,默认值)
  • ALTER TABLE … ADD COLUMN
  • ALTER TABLE … DROP COLUMN
  • ALTER TABLE … ALTER COLUMN
  • CREATE INDEX (不支持index属性)
  • SP_RENAME table_name
  • SP_RENAME column_name

迁移权限要求

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

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

环境准备

  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 for SQL Server 实例

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

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

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

  3. 迁移账号创建

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

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

    如果目标 RDS for SQL Server 实例迁移账号尚未创建,那么您可以参考 RDS 账号创建流程,创建对目标 RDS for SQL Server 实例有读写权限的迁移账号。

操作步骤

1.登录数据传输 DTS 控制台

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

2. 设置实例连接信息

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

  • 任务名称

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

  • 源实例连接信息

    • 数据库类型:选择 SQL Server
    • 主机名或 IP 地址:配置本地 SQL Server 数据库实例访问地址,如果本地 SQL Server 数据库实例有公网访问地址,那么配置该实例的公网访问地址。如果本地 SQL Server 数据库实例没有公网访问地址,但是可以通过专线接入阿里云,则可以通过 DTS 进行通过专线接入阿里云的本地自建数据库上云迁移任务的配置,您可以参考 通过专线接入阿里云的本地自建数据库的上云迁移 进行配置。如果本地 SQL Server 数据库实例没有公网访问地址,但是可以通过 VPN 网关被 VPC 中的 ECS 访问,那么可以在 VPC 中的 ECS 通过 nginx 进行本地 SQL Server 数据库实例的代理转发,这个配置项就配置为部署 nginx 的 ECS 上的 EIP。
    • 端口:SQL Server 数据库实例监听端口,或 nginx 的代理转发端口。
    • 数据库账号:SQL Server 数据库实例的访问账号。
    • 数据库密码:上面指定的 SQL Server 数据库实例访问账号对应的密码。
  • 目标 RDS 实例连接信息

    • 实例类型:选择 RDS 实例
    • RDS 实例 ID: 配置迁移的目标 RDS for SQL Server 实例的实例 ID。DTS 能够支持经典网络和 VPC 网络中的 RDS 实例。
    • 数据库账号:RDS 实例的连接账号。
    • 数据库密码:上面指定的 RDS 实例账号对应的密码。

连接信息配置

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

  • DTS 支持迁移类型

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

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

  • 迁移对象

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

4. 预检查

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

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

预检查失败

5. 启动迁移任务

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

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

6. 数据同步验证

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

源库导入

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

目标校验

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

至此,完成本地 SQL Server 数据库实例到阿里云 RDS for SQL Server 实例不停服迁移的任务配置。

本文导读目录