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

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,同步至 ClickHouse 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. 欢迎加入钉群讨论交流:

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
打赏
0
0
0
0
409
分享
相关文章
SQL如何只让特定列中只显示一行数据
SQL如何只让特定列中只显示一行数据
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
129 4
SQL如何对不同表的数据进行更新
本文介绍了如何将表A的Col1数据更新到表B的Col1中,分别提供了Microsoft SQL和MySQL的实现方法,并探讨了多表合并后更新的优化方式,如使用MERGE语句提升效率。适用于数据库数据同步与批量更新场景。
SQL血缘分析实战!数据人必会的3大救命场景
1. 开源工具:Apache Atlas(元数据管理)、Spline(血缘追踪) 2. 企业级方案:阿里DataWorks血缘分析、腾讯云CDW血缘引擎 3. 自研技巧:在ETL脚本中植入版本水印,用注释记录业务逻辑变更 📌 重点总结:
【SQL 周周练】一千条数据需要做一天,怎么用 SQL 处理电表数据(如何动态构造自然月)
题目来自于某位发帖人在某 Excel 论坛的求助,他需要将电表缴费数据按照缴费区间拆开后再按月份汇总。当时用手工处理数据,自称一千条数据就需要处理一天。我将这个问题转化为 SQL 题目。
135 12
【SQL 周周练】爬取短视频发现数据缺失,如何用 SQL 填充
爬虫爬取抖音和快手的短视频数据时,如果遇到数据缺失的情况,如何使用 SQL 语句完成数据的补全。
93 5
在数据传输服务(DTS)中,要查看每个小时源端产生了多少条数据
【2月更文挑战第32天】在数据传输服务(DTS)中,要查看每个小时源端产生了多少条数据
146 6
阿里云 SelectDB 携手 DTS ,一键实现 TP 数据实时入仓
DTS 作为阿里云核心的数据交互引擎,以其高效的实时数据流处理能力和广泛的数据源兼容性,为用户构建了一个安全可靠、可扩展、高可用的数据架构桥梁。阿里云数据库 SelectDB 通过与 DTS 联合,为用户提供了简单、实时、极速且低成本的事务数据分析方案。用户可以通过 DTS 数据传输服务,一键将自建 MySQL / RDS MySQL / PolarDB for MySQL 数据库,迁移或同步至阿里云数据库 SelectDB 的实例中,帮助企业在短时间内完成数据迁移或同步,并即时获得深度洞察。
阿里云 SelectDB 携手 DTS ,一键实现 TP 数据实时入仓
阿里云DTS踩坑经验分享系列|使用VPC数据通道解决网络冲突问题
阿里云DTS作为数据世界高速传输通道的建造者,每周为您分享一个避坑技巧,助力数据之旅更加快捷、便利、安全。本文介绍如何使用VPC数据通道解决网络冲突问题。
336 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等