知方可补不足~用CDC功能来对数据库变更进行捕捉

回到目录

如果我们希望监视一个数据表的变化,在sql2008之前的版本里,在数据库端可能想到的只有触发器,或者在程序端通过监视自己的insert,update,delete来实现相应的功能,这种实现无疑是让我们感到恐惧的,不够灵活的,而当进行sql2008后,这种情况得到了本质的改变,sql2008为我们提供了CDC功能,它可以实时对指定的数据表进行监控,当前它同时对产生SQL的一些负载。

CDC工作流程

CDC功能主要捕获SQLServer指定表的增删改操作,由于任何操作都会写日志(哪怕truncate),所以CDC的捕获来源于日志文件。日志文件 会把更改应用到数据文件中,同时也会标记符合要求的数据标记为需要添加跟踪的项。然后通过一些配套函数,最后写入到数据仓库中。

CDC实现步骤

第一步、对目标库显式启用CDC:

在当前库使用sys.sp_cdc_enable_db。返回0(成功)或1(失败)。注意,无法对系统数据库和分发数据库启用该功能。且执行者需要用sysadmin角色权限。

该存储过程的作用域是整个目标库。包含元数据、DDL触发器、cdc架构和cdc用户。

使用以下代码启用:

USE tableName

Go

EXECUTE sys.sp_cdc_enable_db

GO

当设置好数据库的CDC功能后,我们可以查看一下是否已经设置成功

SELECT  IS_CDC_ENABLED ,
        CASE WHEN IS_CDC_ENABLED = 0 THEN ‘CDC功能禁用‘
             ELSE ‘CDC功能启用‘
        END 描述
FROM    SYS.DATABASES
WHERE   NAME = ‘tableName‘
 

同时,数据库的用户将会多了一个CDC用户

第二步、对目标表启用CDC

使用db_owner角色的成员执行sys.sp_cdc_enable_table为每个需要跟踪的表创建捕获实例。然后通过sys.tables目录视图中的is_tracked_by_cdc列来判断是否创建成功。

默认情况下会对表的全部列做捕获。如果只需要对某些列做捕获,可以使用@captured_column_list参数指定这些列。

如果要把更改表放到文件组里的话,最好创建单独的文件组(最起码与源表独立)。

EXEC sys.sp_cdc_enable_table @source_schema = ‘DBO‘,
    @source_name = ‘WebManageUsers‘, @role_name = NULL 

注意,source_schema说的是数据库架构者,如dbo,cdc等

@source_name说的就是数据表名,@role_name是角色名,为null表示对角色没有特别限制

当设置完成数据表的CDC功能后,我们看一下是否已经配置成功,用下面代码

SELECT  NAME ,
        IS_TRACKED_BY_CDC ,
        CASE WHEN IS_TRACKED_BY_CDC = 0 THEN ‘CDC功能禁用‘
             ELSE ‘CDC功能启用‘
        END 描述
FROM    SYS.TABLES
WHERE   OBJECT_ID IN ( OBJECT_ID(‘DBO.WebManageUsers‘) )

当我们对WebManageUsers表修改数据后,可以在DBO_WebManageUsers_CT表中查到相应的结果,从表名中可以看到,CDC表的命名规则是架构名_表名_CT,呵呵。

SELECT * FROM cdc.DBO_WebManageUsers_CT

从结果中我们可以看到,CDC对于update操作是进行了修改前和修改后的两次捕捉,非常清晰!

好了,对于数据库的CDC功能今天就说到这里,希望对各位有所帮助!

回到目录

时间: 2024-08-11 13:33:57

知方可补不足~用CDC功能来对数据库变更进行捕捉的相关文章

知方可补不足~用xsl来修饰xml

概念相关 XSL是可扩展样式表语言的外语缩写,是一种用于以可读格式呈现 XML(标准通用标记语言的子集)数据的语言. 起始于 XSL 万维网联盟(W3C)开始发展 XSL 的原因是:存在着对于基于 XML 的样式表语言的需求. CSS = HTML 样式表 HTML 使用预先定义的标签,每个标签的意义很容易被理解.HTML 中的 <table> 标签定义表格 - 并且浏览器清楚如何显示它.向 HTML 元素添加样式是很容易的.通过 CSS,很容易告知浏览器用特定的字体或颜色显示一个元素. XS

知方可补不足~SQL数据库用户的克隆,SQL集群的用户同步问题

