SQL Server CDC(变更数据捕获) 实践笔记
创作时间:
作者:
@小白创作中心
SQL Server CDC(变更数据捕获) 实践笔记
引用
CSDN
1.
https://m.blog.csdn.net/yaoyan11ao11an/article/details/145698450
功能
记录数据变更
CDC能够记录SQL Server表的插入、更新和删除活动 =====》事务日志
要求
SQL Server 2008及以上版本的Enterprise Edition、Developer Edition和Evaluation Edition
前置条件
- 需要开启代理服务
- 磁盘要有足够的空间,保存日志文件
- 表必须要有主键或者是唯一索引
原理
生成表结构副本
事务日志中记录的相关操作信息会被CDC代理异步读取并应用到副本表
操作
1. 开启CDC,创建相关系统表和函数
- 保存CDC元数据信息
- 捕获的变更数据
- 查询CDC
-- 启用CDC功能
EXEC sys.sp_cdc_enable_db;
-- 判断当前数据库是否启用了CDC(如果返回1,表示已启用)
SELECT is_cdc_enabled FROM sys.databases WHERE name = 'cdc_test';
- 若启用CDC失败
USE [DB]
GO
sp_changedbowner sa
2. 选择跟踪表
-- schema_name 是表所属的架构(schema)的名称。
-- table_name 是要启用 CDC 跟踪的表的名称。
-- cdc_role 是 CDC 使用的角色的名称。如果没有指定角色名称,系统将创建一个默认角色。
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'orders',
@role_name = 'cdc_role';
- 执行完成后,自动生成两个作业。tablename_capture & tablename_cleanup
3. 变更数据的接口
查询函数
- 检索日志 cdc.fn_cdc_get_all_changes_
- 查询开启cdc跟踪的表
SELECT name, is_tracked_by_cdc
FROM sys.tables
WHERE is_tracked_by_cdc = 1;
- 获取特定表的CDC配置信息
EXEC sys.sp_cdc_help_change_data_capture @source_schema = N'dbo', @source_name = N'table';
- CDC系统表
cdc.captured_columns - 禁用表的CDC功能
USE [db];
GO
EXEC sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = N'tabletest',
@capture_instance = N'dbo_tabletest';
GO
- 对具体字段开启CDC
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'YourTableName',
@capture_instance = N'YourCaptureInstance',
@supports_net_changes = 1,
@captured_column_list = N'Column1, Column2'; -- 只跟踪Column1和Column2
- 获取数据库的cdc配置信息
EXEC sys.sp_cdc_help_change_data_capture
4. 获取最大日志序列号(LSN)
select sys.fn_cdc_get_max_lsn()
5. 两个作业
捕获作业: cdc.dbCC_capture
捕获变更数据清理作业:cdc.dbCC_cleanup
清理旧的变更数据
性能
影响较小
扩展性强
注意事项
- CDC不支持字段类型:image、text、ntext。
- 配置Mapping时,Timestamp、identity 这种数据库系统字段不支持手动操作,需在配置中移除。
- 配置Mapping时,表必须选择主键primary key。
- 存在外键等依赖关系的表,需注意其同步顺序。
- 启用CDC后,若cdc表发生了字段类型变化,或新增/删除字段,则会影响日志,需关闭后重新启用cdc。
- 当cdc表并非所有字段都启用cdc时,则配置Mapping要注意其字段需与captured_column_list中保持一致。
Keys
- 事务日志文件(.ldf)
- 逻辑日志(VLF)
- CDC作业
- CDC表
- LSN(Log Sequence Number)
- cdc.lsn_time_mapping
- cdc.ddl_history
附
CDC 要点简图
CDC接口
CDC & 发布订阅
热门推荐
退胆红素的药有什么
拯救你家狗狗的口臭——15种科学实用解决方案
港影:“戏魔”郭富城的前路
10年只卖一款马卡龙,每周秒售罄的商业秘诀!
日本假面骑士的故事及其魅力
钛板的十大应用领域及优势
纯钛金属牙与全瓷牙哪种更优?深入解析两者的优缺点对比!
骨转移癌的好发部位是什么
AI浪潮下大学之变:文科瘦身人工智能扩招,交叉融合成共识
文科“老根”不能动摇,但要发“新枝”,复旦校长金力详解改革破局核心理念
王者荣耀S38赛季深度解析:57%胜率T0英雄崛起,苍和牛魔表现亮眼
触摸屏的界面设计:打造高效与美观并存的交互体验
知识“破壁”,思维“远航”:成都市娇子小学以“整合式教学”重塑教育未来
知识“破壁”,思维“远航”:成都市娇子小学以“整合式教学”重塑教育未来
探秘厦门鼓浪屿毓园:历史背景、特色景观与游玩攻略
深汕小漠港防波堤项目加速复工复产,在汉央企助力区域经济高质量发展
新型“飞地”探路区域一体化——深圳市深汕特别合作区经济高质量发展调查
汽车保养指南:里数和时间哪个更重要?
平时应该给小猫喂什么?如何平衡营养和健康?
编程里的"类"到底是什么?从英文Class看翻译之困
三步克服恐惧:心理调节、行为训练与生活调整
打呼噜,不一定是睡得好
如何制定企业标准化管理办法?
建立企业环境中标准化流程的八个关键步骤
减脂意大利面,减脂意大利面推荐
实时监测与数据分析:光伏环境监控设备的优势
什么是等离子护盾?有什么用途?
用光基础-最基础的打光技巧
寒假里刷题肯定少不了,但让孩子多参加社区交往也很重要
叙事的代价:国内最好的文案们是怎么参与到故事编织中的?