SSIS:捕获修改了的数据
获取修改了的数据一般有三种方式:
1.使用一个datetime列
缺点:是并不是每个表都会有个‘修改日期’字段来让你判断行是否修改过
使用实例可以参考我之前的文章:SSIS: 使用最大ID和最大日期来增量更新表
2.MSSQL 自带的功能CDC (change data capture)
CDC使用 SQL Server Agent把变更的数据写到另外一个表中。
缺点: 如果数据库变动频繁会占用大量的磁盘空间
1) 启用CDC
注意:只有开发板和企业版提供CDC功能
USE [AdventureWorksDW2012]
GO EXEC sys.sp_cdc_enable_db
GO
2) 开启DimAccount的CDC
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'DimAccount',
@role_name = 'MyRole',
@filegroup_name = 'Primary',
@supports_net_changes = 1
GO
此时我们可以看到System Tables里面多了很多表

其中 cdc.dbo_DimAccount_CT 就是记录变更的表
接着我们改变DimAccount表中的一条记录,再查看 cdc.dbo_DimAccount_CT 表
我们发现他复制了整行修改前的记录和修改后的记录

其中 _$operation列是我们操作的顺序,可以残出来那个是旧的哪个是新的。

禁止DimAccount的 CDC
EXECUTE sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = N'DimAccount',
@capture_instance = N'dbo_DimAccount';
3.MSSQL 自带的功能 change tracking
只记录修改的key ,大多数情况下这个方法不错。 更改记录可以设置定期删除。
1) 开启CHANGE_TRACKING功能
USE [AdventureWorksDW2012] ALTER DATABASE AdventureWorksDW2012
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);--自动清理前两天的记录 ALTER TABLE [dbo].[DimAccount]
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON);
2) 同上面一样修改Dimaccount并查看效果
这里变更记录并不是存放在表里面,而是通过一个函数获得
USE [AdventureWorksDW2012] SELECT *
FROM CHANGETABLE(CHANGES [dbo].[DimAccount], 0) AS T
如图 AccountKey 被记录了下来

与CDC比较

参考文档
sys.sp_cdc_disable_table (Transact-SQL)
https://msdn.microsoft.com/zh-cn/library/bb510702
SSIS:捕获修改了的数据的更多相关文章
- SqlServer触发器判断对表操作类型(增、删、改)并将修改后的数据映射到新表
该文章为原创,日后可能会根据实际开发经验和网友评论,进行相应地方修改,为获得最新博客动态,望在转发博客的时候注明出处. 触发器要实现的功能: (1)获取对表Table1数据操作操作类型(insert. ...
- IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据
使用IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据? 解决办法:tomcat配置中,On frame deactivation属性选择Update cla ...
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html LINQ和 LINQ to SQL 都已经不是一个新事物了 ...
- 使用ADO对象添加、修改、删除数据
使用ADO对象对数据库中的数据进行添加.修改和删除等操作.首先创建一个ADO类,通过ADO类连接数据库,并打开记录集.例如,使用ADO对象添加.修改.删除数据,程序设计步骤如下:(1)创建一个基于对话 ...
- Mysql修改已有数据的字符集
Mysql修改已有数据的字符集 问题 在生产环境中跑了很久,发现MysqlClient连接的字符集是默认的latin1,我们一直以为都是utf8,造成这样的误解,是因为在内网环境中,我们是源码编译的M ...
- 数据库(概念、语法、DBMS、SQL语言:创建数据库、表格,添加、修改、删除数据记录)
关系型数据库:以表作为实体,以主键和外键关系作为联系的一种数据结构. 主键:在关系型数据库中,用一个唯一的标识符来标志每一行,这个标识符就是主键.主键有两个特点:非空和不能重复. 外键:在关系型数据库 ...
- CTF---安全杂项入门第三题 这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?
这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?分值:30 来源: 2014sctf 难度:难 参与人数:3918人 Get Flag:384人 答题人数 ...
- FDMEMTABLE将修改后的数据序列为JSON
FDMEMTABLE将修改后的数据序列为JSON procedure TForm1.Button3Click(Sender: TObject); var memtable: TFDMemTable; ...
- JMeter之修改Sampler响应数据的编码格式
转 JMeter之修改Sampler响应数据的编码格式 问题:JMeter的sampler响应数据中有中文时,会解析出错. JMeter的Sampler中的响应数据默认的编码格式是:ISO-8859- ...
随机推荐
- VC中利用多线程技术实现线程之间的通信
当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软 ...
- javascript获取url地址问好后面的值,包括问号
javascript获取url地址问好后面的值,包括问号 <!DOCTYPE html> <html lang="en"> <head> < ...
- js判断终端是手机还是电脑
$(function(){ function browserRedirect() { var sUserAgent= navigator.userAgent.toLowerCase(); var bI ...
- Effective C++ Item 36 绝不又一次定义继承而来的 non-virtual 函数
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:绝对不要又一次定义继承而来的 non-virtual 函数 --> Item 7 ...
- Android建立模拟器进行调试
安装好android开发环境后.用到下面几个命令.android, adb, emulator android - 最主要的android命令.能够进行sdk更新,列出设备源,生成虚拟设备等. adb ...
- 关于 FPGA 和 外部芯片接口时序设计
在看这篇文章之前, 建议先好好读下这篇文章.http://download.csdn.net/detail/angelbosj/8013827. 因为我不太会用 VISio.要是哪位网友能告诉我.怎么 ...
- HTML系列(七):多媒体
一.video标签 H5新增了video实现在线播放视频的功能: 代码示例: <video controls="controls"> <source src=&q ...
- android入门——UI(5)
最近时间实在匆忙,博客的代码基本没有解释. 介绍ExpandableListView <?xml version="1.0" encoding="utf-8&quo ...
- 从UIImage的矩阵变换看矩阵运算的原理
1.矩阵的基本知识: struct CGAffineTransform { CGFloat a, b, c, d; CGFloat tx, ty;}; CGAffineTransform CGAf ...
- Redis是什么
Redis是什么 Redis是什么,首先Redis官网上是这么说的:A persistent key-value database with built-in net interface writte ...