今天简单说一下cdc 的使用
从08开始,sql server 提供了一种叫做 变更数据捕获 cdc(Change Data Capture) 的功能,可以通过启用这个功能,来实现查看数据库中的表对象的数据的变化情况。(我感觉就是有点像sql server 自己提供的用户能直接看懂的数据变化功能)。
根据官方的说法。使用cdc 功能有以下好处
1、这是数据库自带的功能,无需额外的开发成本。
2、不需要改动表的结构,不需要动用到触发器,存储过程等手段去记录
3、性能开销最小化。(这个我也没有证实过╮(╯_╰)╭)
动用cdc 其实很简单
1、将数据库显示开启cdc 跟踪
EXEC sys.sp_cdc_enable_db
2、然后我创建一个表,并对其开启cdc。这里列出的是最简单的参数,跟踪还可以设置到具体捕获哪些列产生变化的。具体参照
sys.sp_cdc_enable_table : https://msdn.microsoft.com/zh-cn/library/bb522475(v=sql.120).aspx
CREATE TABLE AAA2
(
ID INT PRIMARY KEY,
Col1 NVARCHAR(50),
Col2 INT
) EXEC sys.sp_cdc_enable_table @source_schema = 'dbo',
@source_name = 'AAA2'
3、启动代理服务器。(不启动也可以使跟踪创建成功,但是就不工作而已)
4、然后我们能在系统表里面看到多了一个cdc 的架构然后框住的那个就是开启了AAA2的跟踪了。

