SQL Server迁移上云指南

本文为您介绍SQL Server常见的几种迁移上云的方案,您可以根据数据源的位置、各方案使用的工具、各方案的优势与限制等,选择最适合您的上云方案。

准备工作

  • 已创建规格和存储空间大于等于源库的目标RDS SQL Server实例。创建方式,请参见创建RDS SQL Server实例

    说明

    若您需要使用DTS迁移上云,请先确认DTS支持的源库和目标库。更多信息,请参见迁移方案概览

  • 在源和目标库中分别执行SELECT name, compatibility_level FROM sys.databases; 命令,确认目标库是否兼容源库。是否兼容的判断标准,请参见兼容性级别

  • 请确保源库和目标库的安全设置(包括防火墙、白名单、安全组等)未限制迁移工具的访问。

    说明

    若您需要使用DTS迁移上云,请确保DTS可以正常连接数据库。更多信息,请参见添加DTS服务器的IP地址段

上云方案简介

上云方案

实现流程

操作步骤

物理备份上云

使用OSS(手动上云)

  1. 将数据库日志恢复模式(backup_type)修改为FULL。

  2. 将全量数据进行备份,并上传到OSS Bucket(存储空间)。

  3. 定时备份和上传增量日志。

  4. 停止源库的数据写入,最后一个增量日志回放成功后,将业务切换到新数据库。

SQL Server实例级别迁移上云

说明

若源库为2008 R2版本,建议升级后再进行操作。

使用DBS和DTS(一键上云)

  1. 部署物理协议网关。

  2. 使用DTS迁移上云(内部会调用OSS Bucket)。

  3. 停止源库的数据写入,最后一个增量日志回放成功后,将业务切换到新数据库。

自建SQL Server通过物理网关迁移上云

逻辑迁移上云

使用DTS(日志解析模式)

  1. 使用DTS迁移上云。

    说明

    SQLServer增量同步模式选择为解析源库日志做增量同步(不支持堆表)

  2. 停止源库的数据写入,最后一个增量日志回放成功后,将业务切换到新数据库。

自建SQL Server迁移至RDS SQL Server

使用DTS(混合日志解析模式)

  1. 使用DTS迁移上云。

    说明

    SQLServer增量同步模式选择为非堆表用日志解析增量同步,堆表用CDC增量同步(混合式日志解析)

  2. 停止源库的数据写入,最后一个增量日志回放成功后,将业务切换到新数据库。

使用DTS(轮询查询CDC实例模式)

  1. 使用DTS迁移上云。

    说明

    SQLServer增量同步模式选择为轮询查询CDC实例做增量同步

  2. 停止源库的数据写入,最后一个增量日志回放成功后,将业务切换到新数据库。

其他方案上云

使用SSMS工具

  1. 停止源库的数据写入。

  2. 使用SSMS工具导出源库数据。

  3. 使用SSMS工具将导出的数据导入到目标库。

  4. 校验数据一致性后,将业务切换到新数据库。

使用SSMS迁移上云

上云方案对比

上云方案

方案优势

主要限制

物理备份上云

使用OSS(手动上云)

  • 由于使用的是SQL Server自带的备份和恢复功能,所以支持的场景较多。

  • 迁移速度较快。

  • 可以根据源库日志格式,手动修改备份文件的名称。

  • 需要手动备份和上传日志,操作较为繁琐。

  • 每次只能完成一个数据库的迁移上云。

  • 存在分钟级别的停服:需要停止源库的数据写入,且最后一个增量日志回放成功后才能切换业务。

  • 不支持由高版本迁移到低版本。

  • 不支持库表列的映射功能。

使用DBS和DTS(一键上云)

  • 迁移操作在DTS控制台,配置操作简单方便。

  • 单次迁移支持多个数据库。

  • 由于使用的是SQL Server自带的备份和恢复功能,所以支持的场景较多。

  • 迁移速度较快。

  • 要求备份日志格式必须以bak结尾。

  • 存在分钟级别的停服:需要停止源库的数据写入,且最后一个增量日志回放成功后才能切换业务。

  • 需要在源库物理机上安装AliyunDBSAgent。

  • 不支持由高版本迁移到低版本。

  • 不支持库表列的映射功能。

逻辑迁移上云

