今天简单说一下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:// ...
随机推荐
- sublime Text-Theme
一.Spacegray主题 1>安装Spacegray主题按下Ctrl+Shift+P,输入install,选择Package Control: Install Package,然后输入Spac ...
- Scalaz(45)- concurrency :Task-函数式多线程编程核心配件
我们在上一节讨论了scalaz Future,我们说它是一个不完善的类型,最起码没有完整的异常处理机制,只能用在构建类库之类的内部环境.如果scalaz在Future类定义中增加异常处理工具的话,用户 ...
- Java经典实例:比较浮点数
/** * Created by Frank * 比较浮点数 */ public class FloatCmp { // 公差 private final static Double EPSILON ...
- Android 手机卫士6--高级工具
1.包含内容 高级工具:归属地查询:常用号码查询:短信备份: 2.归属地查询 ①拷贝数据库 SQLiteDatabase不支持直接从assets读取文件,所以要提前拷贝数据 ②电话归属地在手机窗体上悬 ...
- GJM :自定义基于 VLC 的视频播放器 [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- 第2章 如何构建布局良好的Windows程序
01.菜单栏(MenuStrip) 设置快捷键方式: 方式一:1.设置菜单项的Text属性为(打开(&F)), 首先必须按住alt+主菜单快捷键进入到对应的主菜单, 然后直接按F就可以打开子窗 ...
- jQuery Flat Shadow – 轻松实现漂亮的长阴影效果
长阴影其实就是扩展了对象的投影,感觉是一种光线照射下的影子,通常采用角度为 45 度的投影,给对象添加了一份立体感.长阴影快速发展为流行的设计趋势,并经常被应用到扁平设计方案的对象.更详细的介绍可以阅 ...
- 20款免费响应式的 HTML5 网站模板下载
今天这篇文章给大家带来的是20款免费响应式的 HTML5 网站模板,大家可以借助这些优秀的网站模板创建自己的优秀网站.响应式(Responsive Design)设计的目标是要让产品界面能够响应用户的 ...
- Onsen UI – 新鲜出炉的 PhoneGap 界面框架
Onsen UI 是一个基于元素自定义的 HTML5 UI 框架,用于构建你的移动前端.这个一个基于 Web 组件的概念的框架,让构建应用程序变得更加轻松.Onsen UI 专门针对 PhoneGap ...
- Error: Error setting TTL index on collection : sessions
Error: Error setting TTL index on collection : sessions 一.步骤一: 这个问题一般是直接升级 mongodb和connect-mongo的版本为 ...