今天简单说一下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:// ...
随机推荐
- Android实现系统重新启动
有些Android版本没有系统重启的功能,非常不方便.需要我们自己开发一个能够重新启动的应用. 首先定义布局文件: <?xml version="1.0" encoding= ...
- Lucene(01)
我的博客园博文地址:http://www.cnblogs.com/tenglongwentian/ Lucene,最新版是Lucene6.2.1,匹配的jdk版本是1.8正式版.这里用jdk7最后一版 ...
- [python拾遗]enumerate()函数
在python中处理各类序列时,如果我们想显示出这个序列的元素以及它们的下标,可以使用enumerate()函数. enumerate()函数用于遍历用于遍历序列中的元素以及它们的下标,用法如下: 1 ...
- 关于javascript的一些知识以及循环
javascript的一些知识点:1.常用的五大浏览器:chrome,firefox,Safari,ie,opera 2.浏览器是如何工作的简化版:3.Js由ECMAjavascript;DOM;BO ...
- 小清新的jQuery ck-slide 图片轮播
ck_slide 是一款小清新的jQuery 幻灯片插件,它非常小巧,压缩后仅 3KB,基本功能可以满足.它支持淡入淡出/左右滚动.箭头/圆点控制.自动播放. 在线实例 默认(淡入淡出) 左右滚动 自 ...
- jQuery的deferred对象使用详解——实现ajax线性请求数据
最近遇到一个ajax请求数据的问题 ,就是想要请求3个不同的接口,然后请求完毕后对数据进行操作,主要问题就是不知道这3个请求誰先返回来,或者是在进行操作的时候不能保证数据都已经回来,首先想到能完成的就 ...
- 【服务器】CentOS下部署运行NodeJs Web App
NodeJs Web App测试完成后,要怎么部署呢?介绍两个不错的方案 已知以下情景: 我要为 「kenniu」这个项目做配置 它的入口文件在 「/path/to/entry.js」 运行的User ...
- 如何收缩超大的SharePoint_Config数据库
前言 在已经运行了2年多的SharePoint服务器上,发现SharePoint_Config的数据库文件越来越大,已经达到90几个GB,收缩可以减小20几个GB,但是一周以后又会恢复到90几个GB大 ...
- Java解析Soap XML
package com.jstrd.tipstock.webservice.jt.base; import java.io.ByteArrayInputStream; import java.util ...
- Android studio 使用SVN需要忽略的文件
Android Studio创建的Android项目一般需要忽略 1..idea文件夹 2..gradle文件夹 3.所有的build文件夹 4.所有的.iml文件 5.local.propertie ...