SQL Server 2012 CDC 完整架构原理图 + 组件详解
SQL Server 2012 CDC 底层架构与 2008 完全一致,仅新增 SSIS CDC 专用组件;核心依靠事务日志异步解析 + SQL Agent 双作业实现变更捕获。
一、官方标准 CDC 数据流总图(微软原版架构图)


1. 业务源表 (Source Tables):执行 INSERT/UPDATE/DELETE,变更先写入事务日志 (ldf),不阻塞业务表
2. SQL Agent 捕获作业 (capture job):后台异步扫描事务日志,过滤已开启 CDC 表的变更
3. CDC 变更表 (cdc.\*\_CT):解析日志后写入专用变更表,存储新旧数据 + LSN 元数据
4. SQL Agent 清理作业 (cleanup job):定期删除过期 CDC 变更数据(默认保留 3 天)
5. 消费层:T-SQL 表值函数 / SSIS 2012 CDC 组件 / 同步程序读取变更表做增量同步
## 二、分层拆解架构组件(SQL Server 2012 核心模块)
### 1. 底层数据源:事务日志(VLF 虚拟日志)

- 所有 DML 操作先落地 ldf 日志,CDC**只读日志、不锁业务表**,性能远优于触发器
- 依靠 LSN(日志序列号)标记事务位点,作为增量同步断点
### 2. SQL Agent 两大核心作业(开启 CDC 自动生成)
1. **捕获作业 `cdc_库名_capture`**
- 每 5 秒扫描一次事务日志,批量解析变更写入`cdc.*_CT`变更表
- 只处理已启用 CDC 跟踪的表,跳过无关日志记录
2. **清理作业 `cdc_库名_cleanup`**
- 默认 3 天清理一次过期变更数据,防止 cdc schema 数据膨胀
- 可通过存储过程修改数据保留窗口

3. cdc 系统架构(专属 Schema,自动创建)

### 4. SQL Server 2012 独有扩展:SSIS CDC 套件(上层消费架构)
2012 版本新增 3 个 ETL 专用组件,构成完整同步链路:
1. **CDC Control Task**:管理 LSN 位点、区分全量加载 / 增量同步状态
2. **CDC Source**:直接读取 cdc 变更表作为数据源
3. **CDC Splitter**:自动分流 INSERT/UPDATE/DELETE 三种变更数据流
## 三、文字版完整架构流程图(可直接画 Visio/PPT)
OLTP业务层
↓ INSERT/UPDATE/DELETE
源业务表 dbo.TableA
↓ 同步写入
事务日志 .LDF(VLF虚拟日志段)
↓ 异步扫描(SQL Agent Capture Job)
CDC日志解析引擎
↓ 写入
cdc.Schema_TableA_CT 变更表(存储所有变更记录)
↓ 两路分支
分支1:SQL Agent Cleanup Job → 定时清理过期数据
分支2:数据消费端
├─ T-SQL调用cdc.fn_cdc_get_all_changes_*
## 四、关键特性(SQL Server 2012 CDC 约束)
1. 仅**企业版 / 开发版**支持 CDC,标准版、简易版无此功能
2. 数据库恢复模式不限:简单 / 完整 / 大容量日志均可开启 CDC
3. 异步机制:捕获作业滞后于业务写入,存在毫秒~秒级延迟
4. 日志截断限制:未被 CDC 消费的日志无法自动收缩,避免日志暴增需配置清理作业



SQLSERVER CDC原理与架构