数据同步可行性
类别 | 说明 |
源端/目标端类型 | 源端类型: 自建数据库(IDC 自建、CVM 自建)SQL Server 2008R2、2012、2014、2016、2017、2019、2022。 说明: 第三方厂商(阿里、华为)SQL Server 2008R2、2012、2014、2016、2017、2019、2022。 云数据库 (同账号、跨账号)SQL Server 2008R2、2012、2014、2016、2017、2019、2022。 目标端类型: 云数据库 (同账号、跨账号)SQL Server 2008R2、2012、2014、2016、2017、2019、2022。 |
同步类型 | 支持结构、全量、增量的同步。 |
同步对象 | 支持库级别数据、表级别(用户表)数据、库表结构、主键、索引的同步。 支持视图、存储过程、自定义函数、自定义数据类型、计划指南、架构的同步。 不支持触发器的同步。 |
数据类型 | 支持的数据类型: 不支持的数据类型: 特殊类型:sql_variant,hierarchyid,geometry,geography,xml。 |
源库影响 | DTS 在执行数据同步时,会占用一定源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您的数据库配置过低,建议您在业务低峰期进行同步。 开启 CDC 的相关影响: 开启 CDC 过程中会短暂锁表:在系统中创建 CDC 相关表、SQL Agent 作业创建,会造成一定资源占用。 长时间开启 CDC 时需注意,CDC 组件存储的增量数据默认保留3天,可能占用大量存储空间,建议使用 exec console.sys.sp_cdc_change_job @job_type = 'cleanup', @retention= <time>; 来设置保留时间。长时间开启 CDC 也会对事务日志截断造成一定影响。 由于 CDC 的限制,如果表的数量大于1000,数据库的数量大于10,建议使用 数据迁移,或者备份恢复能力。 CDC 作业默认最大能处理的单字段长度为64KB,若开启 CDC 的表需要写入的单字段数据超过64KB,则必须提前使用 exec sp_configure 'max text repl size', -1; 命令调整源库的配置。 |
目标库影响 | 在执行数据同步时,建议不要对目标库进行数据写入,否则可能会影响同步任务的进行,出现数据不一致风险。 |
权限 | 源端:具体云环境及权限要求请参见 多云环境支持说明。 目标端:dbcreator。 如果源端和目标端使用的是腾讯云的 SQL Server 实例,则可忽略此权限要求。 |
支持的 SQL | DML:INSERT、UPDATE、DELETE。 |
限制 | 短时间内有大数据量 DML 操作的场景,因会有延迟,所以不适合本数据同步功能。 不支持外键迁移。若表里存在外键,则不会迁移到目标实例,建议在迁移后重新创建。 不支持 DDL,请勿修改表结构、删除表,否则可能会导致同步任务报错。 不支持单独进行结构迁移,需结构与数据一起迁移。 同步过程中,请勿修改、删除源数据库和目标数据库中用户信息(包括用户名、密码和权限)和端口号,否则会导致同步任务失败。 如果源表较大,全量阶段进行长时间的事务,建议打开 READ_COMMITTED_SNAPSHOT。 |
支持数据类型列表
整数类型
数据类型 | 说明 | 全量同步 | 增量同步 |
tinyint | 1字节整数 (0 - 255) | ✅ | ✅ |
smallint | 2字节整数 (-32,768到32,767) | ✅ | ✅ |
int | 4字节整数 (-231到231-1) | ✅ | ✅ |
bigint | 8字节整数 (-263到263-1) | ✅ | ✅ |
精确数值类型
数据类型 | 说明 | 全量同步 | 增量同步 |
decimal(p,s) | 精确小数 | ✅ | ✅ |
numeric(p,s) | 精确小数 (同 decimal) | ✅ | ✅ |
money | 货币类型 (8字节) | ✅ | ✅ |
smallmoney | 货币类型 (4字节) | ✅ | ✅ |
bit | 布尔类型 (0/1/NULL) | ✅ | ✅ |
近似数值类型
数据类型 | 说明 | 全量同步 | 增量同步 |
float(n) | 浮点数 | ✅ | ✅ |
real | 单精度浮点数 | ✅ | ✅ |
字符串类型
数据类型 | 说明 | 全量同步 | 增量同步 |
char(n) | 定长非 Unicode 字符串 | ✅ | ✅ |
varchar(n) | 变长非 Unicode 字符串 | ✅ | ✅ |
varchar(max) | 大文本 (最多2GB) | ✅ | ✅ |
text | 大文本 | ✅ | ✅ |
nchar(n) | 定长 Unicode 字符串 | ✅ | ✅ |
nvarchar(n) | 变长 Unicode 字符串 | ✅ | ✅ |
nvarchar(max) | 大 Unicode 文本 (最多2GB) | ✅ | ✅ |
ntext | 大 Unicode 文本 | ✅ | ✅ |
二进制类型
数据类型 | 说明 | 全量同步 | 增量同步 |
binary(n) | 定长二进制 | ✅ | ✅ |
varbinary(n) | 变长二进制 | ✅ | ✅ |
varbinary(max) | 大二进制 (最多2GB) | ✅ | ✅ |
image | 大二进制 | ✅ | ✅ |
日期时间类型
数据类型 | 说明 | 全量同步 | 增量同步 |
date | 日期 (0001-01-01到9999-12-31) | ✅ | ✅ |
time | 时间 | ✅ | ✅ |
datetime | 日期时间 (1753-01-01到9999-12-31) | ✅ | ✅ |
datetime2 | 高精度日期时间 | ✅ | ✅ |
smalldatetime | 小型日期时间 (1900-01-01到2079-06-06) | ✅ | ✅ |
datetimeoffset | 带时区的日期时间 | ✅ | ✅ |
timestamp/ rowversion | 行版本控制 | ⚠️ 跳过 | ⚠️ 跳过 |
说明:
关于 timestamp:SQL Server 的 timestamp (即 rowversion) 是自动生成的行版本列,不允许显式 INSERT/UPDATE。DTS 在全量导出和增量同步时自动跳过该列,由目标端自行生成新值。表结构中的 timestamp 列会被正常迁移(即目标端会创建该列)。
特殊类型
数据类型 | 说明 | 全量同步 | 增量同步 |
uniqueidentifier | GUID/UUID | ✅ | ✅ |
xml | XML 数据 | ✅ | ✅ |
用户自定义类型
数据类型 | 说明 | 全量同步 | 增量同步 |
用户自定义数据类型 | 基于系统类型的别名类型 | ✅ | ✅ |
多云环境 CDC 支持说明
适用场景
从华为云、阿里云迁移。
功能说明
自动识别云环境(华为云、阿里云)
使用对应云厂商的 CDC 开启存储过程。
降低权限要求,部分云环境无需
sysadmin 权限。支持的云环境
云环境 | CDC 开启方式 | 最低权限要求 |
自建 SQL Server | EXEC sys.sp_cdc_enable_db | 如果未开启 CDC,则最低权限要求为 sysadmin如果开启了 CDC,则最低权限要求为 db_owner |
华为云 RDS | EXEC msdb.dbo.rds_cdc_db | db_owner + CREATE ANY DATABASE |
阿里云 RDS | EXEC sp_rds_cdc_enable_db | db_owner |
支持能力
功能大类 | 功能子项或说明 | 支持能力 |
断点续传 | - | 全量导出部分支持(结构导出、无主键表导出阶段不支持续传)。 全量导入、增量支持。 |
同步方向 | 一对一 | 支持 |
| 多对一(多实例合一/多表合一) | 不支持 |
| 一对多 | 不支持 |
| 双向同步 | 不支持 |
| 同实例内同步(仅支持一对一) | 不支持 |
HA 切换
源端 SQL Server 发生切换会导致 DTS 同步任务失败。
业务影响
DTS 在执行全量数据同步时,会将源库的全量数据全部读取一次,所以会增加源库的负载。如果您的数据库规格过低,建议您在业务低峰期进行同步任务,或者在任务启动前降低 DTS 的速率。
源库的规格不同,影响也不同,以源库规格为8核16G为例,DTS 任务默认采用8线程并发(可调整),在网络无瓶颈的情况下,DTS 任务对源库的性能影响如下:
DTS 全量导出阶段:占用源库约18% - 45%的 CPU,增加源库约40 - 60MB/s的查询压力,占用约8个活跃 session 连接数。
DTS 增量导出阶段:对源数据库基本无压力,默认使用8个并发连接同时查询 CDC 数据。