變化數據捕獲概覽
當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并跟蹤一個特定用戶表上所有數據庫定義語言的改變。