`
raozhiyong11
  • 浏览: 138525 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

SQL Server2008新功能 捕获数据变化

阅读更多
微软介绍了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

  图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

  图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

  图 Fig 1.2

  结论

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

分享到:
评论

相关推荐

    sqlserver2008 jar驱动(Microsoft SQL Server JDBC Driver).rar

    此外,它还支持SQL Server 2008引入的新特性,例如透明数据加密(TDE)、行级权限和Policy-Based Management。 3. **SQL Server JDBC Driver 2.0**: 这个版本是针对SQL Server 2005设计的,但同样兼容2008版本。...

    CDC操作Sqlserver2008

    ### CDC操作Sqlserver2008 #### 概述 变更数据捕获(Change Data Capture,简称CDC)是SQL Server的一项重要功能,主要用于记录数据库表中的数据更改历史。这一功能在进行数据分析、日志记录、数据复制等场景下...

    sqlserver 2008 jdbc 驱动包

    通过SQLServer 2008 JDBC驱动包,Java开发者可以充分利用SQL Server 2008的强大功能,创建健壮的、可扩展的数据库应用。同时,驱动还支持一些高级特性,如批处理、游标、存储过程调用、事务隔离级别设置等,以满足...

    SQL Server2008十大新功能.pdf

    SQL Server 2008作为微软数据平台的重要里程碑,引入了许多新功能,旨在提高数据管理效率、增强数据安全性和提升用户体验。以下是对这些新功能的知识点详细介绍: 1. 新的数据类型 SQL Server 2008引入了新的数据...

    SQL Server 2008开发新特性系列课程(3):SQL Server 2008数据管理概述

    SQL Server 2008提供了新的备份压缩功能,可以在备份过程中自动进行数据压缩,从而减少备份文件的大小,节省存储空间。同时,恢复过程也得到了优化,支持直接从备份文件中读取压缩数据,提高了恢复速度。 3. **...

    SQL Server 2008开发新特性系列课程(8):SQL Server 2008数据应用开发概述

    本课程主要聚焦于SQL Server 2008的数据应用开发,旨在帮助开发者深入理解其新功能并应用于实际项目中。 一、Data Compression(数据压缩) SQL Server 2008引入了数据压缩功能,分为页压缩(Page Compression)和...

    SQL SERVER 2008 新特性 英文版

    数据更改捕获功能自动记录表中数据的变化历史,便于审计、数据恢复和数据同步,提高了数据安全性和业务连续性。 ### 字符集对齐与Windows一致 字符集对齐与Windows操作系统保持一致,确保了跨平台数据处理的一致性...

    Microsoft SQL Server 2008技术内幕

    SQL Server 2008作为微软推出的重要数据库版本,引入了许多新特性和改进,如数据类型扩展、透明数据加密(TDE)、资源Governance、列存储索引等,极大地提升了数据库的性能、安全性和可管理性。其中,T-SQL查询在...

    sqlserver2008、2005 jar包

    总的来说,这个"sqlserver2008、2005 jar包"是Java开发者连接SQL Server 2005和2008数据库必不可少的组件,它提供了安全、高效的数据交互方式,让Java应用能够顺利地存取和处理SQL Server中的数据。

    SQL Server 2008开发新特性系列课程(5):SQL Server 2008的性能管理

    SQL Server 2008引入了变更数据捕获(CDC)功能,用于跟踪数据库中的更改,而不会影响现有应用程序或性能。这对于审计和数据仓库应用非常有用。 七、FILESTREAM支持 FILESTREAM特性使得BLOB数据可以直接存储在文件...

    SQL Server 2008开发新特性系列课程(9):SQL Server 2008的T-SQL新特性

    SQL Server 2008作为微软的一款旗舰级数据库管理系统,引入了许多增强功能,提升了开发人员的效率和数据库的性能。 一、表值参数(Table-Valued Parameters) SQL Server 2008引入了表值参数,它允许将一组数据作为...

    SQL Server 2008 Integration Services 概述白皮书

    总结来说,SQL Server 2008 Integration Services 是一个功能强大的ETL工具,其丰富的组件和灵活的设计使得数据处理变得简单高效,对于任何需要处理大量数据的组织来说,都是一个不可或缺的工具。

    microsoft sql server 2008技术内幕 t-sql语言基础

    《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》这本书是针对SQL Server 2008数据库管理系统,特别关注其Transact-SQL(T-SQL)语言的全面指南,非常适合初学者深入理解T-SQL的基础知识。T-SQL是SQL Server的...

    SQL Server 2008开发新特性系列课程(4):SQL Server可管理性

    SQL Server 2008作为微软的一款强大数据库管理系统,提供了许多功能来提升数据库的管理和维护效率,确保数据的安全性和可靠性。 一、数据文件透明加密(TDE) SQL Server 2008引入了透明数据加密(Transparent ...

    sql server 2008英文版入门教程

    - **错误处理**:讲述如何使用 TRY...CATCH 结构来捕获和处理 SQL Server 2008 中可能出现的运行时错误。 - **并发控制**:解释 SQL Server 2008 中的锁定机制、隔离级别等并发控制手段,确保数据的一致性和完整性。...

    SQLServer2008新特性(QuickView)

    SQL Server 2008还包括其他特性,如数据变化跟踪、同步编程模型、冲突检测、FILESTREAM数据类型、集成全文本搜索、稀疏列、巨大用户定义类型、LOCATION和SPATIAL数据类型、集成Virtual Earth、平行分区表查询优化、...

    Troubleshooting Performance Problems in SQL Server 2008

    数据收集器是SQL Server 2008中的一个新功能,用于自动收集和存储系统性能数据。它可以根据预定义或自定义的数据收集方案,定期收集并保存性能数据,为后续的性能分析提供了丰富的数据支持。 ### 四、性能问题诊断...

Global site tag (gtag.js) - Google Analytics