快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门24小时0524:SQL Server 2008新功能 捕获数据变化(3)(1)SQL Server 20



微软先容了SQL Server 2008的一项新功能:捕获数据变更。捕获数据变更功能可以方便地监控到表的变更。本文的第一、二部分先容了如何在数据库及表上开启捕获数据变更功能。下面将先容的是,假如表的布局发生变更,捕获数据变更功能将有什么样的体现。

注:本文章基于SQL Server 200811月CTP。

第一步

用下面的代码创建一个名为“CDCDB”的数据库。

USE[master]

GO

/奸淫Object:Database[CDCDB]ScriptDate:01/07/200818:46:15奸淫/

IFEXISTS(SELECTnameFROMsys.databasesWHERE澳门24小时0524name=N'CDCDB')

DROPDATABASE[CDCDB]

GO

USE[master]

GO

/奸淫Object:Database[CDCDB]ScriptDate:01/07/200818:46:33奸淫/

CREATEDATABASE[CDCDB]

GO

第二步

创建一个名为Employee的表,代码如:

use[CDCDB]

go

/奸淫Object:Table[dbo].[Employee]ScriptDate:01/07/200818:52:14奸淫/

IFEXISTS(SELECT*FROMsys.objects

WHEREobject_id=OBJECT_ID(N'[dbo].[Employee]')

ANDtypein(N'U'))

DROPTABLE[dbo].[Employee]

GO

use[CDCDB]

go

/奸淫Object:Table[dbo].[Employee]ScriptDate:01/07/200818:52:26奸淫/

SETANSI_NULLSON

GO

SETQUOTED_IDENTIFIERON

GO

SETANSI_PADDINGON

GO

CREATETABLE[dbo].[Employee](

[ID][int]NOTNULL,

[Name][varchar](100)NULL,

CONSTRAINT[Employee_PK]PRIMARYKEYCLUSTERED

(

[ID]ASC

)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,

IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,

ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]

)ON[P澳门24小时0524RIMARY]

GO

SETANSI_PADDINGOFF

GO

第三步

在数据库“CDCDB”上开启捕获数据变更功能,如下:

USE[CDCDB]

GO

EXECsys.sp_cdc_enable_db_change_data_capture

GO

第四步

在表“Employee”上开启捕获数据变更功能,如下:

use[CDCDB]

go

GO

EXECsys.sp_cdc_enable_table_change_data_capture

@source_schema='dbo',

@source_name='Employee',

@role_name='cdc_Employee'

GO

第五步

开启了捕获数据变更功能后,在表“Employee”上增添几列,如下:

use[CDCDB]

go

GO

AlterTableEmployeeaddAddressvarchar(500)

GO

AlterTableEmployeeaddSalarymoney

GO

AlterTableEmployeeaddBonusmoney

GO

第六步

向表中插入一些数据。

use[CDCDB]

go

select*fromEmployee

go

InsertintoEmployeevalues(1,'DancingDoll','221,WestBroadst,

Greenbay,Wisconsin'澳门24小时0524;,60000,1000)

InsertintoEmployeevalues(2,'RainbowDance','21,Eastst,

Denville,NewJersey',68000,1300)

InsertintoEmployeevalues(3,'WaterDance','1,SouthBroadst,

Quincy,Massachusetts',76000,1600)

InsertintoEmployeevalues(4,'MickeyMouse','5,Main,

Greenbay,Wisconsin',120000,12000)

InsertintoEmployeevalues(5,'Ratyear','7,Newroad,

Danbury,Connecticut',45000,1600)

go

select*fromEmployee

go

图Fig 1.0

use[CDCDB]

go

Selectcase澳门24小时0524__$operationwhen1then'Deleting'

when2then'Inserting'

when3then'Val澳门24小时0524uebeforeUpdate'

when4then'ValueafterUpdate'

when5then'Merge'end,__$update_mask,ID,Name

fromcdc.dbo_Employee_CT

go

履行结果

,__$update_mask,ID,Name

Inserting,0x03,1,DancingDoll

Inserting,0x03,2,RainbowDance

Inserting,0x03,3,WaterDance

Inserting,0x03,4,MickeyMouse

Inserting,0x03,5,Ratyear

ValuebeforeUpdate,0x02,5,Ratyear

ValueafterUpdate,0x02,5,test

Deleting,0x03,3,WaterDance

Deleting,0x03,4,MickeyMouse

homesql2008(HOMEMAK):(9row(s)affected)

图Fig 1.1

从以上的结果中,我们可以看出只有ID和Name这2列被监控到了,开启数据捕获功能之后增添的所有列都内有被监控到。

第九步

现在我们对所有列进行数据捕获。先关闭当前的数据捕获功能,再打开数据捕获功能就可以了。应用下面的语句关闭当前功能:

use[CDCDB]

go

EXECsys.sp_cdc_disable_table_change_data_capture

@source_schema='dbo',

@source_name='Employee',

@capture_instance='dbo_Employee'

Go

第十步

应用如下T-SQL语句在表“Employee”上开启捕获数据变更功能。此次我们想查看到哪些列被监控了。

use[CDCDB]

go

EXECsys.sp_cdc_enable_table_change_data_capture

@source_schema='dbo',

@source_name='Employee',

@role_name='cdc_Employee',

@captured_column_list=N'ID,Name,Salary,Bonus'

GO

查询捕获数据变更模式下Empolyee表的变更,如下:

use[CDCDB]

go

select*fromcdc.dbo_Employee_CT

go

履行结果显示,Empolyee表的所有列都被监控了。(参考图 Fig 1.2)

图 Fig 1.2

结论

为了更好的监控表布局的变更,我们可以在适当的时刻关闭或开启数据库上的捕获数据变更功能。

您可能还会对下面的文章感兴趣: