今天简单说一下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:// ...
随机推荐
- AlertDialog.Builder弹出对话框
在Android中,弹出对话框使用AlertDialog.Builder方法. new AlertDialog.Builder(MainActivity.this).setTitle("本机 ...
- 几个最常用的git命令
之前在Windows下一直用可视化的tortoise git,在Linux下最好是用命令行,以下是常用的git命令: git status:显示当前已修改的文件,新增的文件 git checkout ...
- 【Linux_Fedora_应用系列】_1_如何安装音乐播放器和mp3解码
因为安装环境的不同,Fedora在安装后会安装不同的软件包.通常在安装的时候有多种选择: 1.桌面环境: 适合个人日常使用,安装包含办公软件(Fedora 默认安装Open Office).娱乐影音软 ...
- 2015暑假多校联合---CRB and His Birthday(01背包)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5410 Problem Description Today is CRB's birthda ...
- jvm三的三种类加载器
JVM有三种类加载器:bootstrap负责加载系统类,extclassloader负责加载扩展类,appclassloader负责加载应用类.他们主要是分工不一样,各自负责不同的区域,另外也是为了实 ...
- centos6配置vnc登录远程物理机及vb复制vdi启动虚拟机网络问题
1.安装vnc和vncserver #yum install tigervnc tigervnc-server 2.启动VNC服务# vncserverYou will require a passw ...
- linux下查找java进程占用CPU过高原因
1. 查找进程 top查看进程占用资源情况 明显看出java的两个进程22714,12406占用过高cpu. 2.查找线程 使用top -H -p <pid>查看线程占用情况 3. ...
- 跨平台日志清理工具 Log-Cutter v2.0.1 RC-1 发布
Log-Cutter 是JessMA开源组织开发的一个简单实用的日志切割清理工具.对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能.如果用手工方 ...
- <记录学习>(前三天)京东页面各种注意点
培训学校第1到3天先学习HTML现在流行的是HTML5,目前学习的是HTML5规范.(给有基础一定的人学习)前三天学习的是京东页面的编写,和以前写的不同,页面看上去和自己写的一样,但老师讲的还是有很多 ...
- C# 泛型的协变和逆变
1. 可变性的类型:协变性和逆变性 可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用.如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量.协变和逆变是两个相互对立的概念: 如 ...