作者:洪鹏飞(鸿冥)
阿里云DTS作为数据世界高速传输通道的建造者,每周为您分享一个避坑技巧,助力数据之旅更加快捷、便利、安全。
一、导读
SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。
二、DTS SQL Server逻辑增量能力介绍
为了满足各种数据源和数据结构要求和限制,DTS 提供了如下三种模式来实现逻辑增量能力:
1)基于原生日志解析模式。
2)混合式日志解析模式。
3)轮询查询CDC模式。
基于原生日志解析模式
架构
基于原生日志解析模式中,主要包含四大组件,详细架构设计如下:
1)meta引擎:通过系统基表初始化和实时跟新结构信息。
2)日志抓取引擎:使用 fn_dblog、fn_dump_dblog 抓取日志。
3)事务引擎:聚合相同事务变更,对提交事务进行预处理。
4)日志解析引擎:对 DML 事务解析成通用增量记录;对DDL事务通过meta引擎更新结构信息。
限制
1)需要借助 fn_dblog、fn_dump_dblog 函数抓取日志。
2)需要 sysadmin 角色执行 fn_dblog 函数。
3)不支持堆表、压缩表、计算列表等等属性表。
混合式日志解析模式
在基于原生日志解析模式基础上,混合式日志解析模式增加了 CDC 反差引擎。DTS对抓取到的增量变更和对应变更表结构,自适应选择日志解析引擎和 CDC 反差引擎,实现增量数据捕获,详细设计架构如下:
限制
1)需要源库支持开启 CDC 能力。
2)需要提供 fn_dblog、 fn_dump_dblog函数。
2)需要 sysadmin 角色执行 fn_dblog 函数和开启库级别CDC。
轮询查询CDC模式
轮询查询 CDC 模式中,主要包含三大组件:
1)增量事件驱动:捕获源库变更事务信息来驱动 CDC Instance 获取增量变更。
2)增量数据获取:CDC Instance 反差获取指定表的范围增量数据。
3)事务引擎:CDC Instance 反差结果进行事务聚合和事务排序。
限制
1)需要源库支持开启 CDC 的能力。
2)待迁移表不建议超过 1000 张表。
3)增量延迟在10秒左右波动,数据同步实时性较差。
三、常见问题解答
- SQL Server中基于原生日志解析、混合式日志解析、轮询查询CDC三种获取增量的模式有什么区别?
基于原生日志解析模式:使用 fn_dblog 抓取、解析原生日志实现增量数据捕获。该模式不依赖源库CDC能力,对源库侵入较小,但是不支持堆表、计算列表等属性表。
混合式日志解析模式:使用 fn_dblog 抓取原生日志作为增量数据捕获驱动,根据表属性不同,自适应驱动日志解析引擎和 CDC 反差引擎。该模式需要开启源库库级 CDC 和部分表 CDC,对源库有一定侵入。
轮询查询CDC模式:该模式需要开启 DTS 待同步所有表的 CDC,通过轮询查询的方式获取源库增量数据。该模式依赖原生 CDC 组件能力,对源库有较大侵入,但是能移除对原生日志解析和混合式日志解析模式对 sysadmin 角色要求和对 fn_dblog 函数依赖等问题,能支持 Azure SQL 和 AWS RDS SQL Server数据库的增量数据捕获。
- DTS是否支持 Azure SQL DB、Azure SQL MI、Azure SQL VM、AWS RDS SQL Server 等数据源?
DTS 提供了轮询查询 CDC 模式来获取增量,它通过源库 CDC 组件能力来实现增量数据捕获,能支持Azure SQL DB、Azure SQL MI、Azure SQL VM、AWS RDS SQL Server 等数据源接入。
- SQL Server 到 PolarDB-MySQL、ADB-MySQL、ADB-PG 等异构数据库是否支持DDL?
DTS增量支持异构数据库常见 DDL 同步。如上三种增量模式,DTS都会在源库创建 trigger 来捕获原生 DDL,通过语法文件解析原始 DDL语句并映射到目标语法结构,实现异构数据库的 DDL 同步。详细支持语法类型见:
- SQL Server -> PolarDB-MySQL:https://help.aliyun.com/zh/dts/user-guide/synchronize-data-from-a-self-managed-sql-server-database-to-a-polardb-for-mysql-cluster
- SQL Server -> ADB-MySQL:https://help.aliyun.com/zh/dts/user-guide/synchronize-data-from-an-apsaradb-rds-for-sql-server-instance-to-an-analyticdb-for-mysql-v3-0-cluster
- DTS是否支持 AlwaysOn 架构只读节点接入?
仅基于原生日志解析模式支持 AlwaysOn 架构主节点和只读节点接入。但是针对只读节点,DTS无法在源库创建 trigger 和维护心跳表。其中无法创建 trigger 可能会影响 DDL 同步的准确性,无法维护心跳表会影响 DTS 位点汇报。建议使用可写节点接入。
- 如果源库 VLF 备份截断了,DTS是否支持通过抓取备份日志实现断点续传?
- 针对自建SQL Server,如果备份日志在源实例本地有保存,DTS支持使用 fn_dump_dblog 函数抓取、解析备份日志。
- 针对阿里云 RDS SQL Server,DTS 支持从阿里云 OSS 上抓取、解析备份日志。
- 其他数据源不支持备份日志抓取和解析。
- DTS什么时间在源库创建的资源?什么时间释放这些资源?
客户配置任务,预检查启动任务通过后,DTS 会启动前置模块在源库创建资源。等待客户完成或释放该任务,且没有同源在运行的任务,DTS会启动后置模块来释放资源。
四、快来关注
- 数据传输服务(Data Transmission Service,简称DTS)支持关系型数据库、NoSQL、大数据(OLAP)等数据源,集数据迁移、订阅、实时同步、校验功能于一体,能够解决公共云、混合云场景下,远距离、秒级异步数据传输难题。其底层基础设施采用阿里双11异地多活架构,为数千下游应用提供实时数据流,已在线上稳定运行7年之久,是一款沉淀了丰富实践经验的可靠产品。点击了解更多DTS相关信息
- 欢迎加入钉群讨论交流: