获取修改了的数据一般有三种方式:

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:捕获修改了的数据的更多相关文章

  1. SqlServer触发器判断对表操作类型(增、删、改)并将修改后的数据映射到新表

    该文章为原创,日后可能会根据实际开发经验和网友评论,进行相应地方修改,为获得最新博客动态,望在转发博客的时候注明出处. 触发器要实现的功能: (1)获取对表Table1数据操作操作类型(insert. ...

  2. IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据

    使用IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据? 解决办法:tomcat配置中,On frame deactivation属性选择Update cla ...

  3. LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据

    http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html LINQ和 LINQ to SQL 都已经不是一个新事物了 ...

  4. 使用ADO对象添加、修改、删除数据

    使用ADO对象对数据库中的数据进行添加.修改和删除等操作.首先创建一个ADO类,通过ADO类连接数据库,并打开记录集.例如,使用ADO对象添加.修改.删除数据,程序设计步骤如下:(1)创建一个基于对话 ...

  5. Mysql修改已有数据的字符集

    Mysql修改已有数据的字符集 问题 在生产环境中跑了很久,发现MysqlClient连接的字符集是默认的latin1,我们一直以为都是utf8,造成这样的误解,是因为在内网环境中,我们是源码编译的M ...

  6. 数据库(概念、语法、DBMS、SQL语言:创建数据库、表格,添加、修改、删除数据记录)

    关系型数据库:以表作为实体,以主键和外键关系作为联系的一种数据结构. 主键:在关系型数据库中,用一个唯一的标识符来标志每一行,这个标识符就是主键.主键有两个特点:非空和不能重复. 外键:在关系型数据库 ...

  7. CTF---安全杂项入门第三题 这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?

    这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?分值:30 来源: 2014sctf 难度:难 参与人数:3918人 Get Flag:384人 答题人数 ...

  8. FDMEMTABLE将修改后的数据序列为JSON

    FDMEMTABLE将修改后的数据序列为JSON procedure TForm1.Button3Click(Sender: TObject); var memtable: TFDMemTable; ...

  9. JMeter之修改Sampler响应数据的编码格式

    转 JMeter之修改Sampler响应数据的编码格式 问题:JMeter的sampler响应数据中有中文时,会解析出错. JMeter的Sampler中的响应数据默认的编码格式是:ISO-8859- ...

随机推荐

  1. 如何查询Oracle性能监控

    1.监控等待事件select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,count(*)fr ...

  2. poj2583---Series Determination

    #include <stdio.h> #include <stdlib.h> int main() { int x,y,z,a,b,c; while(scanf("% ...

  3. dg rman

  4. html---textarea初始化时就有个table空格以及tab键操作无效

    1 初始化时就有一个tab空格 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRnJlZUFwZQ==/font/5a6L5L2T/fontsize/400 ...

  5. Eclipse debug ‘Source not found’

    用Eclispe进行Debug时一直被一个问题所困扰:Source not found. 问题产生的原因是调试进入了一个没有源代码的jar包里. 简短说明: Edit Source Lookup Pa ...

  6. Myeclipse2014 SVN安装方法以及项目上传到svn服务器

    1. 打开 Myeclipse 工具栏下的Help下的Install from Site 2.打开后弹出窗口, 并点击Add标签,如下图: 3.现在是最重要的一步,填写相关信息. 在对话框Name输入 ...

  7. JDK源码学习--String篇(二) 关于String采用final修饰的思考

    JDK源码学习String篇中,有一处错误,String类用final[不能被改变的]修饰,而我却写成静态的,感谢CTO-淼淼的指正. 风一样的码农提出的String为何采用final的设计,阅读JD ...

  8. xhprof

    #官网下载 http://pecl.php.net/package/xhprof tar zxf xhprof-0.9.2.tgz   cd xhprof-0.9.2/extension/   sud ...

  9. VirtualBox扩展磁盘空间

    进入VB的安装目录, 输入命令 VBoxManage list hdds获得当前所有虚拟机的uuid 选择需要扩展的磁盘, 输入 VBoxManage modifyhd uuid –resize 81 ...

  10. ZOJ 3209 Treasure Map 精确覆盖

    题目链接 精确覆盖的模板题, 把每一个格子当成一列就可以. S忘记初始化TLE N次, 哭晕在厕所...... #include<bits/stdc++.h> using namespac ...