微软介绍了SQL Server 2008的一项新功能:捕获数据变化。捕获数据变化功能可以方便地监控到表的变化。本文的第一、二部分介绍了怎样在数据库及表上开启捕获数据变化功能。下面将介绍的是,如果表的结构发生变化,捕获数据变化功能将有什么样的表现。
注:本文章基于SQL Server 200811月CTP。
第一步
用下面的代码创建一个名为“CDCDB”的数据库。
USE[master] GO /***Object:Database[CDCDB]ScriptDate:01/07/200818:46:15***/ IFEXISTS(SELECTnameFROMsys.databasesWHEREname=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[PRIMARY] 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',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
|
执行结果
ID,Name,Address,Salary,Bonus home\sql2008(HOME\MAK):(0row(s)affected) home\sql2008(HOME\MAK):(1row(s)affected) home\sql2008(HOME\MAK):(1row(s)affected) home\sql2008(HOME\MAK):(1row(s)affected) home\sql2008(HOME\MAK):(1row(s)affected) home\sql2008(HOME\MAK):(1row(s)affected) ID,Name,Address,Salary,Bonus 1,DancingDoll,221,WestBroadst, Greenbay,Wisconsin,60000.0000,1000.0000 2,RainbowDance,21,Eastst, Denville,NewJersey,68000.0000,1300.0000 3,WaterDance,1,SouthBroadst, Quincy,Massachusetts,76000.0000,1600.0000 4,MickeyMouse,5,Main, Greenbay,Wisconsin,120000.0000,12000.0000 5,Ratyear,7,Newroad, Danbury,Connecticut,45000.0000,1600.0000 home\sql2008(HOME\MAK):(5row(s)affected) |
第七步
更新及删除一些数据,如下:
use[CDCDB] go UpdateEmployeesetname='test'whereid=5 go DeleteEmployeewhereidin(3,4) Go |
第八步
通过以下查询语句查看DDL和DML的变化。[参考图 Fig 1.0 and Fig 1.1]
use[CDCDB] go select*fromcdc.ddl_history go |
执行结果
source_object_id,object_id,required_column_update,ddl_command,ddl_lsn,ddl_time
565577053,597577167,0,AlterTableEmployeeaddAddressvarchar(500)
,0x000000360000006B0022,2008-02-0915:03:00.000
565577053,597577167,0,AlterTableEmployeeaddSalarymoney
,0x000000360000007A0018,2008-02-0915:03:00.000
565577053,597577167,0,AlterTableEmployeeaddBonusmoney
,0x00000036000000800018,2008-02-0915:03:00.000
home\sql2008(HOME\MAK):(3row(s)affected)
图Fig 1.0
use[CDCDB] go Selectcase__$operationwhen1then'Deleting' when2then'Inserting' when3then'ValuebeforeUpdate' 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 home\sql2008(HOME\MAK):(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
结论
为了更好的监控表结构的变化,我们可以在适当的时候关闭或开启数据库上的捕获数据变化功能。
分享到:
相关推荐
此外,它还支持SQL Server 2008引入的新特性,例如透明数据加密(TDE)、行级权限和Policy-Based Management。 3. **SQL Server JDBC Driver 2.0**: 这个版本是针对SQL Server 2005设计的,但同样兼容2008版本。...
### CDC操作Sqlserver2008 #### 概述 变更数据捕获(Change Data Capture,简称CDC)是SQL Server的一项重要功能,主要用于记录数据库表中的数据更改历史。这一功能在进行数据分析、日志记录、数据复制等场景下...
通过SQLServer 2008 JDBC驱动包,Java开发者可以充分利用SQL Server 2008的强大功能,创建健壮的、可扩展的数据库应用。同时,驱动还支持一些高级特性,如批处理、游标、存储过程调用、事务隔离级别设置等,以满足...
SQL Server 2008作为微软数据平台的重要里程碑,引入了许多新功能,旨在提高数据管理效率、增强数据安全性和提升用户体验。以下是对这些新功能的知识点详细介绍: 1. 新的数据类型 SQL Server 2008引入了新的数据...
SQL Server 2008提供了新的备份压缩功能,可以在备份过程中自动进行数据压缩,从而减少备份文件的大小,节省存储空间。同时,恢复过程也得到了优化,支持直接从备份文件中读取压缩数据,提高了恢复速度。 3. **...
本课程主要聚焦于SQL Server 2008的数据应用开发,旨在帮助开发者深入理解其新功能并应用于实际项目中。 一、Data Compression(数据压缩) SQL Server 2008引入了数据压缩功能,分为页压缩(Page Compression)和...
数据更改捕获功能自动记录表中数据的变化历史,便于审计、数据恢复和数据同步,提高了数据安全性和业务连续性。 ### 字符集对齐与Windows一致 字符集对齐与Windows操作系统保持一致,确保了跨平台数据处理的一致性...
SQL Server 2008作为微软推出的重要数据库版本,引入了许多新特性和改进,如数据类型扩展、透明数据加密(TDE)、资源Governance、列存储索引等,极大地提升了数据库的性能、安全性和可管理性。其中,T-SQL查询在...
总的来说,这个"sqlserver2008、2005 jar包"是Java开发者连接SQL Server 2005和2008数据库必不可少的组件,它提供了安全、高效的数据交互方式,让Java应用能够顺利地存取和处理SQL Server中的数据。
SQL Server 2008引入了变更数据捕获(CDC)功能,用于跟踪数据库中的更改,而不会影响现有应用程序或性能。这对于审计和数据仓库应用非常有用。 七、FILESTREAM支持 FILESTREAM特性使得BLOB数据可以直接存储在文件...
SQL Server 2008作为微软的一款旗舰级数据库管理系统,引入了许多增强功能,提升了开发人员的效率和数据库的性能。 一、表值参数(Table-Valued Parameters) SQL Server 2008引入了表值参数,它允许将一组数据作为...
总结来说,SQL Server 2008 Integration Services 是一个功能强大的ETL工具,其丰富的组件和灵活的设计使得数据处理变得简单高效,对于任何需要处理大量数据的组织来说,都是一个不可或缺的工具。
《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》这本书是针对SQL Server 2008数据库管理系统,特别关注其Transact-SQL(T-SQL)语言的全面指南,非常适合初学者深入理解T-SQL的基础知识。T-SQL是SQL Server的...
SQL Server 2008作为微软的一款强大数据库管理系统,提供了许多功能来提升数据库的管理和维护效率,确保数据的安全性和可靠性。 一、数据文件透明加密(TDE) SQL Server 2008引入了透明数据加密(Transparent ...
- **错误处理**:讲述如何使用 TRY...CATCH 结构来捕获和处理 SQL Server 2008 中可能出现的运行时错误。 - **并发控制**:解释 SQL Server 2008 中的锁定机制、隔离级别等并发控制手段,确保数据的一致性和完整性。...
SQL Server 2008还包括其他特性,如数据变化跟踪、同步编程模型、冲突检测、FILESTREAM数据类型、集成全文本搜索、稀疏列、巨大用户定义类型、LOCATION和SPATIAL数据类型、集成Virtual Earth、平行分区表查询优化、...
数据收集器是SQL Server 2008中的一个新功能,用于自动收集和存储系统性能数据。它可以根据预定义或自定义的数据收集方案,定期收集并保存性能数据,为后续的性能分析提供了丰富的数据支持。 ### 四、性能问题诊断...