阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介: SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。

作者:洪鹏飞(鸿冥)



阿里云DTS作为数据世界高速传输通道的建造者,每周为您分享一个避坑技巧,助力数据之旅更加快捷、便利、安全。

点击立即体验DTS SQL Server迁移、同步链路




一、导读

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引擎更新结构信息。

image.png

限制

1)需要借助 fn_dblog、fn_dump_dblog 函数抓取日志。

2)需要 sysadmin 角色执行 fn_dblog 函数。

3)不支持堆表、压缩表、计算列表等等属性表。


混合式日志解析模式

在基于原生日志解析模式基础上,混合式日志解析模式增加了 CDC 反差引擎。DTS对抓取到的增量变更和对应变更表结构,自适应选择日志解析引擎和 CDC 反差引擎,实现增量数据捕获,详细设计架构如下:

image.png

限制

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秒左右波动,数据同步实时性较差。


三、常见问题解答

  1. SQL Server中基于原生日志解析、混合式日志解析、轮询查询CDC三种获取增量的模式有什么区别?

基于原生日志解析模式:使用 fn_dblog 抓取、解析原生日志实现增量数据捕获。该模式不依赖源库CDC能力,对源库侵入较小,但是不支持堆表、计算列表等属性表。

混合式日志解析模式:使用 fn_dblog 抓取原生日志作为增量数据捕获驱动,根据表属性不同,自适应驱动日志解析引擎和 CDC 反差引擎。该模式需要开启源库库级 CDC 和部分表 CDC,对源库有一定侵入。

轮询查询CDC模式:该模式需要开启 DTS 待同步所有表的 CDC,通过轮询查询的方式获取源库增量数据。该模式依赖原生 CDC 组件能力,对源库有较大侵入,但是能移除对原生日志解析和混合式日志解析模式对 sysadmin 角色要求和对 fn_dblog 函数依赖等问题,能支持 Azure SQL 和 AWS RDS SQL Server数据库的增量数据捕获。


  1. 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 等数据源接入。


  1. SQL Server 到 PolarDB-MySQL、ADB-MySQL、ADB-PG 等异构数据库是否支持DDL?

DTS增量支持异构数据库常见 DDL 同步。如上三种增量模式,DTS都会在源库创建 trigger 来捕获原生 DDL,通过语法文件解析原始 DDL语句并映射到目标语法结构,实现异构数据库的 DDL 同步。详细支持语法类型见:

  1. 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
  2. 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


  1. DTS是否支持 AlwaysOn 架构只读节点接入?

仅基于原生日志解析模式支持 AlwaysOn 架构主节点和只读节点接入。但是针对只读节点,DTS无法在源库创建 trigger 和维护心跳表。其中无法创建 trigger 可能会影响 DDL 同步的准确性,无法维护心跳表会影响 DTS 位点汇报。建议使用可写节点接入。


  1. 如果源库 VLF 备份截断了,DTS是否支持通过抓取备份日志实现断点续传?
  1. 针对自建SQL Server,如果备份日志在源实例本地有保存,DTS支持使用 fn_dump_dblog 函数抓取、解析备份日志。
  2. 针对阿里云 RDS SQL Server,DTS 支持从阿里云 OSS 上抓取、解析备份日志。
  3. 其他数据源不支持备份日志抓取和解析。


  1. DTS什么时间在源库创建的资源?什么时间释放这些资源?

客户配置任务,预检查启动任务通过后,DTS 会启动前置模块在源库创建资源。等待客户完成或释放该任务,且没有同源在运行的任务,DTS会启动后置模块来释放资源。


四、快来关注

  1. 数据传输服务(Data Transmission Service,简称DTS)支持关系型数据库、NoSQL、大数据(OLAP)等数据源,集数据迁移、订阅、实时同步、校验功能于一体,能够解决公共云、混合云场景下,远距离、秒级异步数据传输难题。其底层基础设施采用阿里双11异地多活架构,为数千下游应用提供实时数据流,已在线上稳定运行7年之久,是一款沉淀了丰富实践经验的可靠产品。点击了解更多DTS相关信息
  2. 欢迎加入钉群讨论交流:

相关文章
|
1月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
460 43
|
1月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
153 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
2月前
|
SQL
SQL如何只让特定列中只显示一行数据
SQL如何只让特定列中只显示一行数据
|
2月前
|
SQL
SQL中如何删除指定查询出来的数据
SQL中如何删除指定查询出来的数据
|
2月前
|
SQL 关系型数据库 MySQL
SQL如何对不同表的数据进行更新
本文介绍了如何将表A的Col1数据更新到表B的Col1中,分别提供了Microsoft SQL和MySQL的实现方法,并探讨了多表合并后更新的优化方式,如使用MERGE语句提升效率。适用于数据库数据同步与批量更新场景。
|
3月前
|
SQL DataWorks 数据管理
SQL血缘分析实战!数据人必会的3大救命场景
1. 开源工具:Apache Atlas(元数据管理)、Spline(血缘追踪) 2. 企业级方案:阿里DataWorks血缘分析、腾讯云CDW血缘引擎 3. 自研技巧:在ETL脚本中植入版本水印,用注释记录业务逻辑变更 📌 重点总结:
|
4月前
|
SQL 数据挖掘 关系型数据库
【SQL 周周练】一千条数据需要做一天,怎么用 SQL 处理电表数据(如何动态构造自然月)
题目来自于某位发帖人在某 Excel 论坛的求助,他需要将电表缴费数据按照缴费区间拆开后再按月份汇总。当时用手工处理数据,自称一千条数据就需要处理一天。我将这个问题转化为 SQL 题目。
168 12
|
12月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
421 13
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
271 9