我们知道在为sqlserver建立功能数据库时,通过会为库再建立一个登陆名,而这个登陆名时,只用来管理这个数据库,这是安全的,正确的. 我们在建立一个用户时,通过会把指定的数据库添加到“用户映射”里,这时你的用户与数据库就有了关系,在使用用户登陆时,你只能看到与该用户有映射关系的数据库! 在SQL的集群环境下,假设你有两台服务器,它们之间建立集群,这时,你希望把A服务器的数据库用户同步到B服务器上,你当然可以手动在B上建立一个SQL用户,但这时,你也必须重新建立一个数据库的映射关系,因为这时用户

知方可补不足~利用LogParser将IIS日志插入到数据库

回到目录 LogParser是微软开发的一个日志分析工具,它是命令行格式的,我们通过这个工具,可以对日志文件进行操作,对于一个几百兆的log文件,使用记事本打开是件很残酷的事,所以,很多情况下,我们都会将大日志文件的内容插入到数据库中,这样有利于我们更好的去分析系统的日志. 脚本中心给它的定义 Log Parser 2.2 是一个功能强大的通用工具,它可对基于文本的数据(如日志文件.XML 文件和 CSV 文件)以及 Windows 操作系统上的重要数据源(如事件日志.注册表.文件系统和 Act

知方可补不足~sqlserver中使用ROW_NUMBER进行的快速分页

这个在SQL2005之后最见的一种分页方式,也是Linq默认生成的执行分页的方法(skip,take),当然在性能上小数量没有问题,在数据达到百万时会很慢,这是我们要清楚的,有时我们在LINQ环境下也需要分页写SQL,这时如何去分布就成为了一个很不好处 理的问题,所以大叔还是把准备的分页代码贡献一下 DECLARE @pageSize INT ; DECLARE @pageIndex INT ; SET @pageSize = 5 SET @pageIndex =2 ; --第二页,每页显示5条

知方可补不足~sqlserver中对xml类型字段的操作

回到目录 在sqlserver中有很多种数据类型,而XML数据类型是比较新奇怪的一种格式,我们平常接触的可能比较少,用的也少,而在某些场合,使用XML类型可能会使我们的开发变简单,下面就是一种情况: 表test有字段Menu,它保存的信息可能有两种方式,对标准menu,扩展menu,自定义Menu等,而这些方式所需要的键/值是不同的,有些同学会说使用Json串来存储,这当然是一种很不错的方式,但是数据库并没有这种类型,所以在查询,聚合时非常困难,这些我们想到了xml格式,它是SQLSERVER的

知方可补不足~SqlServer连接的复用MultipleActiveResultSets

回到目录 MultipleActiveResultSets可以使数据库连接复用,但当你上了moebius这种集群工具后,这个选项不能开启(默认是false),当你使用EF等ORM工具时,这个选项会默认的加上了,它是为了改进程序的性能,好处就是怕数据库的连接资源被耗尽了,使用方法很简单,只需要把它加到数据的连接字符串中即可. 例如:server=(local);Integrated Security = true;database=test;MultipleActiveResultSets=tru

知方可补不足~写了一个计算数据表占用存储空间的方法

回到目录 这个例子是关于计算数据表中所有字段在一定的数据量下占用存储空间的情况,使用了sys.tables,SYSTYPES和SYSCOLUMNS几张系统表,意思就是遍历所有数据表,然后对表的所以字段的length进行sum,就可以了,方法很容易理解,没什么技术含量,但即起到了重要的效果. DECLARE @tableName VARCHAR(50) DECLARE @totalRecord BIGINT SET @tableName = 'user_info' SET @totalRecord

知方可补不足~Sqlserver中的几把锁和.net中的事务级别

回到目录 当数据表被事务锁定后,我们再进行select查询时,需要为with(锁选项)来查询信息,如果不加,select将会被阻塞,直到锁被释放,下面介绍几种SQL的锁选项 SQL的几把锁 NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“脏数据”. HOLDLOCK(保持锁) 此选项被选中时,SQL Server

知方可补不足~Sqlserver中的几把锁和.net中的事务级别 回到目录

当数据表被事务锁定后,我们再进行select查询时,需要为with(锁选项)来查询信息,如果不加,select将会被阻塞,直到锁被释放,下面介绍几种SQL的锁选项 SQL的几把锁 NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据, 即所谓的“脏数据”. HOLDLOCK(保持锁) 此选项被选中时,SQL Server 会将此共享