使用DTS(日志解析模式)

  • 迁移操作在DTS控制台,配置操作简单方便。

  • 支持不同版本数据库间的迁移。

  • 支持库表列映射功能。

  • DTS实例含增量任务时,源库无需停止写入,支持平滑迁移。

  • 支持第三方云数据库迁移到阿里云。

    例如源库为Amazon RDS for SQL Server时支持全量迁移,源库为Azure SQL(非SQL database模式)时支持全量和增量迁移。

  • 仅支持部分DDL,且频繁的DDL操作(大于100条/h)会影响迁移速率。

  • 源库日志量超过10 MB/s、30 GB/h、500 GB/d时,可能会导致任务出现延迟,甚至失败。

  • 源库日志备份频率超过1次/h时,DTS可能获取不到本地备份日志(建议本地磁盘保留备份日志3天)。

  • DTS会在源库创建Trigger、DDL存储表等,用于捕获DDL变更。

  • 增量迁移过程中需关闭外键约束,否则可能会导致任务失败。

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

  • 无主键和无唯一约束的表可能出现重复数据,若需要保留无主键或无唯一约束的表,则不建议使用此方案。

  • DTS使用fn_log函数拉取和解析日志,该函数稳定性不高,若出现预期外的行为,可能会导致任务失败。

  • 单个DTS任务迁移的数据库不能超过10个,否则可能会有稳定性和性能问题的风险。

使用DTS(混合日志解析模式)

  • 迁移操作在DTS控制台,配置操作简单方便。

  • 支持不同版本数据库间的迁移。

  • 支持库表列映射功能。

  • 支持堆表、无主键表、压缩表等属性表。

  • 支持第三方云数据库迁移到阿里云。

    例如源库为Amazon RDS for SQL Server时支持全量迁移,源库为Azure SQL(非SQL database模式)时支持全量和增量迁移。

  • 对源库版本有要求:企业版需要为2008及以上版本,标准版需要为2016SP1及以上版本(不包含2017版本)。

  • 仅支持部分DDL,且频繁的DDL操作(大于100条/h)会影响迁移速率。

  • 源库日志量超过10 MB/s、30 GB/h、500 GB/d时,可能会导致任务出现延迟,甚至失败。

  • 源库日志备份频率超过1次/h时,DTS可能获取不到本地备份日志(建议本地磁盘保留备份日志3天)。

  • DTS会开启库级别CDC和部分表CDC,且会在源库创建Trigger、DDL存储表等,用于捕获DDL变更。

  • 增量迁移过程中需关闭外键约束,否则可能会导致任务失败。

  • 不支持含计算列表的场景。

  • 无主键和无唯一约束的表可能出现重复数据,若需要保留无主键或无唯一约束的表,则不建议使用此方案。

  • DTS使用fn_log函数拉取和解析日志,该函数稳定性不高,若出现预期外的行为,可能会导致任务失败。

  • 单个DTS任务迁移的数据库不能超过10个,否则可能会有稳定性和性能问题的风险。

使用DTS(轮询查询CDC实例模式)

  • 迁移操作在DTS控制台,配置操作简单方便。

  • 支持不同版本数据库间的迁移。

  • 支持库表列映射功能。

  • 支持第三方云数据库迁移到阿里云。

    例如源库为Amazon RDS for SQL Server、Azure SQL Database、Google Cloud SQL for SQL Server时支持全量和增量迁移。

  • 增量迁移更加稳定,占用的网络带宽更低。

    使用SQL Server原生CDC组件获取增量数据,无需捕获源库的事务日志。当源库触发日志截断时,不会影响DTS实例的运行。

  • SQL Server on Azure Virtual Machines企业版需要2008或以上版本,标准版需要2016SP1或以上版本(不包含2017版本)。

  • DTS实例使用的源库账号需具备开启库级别和表级别CDC的权限。开启库级别CDC需要使用sysadmin角色权限的账号,开启表级别CDC需要高权限账号。

    说明
    • Azure SQL Database控制台提供的最高权限账号(服务器管理员)满足要求。其中基于vCore购买模型的数据库,所有规格均支持开启CDC;基于DTU购买模型的数据库,规格需要为S3及以上才支持开启CDC。

    • Amazon RDS for SQL Server的高权限账号满足要求,支持为存储过程开启库级别的CDC。

  • 源库待迁移表的数量不能超过1000张,否则可能会导致任务延迟或不稳定。

  • 单个DTS任务迁移的数据库不能超过10个,否则可能会有稳定性和性能问题的风险。

  • 无主键和无唯一约束的表可能出现重复数据,若需要保留无主键或无唯一约束的表,则不建议使用此方案。

  • 增量数据迁移约有10秒的延迟。

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

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

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

