SQL Server 2008的特性功能Change Data Capture(CDC)

本文详细介绍了SQL Server 2008的Change Data Capture (CDC)特性,该特性用于记录表的插入、更新和删除操作,特别适用于数据仓库的定期更新。通过启用CDC,可以更高效地跟踪和查询数据变动历史,减少对源表性能的影响。文中通过创建示例数据库和表,展示了如何启用CDC、如何查询变更数据以及各种相关函数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



Change Data Capture(CDC)是SQL Server 2008的一个新特性,它可以记录SQL Server表的插入、更新和删除等表修改活动。利用该新特性的一个很好的例子就是对某个数据仓库进行定期更新。我们以前需要通过使用数据装载程序(ETL)来更新数据仓库中所有在源系统中更改过的数据。在CDC这个新功能出现之前,我们可能只会选择查询源系统表里最新更新的DATETIME列来找出那些行曾经被改动过。虽然这个方法既简单又有效,但是它不能查找出那些行被物理删除了。另外,我们也无法用这个办法来确定被改动过的行改动的地方,我们只能读取被改动过的行的当前状态。而利用CDC,我们不仅可以轻松完成上述任务,还可以通过它来进行更复杂的对于数据修改历史的查询。


CDC的原理是每次对源表(Source Tables)执行insert、update、delete时,数据库事务日志会记录DML造成的变更数据,然后捕获处理过程将日志中源表的变更数据写入变更捕获表(Change Tables),最后ETL工具使用CDC查询函数将变更数据抽取到数据仓库。相比起在源表建立促发器,CDC对源表事务性能影响小,而且可以获取变更元数据。


--演示如下

create database sampledatabase
go

USE SampleDatabase
GO
create table [Orders]
( OrderId int identity(1,1) primary key,
  OrderDate datetime default getdate(),
  CustomerId varchar(50) not null
  )
  go
--在数据库级别启用CDC功能
EXEC sys.sp_cdc_enable_db
执行命令后即启用了数据库的CDC特性。启用CDC特性后系统会自动建立名为CDC的构架和用户,并建立了几个用于CDC的数据表。如果存在了非CDC功能创建的CDC用户、架构的话,则需要先删除该cdc命名的架构,才能开启。

SELECT   is_cdc_enabled,CASE WHEN is_cdc_enabled=0 THEN 'CDC功能禁用'ELSE 'CDC功能启用'END 描述
FROM  sys.databases WHERE   NAME='Sampledatabase'

--在需要做数据捕获的表格上面启用CDC功能
EXEC sys.sp_cdc_enable_table @source_schema='dbo',@source_name='Orders',@supports_net_changes=1,@role_name=null
--这里的supports_net_changes指的是是否支持所谓的净更改,即过滤掉重复的,默认情况下会对表的全部列做捕获。
由于sys.sp_cdc_enable_table 的参数:@captured_column_list = NULL,所以dbo.Department表的所有字段都进行监控了,如果你只关心某些字段,强烈建议在创建捕获的时候设置这个属性

--可以多个表格上启用CDC
源表dbo.Orders成功建立捕获实例后,系统自动建立了变更捕获表,变更捕获表的命名加了后缀_CT。

--关于sp_cdc_enable_table存储过程的具体用法和有关参数的含义,请参考 
http://msdn.microsoft.com/en-us/library/bb522475.aspx

--查看哪些表格上面启用了CDC功能
SELECT   name ,
        is_tracked_by_cdc  ,
        CASE  WHEN is_tracked_by_cdc  = 0 THEN 'CDC功能禁用'
             ELSE  'CDC功能启用'
 &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值