处理SSIS2008中的变更数据捕获计算机等级考试
文章作者 100test 发表时间 2009:06:17 19:05:20
来源 100Test.Com百考试题网
编辑特别推荐:
全国计算机等级考试(等考)指定教材
全国计算机等级考试学习视频
全国计算机等级考试网上辅导招生
全国计算机等级考试时间及科目预告
百考试题教育全国计算机等级考试在线测试平台
全国计算机等级考试资料下载
全国计算机等级考试论坛
计算机等级考试四级应用题解析汇总
2009年下半年全国计算机三级考试报名时间从6月1日起已经开始报名。详情点击:2009年下半年全国计算机等级考试各地报名点汇总。2009年下半年全国计算机三级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库。
变更数据捕获(CDC)是SQL Server 2008企业版本中的一个新功能,可以用它来跟踪对表的所有插入、更新和删除操作。一个SQL Server集成服务(SSIS)程序包是配置带有DCD数据的审计表的最佳选择。让我们先讨论一个这样的情形然后介绍相应的解决方法。
假设我们想把所有对我们客户表的变更存储到customer_audit表中。我们将写一个SSIS程序包来查询CDC数据然后把它复制到customer_audit表中。我们选择按照需求或者按照安排(例如,一个SQL代理任务)运行SSIS程序包。每次我们运行SSIS程序包,我们都想获得上次我们运行程序包后的所作的任何变更。
客户表
我们使用下面的客户表:
create table dbo.customer (
customer_id int identity primary key not null
, name nvarchar(50) not null
, sales_rep nvarchar(50) not null
, region nvarchar(50) not null
, credit_limit int not null
)
我们使用下面的customer_audit表来存储对客户表的变更:
create table dbo.customer_audit (
customer_audit_id int identity primary key not null
, customer_id int not null
, name nvarchar(50) not null
, sales_rep nvarchar(50) not null
, region nvarchar(50) not null
, credit_limit int not null
, effective_date datetime not null
, __$start_lsn binary(10) not null
, __$seqval binary(10) not null
, __$operation int not null
, __$0update_mask varbinary(128) not null
)
customer_audit表包括客户表的每个字段,也包括下面由CDC提供的额外字段:
effective_date将由cdc.lsn_time_mapping表(稍后介绍)配置。它是更改源表的事务的日期和时间。
__$start_lsn是来自事务日志的日志序列编号。
__$seqval提供一个事务内所有更改的一个顺序。
__$operation具有下面其中一个值:1=0delete,2=insert,3=0update(在值之前),4=0update(在值之后)。
__$0update_mask是一个位掩码,这里每个更改的字段都设置成1。
启用CDC
CDC需要在数据库级别以及你想跟踪变更的表上启用。CDC提供为每张表一个存储过程。下面是为我们的多个数据库和客户表启用CDC的示例脚本:
use mssqltips
go
exec sys.sp_cdc_enable_db
exec sys.sp_cdc_enable_table
@source_schema = N dbo
,@source_name = N customer
,@role_name = N cdc_admin
,@capture_instance = N customer_all
,@supports_net_changes = 1
,@index_name = NULL
,@captured_column_list = NULL
,@filegroup_name = NULL
上述脚本的要点是:
存储过程sys.sp_cdc_enable_db为当前的数据库启用CDC。
存储过程sys.sp_cdc_enable_table为一张表启用CDC。
为role_name参数创建一个数据库角色.这个角色的成员调用CDC数据。
capture_instance参数用来确定CDC数据.你的每张表可以有两个参数。
设置supports_net_changes成1来获得单行中的累积变更。
如果该表没有主码,那么你必须指定一个唯一索引。
你可以指定字段列表来跟踪或者NULL来跟踪所有的字段。
你可以为CDC文件指定一个文件组或者NULL来使用默认的设置。
要得到更详细的信息,您可以参阅联机帮助,找到sys.sp_cdc_enable_db和sys.sp_cdc_enable_table存储过程。