其他方案上云

使用SSMS工具

操作过程简单稳定,数据一致性风险小。

  • 需要停止源库的数据写入,否则可能会导致数据不一致。

  • 需要自行使用SSMS工具操作。

上云方案选择

重要

若数据源不支持增量迁移,则需要在进行上云操作之前停止源库的数据写入。

数据源

是否支持增量迁移

可选上云方案

推荐方案

自建SQL Server

  • 使用OSS物理备份手动上云

  • 使用DBS和DTS物理备份一键上云

  • 使用DTS逻辑迁移上云

使用DBS和DTS物理备份一键上云,详情请参见自建SQL Server通过物理网关迁移上云

Azure SQL Database

  • 使用DTS逻辑迁移上云

    说明

    增量数据需使用轮询查询CDC实例做增量同步模式进行迁移。

  • 使用RDS一站式上云

  • 使用SSMS工具上云

使用RDS一站式上云或使用DTS逻辑迁移上云,详情请参见Azure平台的SQL Server迁移至RDS SQL Server

Azure SQL Managed Instance

SQL Server on Azure Virtual Machines

  • 使用DTS逻辑迁移上云

    说明

    增量数据需使用轮询查询CDC实例做增量同步模式进行迁移。

  • 使用RDS一站式上云

  • 使用SSMS工具上云

  • 使用OSS物理备份手动上云

Amazon RDS for SQL Server

  • 使用DTS逻辑迁移上云

    说明

    增量数据需使用轮询查询CDC实例做增量同步模式进行迁移。

  • 使用RDS一站式上云

  • 使用SSMS工具上云

  • 使用OSS物理备份手动上云

使用RDS一站式上云或使用DTS逻辑迁移上云,详情请参见AWS平台的SQL Server迁移至RDS SQL Server

华为云RDS SQL Server

  • 使用SSMS工具上云

  • 使用DTS逻辑迁移上云(全量)

  • 使用OSS物理备份手动上云(全量)

使用OSS物理备份手动全量上云,详情请参见全量备份数据上云(SQL Server 2008 R2云盘、2012及以上版本)

说明

腾讯云数据库SQL Server

  • 使用DTS逻辑迁移上云

  • 使用OSS物理备份手动上云

使用DTS逻辑迁移上云,详情请参见自建SQL Server迁移至RDS SQL Server

使用SSMS工具上云

Google Cloud SQL for SQL Server

  • 使用SSMS工具上云

  • 使用DTS逻辑迁移上云

    说明

    增量数据需使用轮询查询CDC实例做增量同步模式进行迁移。

使用DTS逻辑迁移上云,详情请参见自建SQL Server迁移至RDS SQL Server

后续操作

数据校验

SQL Server迁移上云后,通常需要校验数据是否已经全量迁移到RDS SQL Server实例,您可以根据实际情况进行校验。如下为两种常见校验方式:

根据核心数据校验

您可以按照日期或自增ID进行排序,以验证最新业务数据是否已经正确迁移。例如,核心业务表Orders中包含OrderID(自增ID)和OrderDate(日期)等字段,可以使用如下语句进行查询:

-- 源数据库实例中的SQL查询
SELECT TOP 10 OrderID, OrderDate, CustomerID, TotalAmount
FROM Orders
ORDER BY OrderDate DESC;

-- 目标数据库实例中的SQL查询
SELECT TOP 10 OrderID, OrderDate, CustomerID, TotalAmount
FROM Orders
ORDER BY OrderDate DESC;

使用DTS全量校验

DTS支持在不停服的情况下对源库和目标库进行校验。您可以使用DTS创建一个全量校验任务,以校验数据是否已经全量迁移。更多信息,请参见配置数据校验

更新数据库统计信息

若SQL Server迁移上云后,目标RDS SQL Server实例的性能明显下降,可能是因为RDS SQL Server实例中的数据分布发生变化。您可以对指定数据库的统计信息进行全量更新,以恢复或提升实例性能。更多信息,请参见更新数据库统计信息