变化数据捕获概览
当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 |
4. 执行下面的查询来检查这个数据库是否可用于CDC:
Select [name] as DBName, is_cdc_enabled from sys.databases |
5. 当数据库可用于CDC时,你就可以看到在ChangeDataCapture数据库中创建的新cdc schema、cdc用户、新的元数据表和其它系统对象。当使得CDC可用在一个数据库时,数据库管理员要时刻牢记的最重要的事情是确保这个数据库在配置CDC之前没有cdc schema或cdc用户。如果在这个数据库中有cdc schema或cdc用户,那么CDC的配置将会失败,所以数据库管理员需要在配置CDC之前从数据库中删除或重命名之前存在的cdc schema或用户。
怎样为一个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) ) |
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 |
4. 执行下面的查询来检查这个表是否可以使用CDC:
Use ChangeDataCapture Go Select [name], is_tracked_by_cdc from sys.tables GO |
is_tracked_by_cdc字段值为1代表CDC可用于这个表,而值为0代表CDC不可用。
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 |
总结
变化数据捕获特性帮助数据库管理员使得可以在一个数据库表上使用CDC并跟踪一个特定用户表上所有数据库定义语言的改变。