支持的源和目标数据库
支持的源和目标数据库如下表:
| 源数据库 | 目标数据库 |
|---|---|
| 自建SQL Server、RDS for SQL Server 2008企业版/2012企业版/2014企业版/2016 标准版/2016 企业版/2019 标准版/2019 企业版/2022 标准版/2022 企业版 |
RDS for SQL Server 2016 标准版/2016 企业版/2019 标准版/2019 企业版/2022 标准版/2022 企业版 |
说明
源数据库版本不得高于目标数据库版本。
内存数据库(In-Memory OLTP)冲突:由于 SQL Server 中 In-Memory OLTP 特性和 Mirroring(镜像)技术不兼容,如果源库开启了内存数据库,目标端绝对不能选择高可用版(主备架构)的云数据库实例。
特殊云厂商限制(如Azure SQL):因为部分 SQL Server(例如 Azure SQL)不支持 use 语法,所以无法在一个任务中实现多库同步,必须每个库单独建立同步任务;Azure SQL 数据库的连接策略暂不支持 Redirect,如果是 Redirect 请修改成默认值或者 Proxy 选项。若源库为 Azure SQL Database,一个实例仅支持迁移一个数据库。
CDC 开启的版本红线:若源库待同步的表需要开启 CDC,源库为企业版时必须为 2008 及以上版本;源库为标准版时必须为 2016 SP1 及以上版本。
支持的迁移对象及SQL
迁移对象
-
结构迁移支持的对象:
数据库、模式、分区表、索引、约束(外键、唯一、排他)、视图、存储过程、函数、触发器。
-
支持的字段类型:
TINYINT、SMALLINT、INT、BIGINT、DECIMAL、NUMERIC、FLOAT、REAL、SMALLMONEY、MONEY、BIT、DATE、SMALLDATETIME、DATETIME、DATETIME2、DATETIMEOFFSET、TIME、TIMESTAMP、XML、CHAR、VARCHAR、NCHAR、NVARCHAR、BINARY、VARBINARY、IMAGE、HIERARCHYID、NTEXT、TEXT、UNIQUEIDENTIFIER。
-
不支持的字段类型:
SQL_VARIANT、GEOMETRY、GEOGRAPHY、CURSOR、ROWVERSION、SQL_VARIANT、HIERARCHYID、POLYGON、FileStream 、 FileTables等。
-
不支持用户自定义列、列表索引表。
说明对 FLOAT 或 DOUBLE 列的同步,如果没有明确定义精度,默认迁移精度分别为 38 位和 308 位,需评估是否符合业务预期。
注意事项
- 若源实例存在以下任一高负载或复杂情况,强烈建议拆分为多个迁移任务以防运行中断:
- 单次任务同步数据库超过 10 个。
- 单个数据库执行日志备份操作的频率超过 1 次/小时。
- 单个数据库执行 DDL 操作的频率超过 100 条/小时。
- 单个数据库的日志量超过 20 MB/s。
- 每次至多迁移一个库(DATABASE),迁移多个库需要创建多个DTS任务。
- 模式:不支持系统模式的迁移。
- 表:不支持临时表的迁移,表的索引、约束会一起迁移,表的触发器,历史表关系等在全量完成之后迁移。
- 映射规则:暂不支持名称映射。
- 迁移对象中如果存在包含text、image类型大字段的表,建议创建大规格及以上规格的DTS实例进行迁移,否则可能会导致 OOM。
- 如需进行增量迁移,请先禁用目标数据库中已启用的触发器和外键,否则可能会导致迁移任务失败或数据不一致。
- 系统保留名冲突:源端数据库名称绝不能与系统的保留库名重复,包括:master、tempdb、msdb、model、distribution、rdscore、sys_info 等。
- 回环拓扑与主备切换禁止:数据迁移默认仅允许级联拓扑,绝对不允许回环拓扑(即不支持从实例A同步到实例B,再从实例B同步到实例A);此外,不支持源数据库发生主备切换,源库的主备切换会直接导致迁移任务失败。
- 默认值函数强依赖:迁移表结构时,若源库使用了now、newid、getutcdate、getdate 作为默认值,目标库必须具备同功能函数;若目标库不存在,会导致默认值被置空,或建表失败造成任务中断。
增量数据迁移支持的SQL操作
- DML
INSERT、UPDATE、DELETE。 - DDL
仅支持 CREATE TABLE、
ALTER TABLE(仅包含ADD COLUMN、DROP COLUMN)、
DROP TABLE、
CREATE INDEX、DROP INDEX、
CREATE SCHEMA、DROP SCHEMA
注意
不支持分区、表定义内部包含函数。
不支持迁移仅更新大字段的 UPDATE 语句:不支持大数据类型 IMAGE、TEXT、NTEXT 的删除操作。
源库不支持连续执行时间间隔小于10分钟的多个加减列操作,一分钟内执行超过两次加减列 DDL 可能会直接导致任务失败。
在“库表结构同步”阶段运行期间,绝对不能在源库执行任何库或表结构变更的 DDL 操作,否则会导致数据同步任务直接失败。
数据库账号及权限
数据库 所需权限 参考赋权语句 源库
全量迁移:
需要具备sysadmin、db_owner、db_datareader、db_datawriter的其中一个角色权限。
增量迁移:
需要具备sysadmin角色的权限。
授予用户sysadmin角色权限:
ALTER SERVER ROLE sysadmin ADD MEMBER 用户名;
授予用户db_datareader角色权限:
ALTER SERVER ROLE db_datareader ADD MEMBER 用户名;
授予用户db_datawriter角色权限:
ALTER SERVER ROLE db_datawriter ADD MEMBER 用户名;
目标库
目标库为天翼云RDS for SQL Server
客户配置迁移实例的目标库连接时只需要填入普通用户即可,DTS会自动创建数据库并将该数据库的db_owner权限授予配置的用户。
目标库为自建库或其他云数据库
需要具备sysadmin角色权限。
目标库为天翼云RDS for SQL Server
无需额外进行赋权,DTS会自动创建数据库并将该数据库的db_owner权限授予配置的连接目标库的普通用户。
目标库为自建库或其他云数据库时,授予用户sysadmin角色权限:
ALTER SERVER ROLE sysadmin ADD MEMBER 用户名;
注意
当目标库为天翼云RDS SQL Server时,客户配置迁移实例的目标数据库连接时只需要填入普通用户即可,DTS会自动创建数据库并将该数据库的db owner权限授予配置的用户。
若业务强依赖并需要迁移源库的触发器,必须确保目标库的任务账号拥有所有者(Owner)级别的高权限。
若源库待同步的表需要开启 CDC,除了配置账号需具备权限外,数据库所有者也有严格限制:若源库是自建 SQL Server,则数据库所有者必须是 sa;若源库是 RDS SQL Server,则数据库所有者必须是 root。
前置网络协议与安全环境限制
- 协议与认证强制要求 :不支持 Windows 身份认证方式,仅支持 SQL Server 身份认证。不支持 TLS 1.0 和 TLS 1.1 协议的同步,必须将源库升级到 TLS 1.2 及以上版本。
- TDE透明数据加密 :不支持迁移源数据库中开启了 TDE(透明数据加密)的数据库,若需迁移,必须在配置迁移任务前将其彻底关闭。同时,也不支持列加密。
操作须知
DTS迁移过程一般包含四个阶段:预检查阶段、结构迁移阶段、全量阶段、增量阶段。为了确保数据迁移各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。
- 如迁移对象为表级别,则单次迁移任务仅支持迁移最多3000张表。当超出数量限制,任务会在提交后会请求报错。如果遇到这种情形,建议您拆分待迁移的表,分批配置成多个任务,或者配置为整库迁移。
- 目标库关联RDS数据库的字符集必须与源数据库一致。
- 目标库若已存在行数据,DTS在增量迁移过程中源库相同主键的数据将覆盖目标库已存在的数据,因此在迁移前需要用户自行判断数据是否需要清除,建议用户在迁移前自行清空目标库。
- 目标实例及关联RDS实例的运行状态必须正常,若关联RDS实例是主备实例,复制状态也必须正常。
- 目标库关联RDS实例必须有足够的磁盘空间,建议至少为待迁移数据量的2.5倍。(全量数据迁移会并发执行 INSERT 操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标数据库的表存储空间会比源实例的表存储空间大)。
- SQL Server的TIMESTAMP类型字段不能显式赋值,只能自动生成,所以目标库库的TIMESTAMP值自动生成,跟源库的字段值存在差异。
- 增量迁移时,CDC机制会在源库的cdc这个schema下产生一些数据库对象,请勿操作,否则影响增量迁移/同步。
- 在任务启动、任务全量迁移阶段,不建议对源数据库做删除类型的DDL操作,这样可能会引起任务迁移失败。
- 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
- 迁移过程中,不允许对源库需要迁移的表结构进行修改。
- 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
- 增量迁移场景下,不支持源数据库进行恢复操作。
- 增量迁移场景下,不支持无主键表的数据增量迁移,因为无主键表的增量迁移性能远低于有主键的表,而且不能保证数据的一致性。
- 如果开启 CDC 的表需要写入的单字段数据长度超过 64KB,由于 CDC 作业默认最大处理长度限制,必须提前在源库执行 exec sp_configure 'max text repl size', -1; 命令进行配置调整,否则会导致同步失败或截断。
- CDC 组件默认仅保留 3 天数据,若源库单表日均变更超千万条,建议使用 sp_cdc_change_job 命令将保留时间调整为 1440 分钟(24小时)或更长。
- 极端场景下,开启 CDC 的表数量不建议超过 1000 张,否则极易导致任务延迟或运行不稳定。聚集列存储索引表不支持开启 CDC。
- 待同步的表不仅需要有主键,还需要具备聚集索引且包含主键列;已经开启 CDC 的表不支持进行任何主键相关的变更,增量同步期间不支持重建索引操作,否则会造成数据丢失。
- 切勿使用 sp_rename 命令修改对象名称,应直接使用 ALTER 命令,否则会导致任务运行失败。
- 全量迁移运行期间,建议将源库的事务处理模式启用 READ_COMMITTED_SNAPSHOT(已提交读隔离),防止产生的共享锁影响业务正常写入。
- 在业务正式切换到目标实例前,务必手动结束该同步任务,或者回收 DTS 账号在目标库的写权限。避免任务意外自动恢复后用旧数据覆盖目标端新业务数据。
- sys.sysservers视图的srvname字段与SERVERPROPERTY函数返回值保持一致。
- 若单次同步任务中开启CDC的表数量大于1000,则预检查会失败。
- 日志备份模式与全量物理备份前提:为保证增量同步正常进行,源库的数据日志必须开启,且备份模式必须设置为 Full。
操作步骤
1、购买DTS数据迁移实例。
在管理控制台点击“创建实例”进入订购页面,“实例类型”选择“数据迁移”,“目标库实例”的“数据库类型”选择SQLSERVER,选择实例或输入IP地址、端口,完成其他信息的填写并完成购买。
说明迁移前请您详细阅读快速入门-准备工作概览-网络准备章节内容,了解并做好网络方面的准备工作。
2、进入实例配置页面。
DTS实例购买成功后,进入【数据迁移】实例列表页面,上一步骤购买成功的实例在实例列表中显示状态为“待配置”,进入实例配置页面的操作分两种情况:
- 当DTS实例的网络接入类型为“公网EIP”时,请先点击“绑定弹性IP”按钮完成公网弹性IP的绑定,然后点击该实例操作列的“实例配置”按钮。
- 当DTS实例网络接入类型为“VPC网络”时,直接点击该实例操作列的“实例配置”按钮。
3、配置源库及目标库信息。
进入实例配置第一个步骤的【配置源库及目标库信息】页面,填入源库与目标库的相关配置信息,包括数据库类型、IP地址端口、数据库账号、数据库密码等信息。
完成上述信息的填写后,点击源数据库和目标数据库的“测试连接”按钮进行数据库连接测试,检查数据库能否正常连接。
说明如果源库客户端配置中开启了“强制协议加密(Force Protocol Encryption)”,则必须同时开启“信任服务器证书(trust server certificate)”。
4、配置迁移对象及高级配置。
源库和目标库连通性测试成功后,点下一步按钮,进入实例配置第二个步骤的【配置迁移对象及高级配置】页面,在“源库对象”中选择要迁移的源库对象,包含:库、TABLE、VIEW、FUNCTION等,选中后点击“>”按钮,将待迁移对象移动到“已选择对象”中。
说明
关于配置迁移对象及高级配置页面的详细说明,请参考数据传输服务 - 用户指南 - 数据迁移 - 实例配置和实例编辑 - 配置迁移实例文档中配置迁移对象及高级配置详细说明。
建议在“高级配置”中,将源库、目标库无法连接后的重试时间设为 720 分钟,其他异常重试时间设为 10 分钟,以应对极端网络不稳场景。
5、预检查。
完成迁移对象和高级配置后,点击“下一步预检查”,进入实例配置第三个步骤的【预检查】页面。预检查会检查如下列表信息,并给出检查结果,用户可以依据检查结果进行下一步操作。
检查项 检查内容 目标库用户权限检查 检查目标库用于DTS任务的用户是否具有相应的权限。
源库用户权限检查 检查源库用于DTS任务的用户是否具有相应的权限。 SQLSERVER版本检查 检查源库和目标库的SQLSERVER版本是不是符合要求。 同名对象存在性检查 检查目标库中是否存在和待迁移库同名的库,若存在,再检查目标库中是否存在和待迁移库同名的架构,若存在,检查该库下面是否存在同名的表、视图、函数和存储过程等。 历史表检查 源库中是否存在未勾选的历史表。 SQLSERVER源库数据库名称校验 校验源数据库迁移对象的库名、架构名、表名是否只包含如下字符:字母、数字、下划线和中划线。 SQLSERVER源数据库特殊字符检查 校验源数据库对象名是否存在不支持的特殊字符:非ASCII字符、“. ”、 “>”、 “<”、 “\\”、 “`”、 “|”、 “,”、 “? ”、 “! ”、 “\"”和 “'”"。 SQLSERVER源库库名长度校验 校验源数据库库名是否超过64位。 SQLSERVER源数据库是否是否存在被禁用的聚集索引 校验源数据库是否存在被禁用的聚集索引。 SQLSERVER源数据库是否存在加密的数据库对象 校验源数据库是否存在加密的数据库对象。 SQLSERVER源数据库恢复模式检查 校验源数据库是否存在备份恢复模式不是FULL的数据库。 SQLSERVER代理运行状态检查 校验源数据库代理是否启动。 数据库服务器名称和所在操作系统的名称是否一致 检查SQLSERVER的数据库服务器名称和所在操作系统的名称是否一致。 待迁移表主键检查 检查待迁移表是否都存在主键。
6、预检查和启动迁移。
预检查通过后,点击“下一步”进入【确认配置】页面,用户可确认配置的所有信息,确认无误后,点击右下角的【启动任务】,开始迁移任务。
数据对比与运维建议
强烈建议仅在业务低峰期进行数据对比。
在增量同步过程中,如果源库仍有数据写入,进行对比极大概率会产生结果不一致的误报。
全量迁移期间则完全不支持进行数据比对。