5、然后就可以往AAA2 里面搞些操作,看下是否有效了~
INSERT INTO dbo.AAA2
( ID, Col1,Col2 )
VALUES ( 1, 'pp',34 ),( 2, 'bb',234 ),( 3, 'cc',12 ) UPDATE dbo.AAA2 SET Col1 = 'dd'
WHERE ID = 3 DELETE FROM dbo.AAA2 WHERE ID = 2 SELECT * FROM cdc.dbo_AAA2_CT __$start_lsn __$end_lsn __$seqval __$operation __$update_mask ID Col1 Col2
---------------------- ------------- ---------------------- ------------ -------------------- ---- ------ -----------
0x0000015B0001378F0019 NULL 0x0000015B0001378F0016 2 0x07 1 pp 34
0x0000015B0001378F0019 NULL 0x0000015B0001378F0017 2 0x07 2 bb 234
0x0000015B0001378F0019 NULL 0x0000015B0001378F0018 2 0x07 3 cc 12
0x0000015B000137A50003 NULL 0x0000015B000137A50002 3 0x02 3 cc 12
0x0000015B000137A50003 NULL 0x0000015B000137A50002 4 0x02 3 dd 12
0x0000015B000137AB0005 NULL 0x0000015B000137AB0002 1 0x07 2 bb 234
有一个东东,启用的cdc ,意味着不能用truncate 了~会提示不能使用的哟~,至于查出来的结果基本都看懂吧?
有几个说明一下,
__$operation : 1 删除 2 新增 3 修改(修改前的值) 4 修改(修改后的值)
__$update_mask : 表示那个列做了操作,02 就是0010 表示第二列 ,那07就是 0111 表示123列都做了修改罗~就酱~
6 看到这里都还是觉得这个功能好好是不是啊~但是我觉得还是有一点不方便的。比方说当你需要修改表结构的时候~
栗子1 ,删除了一列Col2 然后再插入2条数据,然后还是会存在Col2的列(因为不需要改结构嘛╮(╯_╰)╭),然后跟踪的时候把值设置成空
ALTER TABLE dbo.AAA2 DROP COLUMN Col2 INSERT INTO dbo.AAA2
( ID, Col1 )
VALUES ( 4, N'DD'),( 5, N'EE') __$start_lsn __$seqval __$operation __$update_mask ID Col1 Col2
0x0000015B000138F40004 0x0000015B000138F40002 2 0x07 4 DD NULL
0x0000015B000138F40004 0x0000015B000138F40003 2 0x07 5 EE NULL
栗子2 ,然后我脑抽的重新把Col2 加进去~然而我改成了字符串类型,然后从新插入数据 ,Col2 没值啊!!!那也正常,因为这是就结构,虽然名字一样,但是ColumnID已经不一样了啊!所以追踪不到是很正常的。
ALTER TABLE dbo.AAA2 ADD Col2 NVARCHAR(50) INSERT INTO dbo.AAA2
( ID, Col1, Col2 )
VALUES ( 6, -- ID - int
N'jj', -- Col1 - nvarchar(50)
'jjj' -- Col2 - int
) __$start_lsn __$seqval __$operation __$update_mask ID Col1 Col2
0x0000015B000138F40004 0x0000015B000138F40002 2 0x07 4 DD NULL
0x0000015B000138F40004 0x0000015B000138F40003 2 0x07 5 EE NULL
0x0000015B000139640003 0x0000015B000139640002 2 0x07 6 jj NULL
栗子3 ,那我更新总可以了吧!当更新的是元结构有的列,是可以更新成功的,但是如果是新列做了改动,则捕获不了,正常嘛(想想既然可以给你配置可跟踪的列,那么不存在这个列表里面的列发生变化不捕捉,就是这个道理罗~)
UPDATE dbo.AAA2 SET Col2 = 'ee' WHERE ID = 4
UPDATE dbo.AAA2 SET Col1 = 'III' WHERE ID = 6 __$start_lsn __$seqval __$operation __$update_mask ID Col1 Col2
0x0000015B000139C00003 0x0000015B000139C00002 4 0x02 6 III NULL
那该如何处理这个问题呢~
从心做一个捕获实例~从心做一个捕获实例~从心做一个捕获实例 重要的事情说3便 ╮(╯_╰)╭。也只有这样罗
综上所述,cdc 我就描述到这里~有什么发现的话我会补充哒~
还是祝大家新年快乐~
今天简单说一下cdc 的使用的更多相关文章
- debezium 数据变更工具使用
1. 作用 简单概述就是CDC(change data capture),实时数据分析领域用的比较多 2. 简单使用(基于官网的docker 说明) 备注: 测试没有使用守护进程模式为了方便测 ...
- 简单的自绘CListBox(多行显示)(覆盖DrawItem函数,然后用CDC绘制)
之前写过一个自绘的CListBox类,详细请参考http://blog.csdn.net/VisualEleven/archive/2010/10/12/5935430.aspx现在修改这之前的代码, ...
- Oracle CDC (Change Data Capture)更新数据捕获——Asynchronous HotLog Mode(附带简单的kettle任务实现数据同步)
Performing Asynchronous HotLog Publishing Step 1 Source Database DBA: Set the database initializat ...
- [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧
前言 前些天应好友之拖,帮忙设计一个简单的图像处理的小软件.朋友把核心算法封装好了,但是是用openCV类似于console的编程环境,要我在此基础上改成MFC桌面程序.下图是做成之后的效果: 我是 ...
- 简单JavaScript模版引擎优化
在上篇博客最简单的JavaScript模板引擎 说了一下一个最简单的JavaScript模版引擎的原理与实现,作出了一个简陋的版本,今天优化一下,使之能够胜任日常拼接html工作,先把上次写的模版函数 ...
- 在SQL Server 2012中实现CDC for Oracle
在上篇在SSIS 2012中使用CDC(数据变更捕获)中,介绍了如何在SSIS 2012中使用CDC,本文在此基础上介绍,如何通过Attunity提供的Change Data Capture Desi ...
- CDC类
CDC :class of device context Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 .MFC基础类库定义了设备环境对象类----CD ...
- Data Flow ->> CDC Control Task, CDC Source, CDC Splitter
CDC Control Task可以从控制CDC数据同步,比如初始化加载.LSN范围的管理.它可以代替另一种做法,就是通过调用一批CDC函数来完成同样的事情.从SSIS的角度来完成,事情编程简单,和另 ...
- 《MFC游戏开发》笔记九 游戏中的碰撞判定初步&怪物运动简单AI
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...
随机推荐
- hibernate---注解--CascadeType属性
cascade表示级联操作 CascadeType.MERGE级联更新:若items属性修改了那么order对象保存时同时修改items里的对象.对应EntityManager的merge方法 Cas ...
- java入门必备单词
① anchor 锚 锚点 ② administrator 管理员 ③ application 应用程序 ④ align 对齐 ⑤ attribute 属性 ⑥ access 访问 ⑦ break 暂 ...
- 代码与图详解性能之Python集合类型(list tuple dict set generator)
Python内嵌的集合类型有list.tuple.set.dict. 列表list:看似数组,但比数组强大,支持索引.切片.查找.增加等功能. 元组tuple:功能跟list差不多,但一旦生成,长度及 ...
- 常用的css命名规则:
关于团队合作的css命名规范 常用的css命名规则: 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制 ...
- T3 - 构建大型 Web 应用的 JavaScript 框架
T3 是一个用于构建大型 Web 应用程序的客户端 JavaScript 框架.T3 和大多数的 JavaScript 框架不同.它的意思是一小部分的整体架构,它允许你建立可扩展的客户端代码.T3 应 ...
- (转)JavaScript一:为什么学习JavaScript?
Web程序不论是B/S(Browser/Server)还是C/S(Client/Server)架构,分为客户端程序与服务器端程序两种.ASP.NET是开发服务器端程序的强大工具,但是有时候为了降低服务 ...
- 拖放 js
之前被小伙伴问自己能不能写一个简单的原生的 我稍微犹豫了下 这次重新学习下拖拽的过程 分享下 参考 JavaScript高级程序设计 必要的准备 自定义事件(实现事件模型) 简单来说事件模型就 ...
- ASP.NET多文件上传实例
在Web应用程序开发中,避免不了要用到上传文件这个功能,但以前上传文件是个很麻烦的事,现在有了.NET,文件上传变得轻而易举.下面的这个例子实现了多文件上传功能.可以动态添加输入表单,上传的文件数量没 ...
- Chrome 控制台console的用法
下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用. 目前控制台方法和属性有: ["$$", "$x", "dir" ...
- Swift安装
Server1 .Update sudo apt-get update sudo apt-get upgrade . sudo apt-get install bridge-utils .IP 3.1 ...