从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 的使用的更多相关文章

  1. debezium 数据变更工具使用

    1.  作用 简单概述就是CDC(change data capture),实时数据分析领域用的比较多   2. 简单使用(基于官网的docker 说明)  备注: 测试没有使用守护进程模式为了方便测 ...

  2. 简单的自绘CListBox(多行显示)(覆盖DrawItem函数,然后用CDC绘制)

    之前写过一个自绘的CListBox类,详细请参考http://blog.csdn.net/VisualEleven/archive/2010/10/12/5935430.aspx现在修改这之前的代码, ...

  3. Oracle CDC (Change Data Capture)更新数据捕获——Asynchronous HotLog Mode(附带简单的kettle任务实现数据同步)

    Performing Asynchronous HotLog Publishing Step 1   Source Database DBA: Set the database initializat ...

  4. [MFC] 梳理一个简单的图片处理桌面软件中用到的MFC控件技巧

     前言 前些天应好友之拖,帮忙设计一个简单的图像处理的小软件.朋友把核心算法封装好了,但是是用openCV类似于console的编程环境,要我在此基础上改成MFC桌面程序.下图是做成之后的效果: 我是 ...

  5. 简单JavaScript模版引擎优化

    在上篇博客最简单的JavaScript模板引擎 说了一下一个最简单的JavaScript模版引擎的原理与实现,作出了一个简陋的版本,今天优化一下,使之能够胜任日常拼接html工作,先把上次写的模版函数 ...

  6. 在SQL Server 2012中实现CDC for Oracle

    在上篇在SSIS 2012中使用CDC(数据变更捕获)中,介绍了如何在SSIS 2012中使用CDC,本文在此基础上介绍,如何通过Attunity提供的Change Data Capture Desi ...

  7. CDC类

    CDC :class of device context Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 .MFC基础类库定义了设备环境对象类----CD ...

  8. Data Flow ->> CDC Control Task, CDC Source, CDC Splitter

    CDC Control Task可以从控制CDC数据同步,比如初始化加载.LSN范围的管理.它可以代替另一种做法,就是通过调用一批CDC函数来完成同样的事情.从SSIS的角度来完成,事情编程简单,和另 ...

  9. 《MFC游戏开发》笔记九 游戏中的碰撞判定初步&怪物运动简单AI

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...

随机推荐

  1. 360手机卫士会影响Widget的运行

    最近开发了一个Widget,老是运行时间长了就会出现NullPointerException错误,一直不知道是什么原因造成的,后来把Widget加入360一键清理的保护名单,错误就少很多,但是仍然有错 ...

  2. 【Java每日一题】20161012

    package Oct2016; public class Ques1012 { public static void main(String[] args) { System.out.println ...

  3. 【thinkphp5】【THINKCMG】标签部分开发(一)

    最近打算开一个自己的CMS后台轮子,框架选择了thinkphp 5 (别问我为什么选择这个框架)然后想边开发边记录一下,方便自己方便他人 进入正题 1.数据库设计 一共三张表 post文章表这个就不贴 ...

  4. selenium启动firefox时加载扩展

    有些时候,我们测试需要用到插件或者已经导入的证书(比如金融和安全加密行业),而selenium启动firefox时会打开一个新的,不含有任何插件和个人证书的firefox(等同于全新安装后第一次打开的 ...

  5. C# RSA 分段加解密

    RSA加解密: 1024位的证书,加密时最大支持117个字节,解密时为128:2048位的证书,加密时最大支持245个字节,解密时为256. 加密时支持的最大字节数:证书位数/8 -11(比如:204 ...

  6. knockout源码分析之computed(依赖属性)

    一.序列图 二.主要代码文件 1.dependentObservable.js:主要包含ko.computed相关方法的处理2.dependencyDetection.js:主要包含依赖的监控上下文对 ...

  7. Materialize - 响应式 Material Design 框架

    由谷歌创建和设计的 Material Design(材料设计)是一种设计语言,结合成功的设计的经典原则以及创新科技.谷歌的目标是开发一个设计系统,让所有的产品在任何平台上拥有统一的用户体验. Mate ...

  8. go语言常用函数:cap

    cap()函数返回的是数组切片分配的空间大小.//http://www.cnblogs.com/osfipin/. package main import "fmt" func m ...

  9. HTML <select> 标签 创建单选或多选菜单

    所有主流浏览器都支持 <select> 标签. select 元素可创建单选或多选菜单. <select&> 元素中的 <option> 标签用于定义列表中 ...

  10. ABAP--在查询条件只包含部分索引字段时,如何使用索引

    One of the most important considerations when writing a select statement against a large table is th ...