扫一扫
关注微信公众号

使用SQL Server 2008 CDC捕获DDL改变
2009-05-21   

SQL Server 2008推出了一个新的特性叫做变化数据捕获(CDC)。CDC捕获在一个SQL Server表上的DDL和DML活动,并将变化放置在一个单独的SQL Server关系表中。在这篇文章中,我们将看到CDC怎样帮助数据库管理员跟踪用于SQL Server 表的DML变化。CDC特性默认情况下是在数据库级别关闭的。Sysadmin服务器角色的一个成员必须使一个数据库可用于CDC。当这个数据库可用于CDC时,任何dbo固定数据库角色的成员都可以使数据库中的表用于变化数据捕获。

  变化数据捕获概览

  当CDC可用在数据库级别时,下一步是使CDC可用于一个需要捕获变化的特定表。CDC特性集合了从数据库事务日志文件获得的变化数据,并将变化信息插入到一个关联的变化表中,它是在CDC建立和配置过程中创建的。在源表和变化捕获表之间有一个一对一的关系。你对一个单独的源表最多可以有两个变化表。因为CDC特性需要不断地读取事务日志文件,所以显而易见,CDC运行SQL Server代理应该一直执行的。

  怎样使一个SQL Server 2008数据库可以使用CDC

  1. 使用SQL Server管理套件连接到SQL Server 2008实例。

  2. 在查询窗口中,输入下面的TSQL查询来创建一个ChangeDataCapture 数据库。

Use Master
Go
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'ChangeDataCapture')
DROP DATABASE ChangeDataCapture
GO
USE [master]
GO
Create Database ChangeDataCapture
Go

  3. 当这个数据库成功创建之后,你需要使这个数据库可以使用数据捕获特性,这可以通过执行下面的TSQL查询来实现:

Use ChangeDataCapture
Go
EXEC sys.sp_cdc_enable_db
Go

SQL SERVER

  4. 执行下面的查询来检查这个数据库是否可用于CDC:

Select [name] as DBName, is_cdc_enabled from sys.databases

is_cdc_enabled 字段的值为1代表这个数据库可用于CDC,而0意味着CDC不可用。

SQL SERVER

  5. 当数据库可用于CDC时,你就可以看到在ChangeDataCapture数据库中创建的新cdc schema、cdc用户、新的元数据表和其它系统对象。当使得CDC可用在一个数据库时,数据库管理员要时刻牢记的最重要的事情是确保这个数据库在配置CDC之前没有cdc schema或cdc用户。如果在这个数据库中有cdc schema或cdc用户,那么CDC的配置将会失败,所以数据库管理员需要在配置CDC之前从数据库中删除或重命名之前存在的cdc schema或用户。

SQL SERVER

  怎样为一个SQL Server 2008数据库表配置CDC

  1. 现在让我们执行下面的TSQL查询在ChangeDataCapture数据库中创建Currency表:  

Use ChangeDataCapture
Go
Create table Currency
(
CurrencyKey Int Identity(1,1) Primary Key NOT NULL,
CurrencyAlternateKey varchar(5)
)

SQL SERVER

2. 当Currency表成功创建之后,你需要确保SQL Server 代理服务正在运行。为了使CDC成功,SQL Server 代理应该运行。

  3. 通过执行下面提到的TSQL查询使CDC可用于表Currency。

Use ChangeDataCapture
Go
EXEC sp_cdc_enable_table 'dbo', 'Currency', @role_name = NULL, @supports_net_changes =1
Go

SQL SERVER

  4. 执行下面的查询来检查这个表是否可以使用CDC:

Use ChangeDataCapture
Go
Select [name], is_tracked_by_cdc from sys.tables
GO

  is_tracked_by_cdc字段值为1代表CDC可用于这个表,而值为0代表CDC不可用。 

SQL SERVER

  5. 当你使CDC可用于Currency表后,另一个表被创建以保存变化数据和关于源表中变化的信息。新创建的表名称为cdc.dbo_Currency_CT,如下图所示。

  6. 下一步是修改Currency表来添加CurrencyName字段: 

Use ChangeDataCapture
Go
Alter table Currency add CurrencyName varchar(25)
Go

  7. 可以通过执行下面的TSQL查询来查看Currency表所发生的DDL改变:

Use ChangeDataCapture
Go
Select OBJECT_NAME(Source_Object_ID) As [Table Name], 
            OBJECT_NAME(Object_ID) As [CDC Table Name],
                DDL_Command As [DDL Command],
            DDL_LSN As [Log Sequence Number],
            DDL_Time As [DateModified]
From CDC.ddl_history
Go

SQL SERVER

  总结

  变化数据捕获特性帮助数据库管理员使得可以在一个数据库表上使用CDC并跟踪一个特定用户表上所有数据库定义语言的改变。

热词搜索:

上一篇:SQL Server 2008的透明数据加密
下一篇:Wi-Fi游走于WiMAX和3G之间吗?

分享到: 收藏