變化數(shù)據(jù)捕獲概覽
當(dāng)CDC可用在數(shù)據(jù)庫(kù)級(jí)別時(shí),下一步是使CDC可用于一個(gè)需要捕獲變化的特定表。CDC特性集合了從數(shù)據(jù)庫(kù)事務(wù)日志文件獲得的變化數(shù)據(jù),并將變化信息插入到一個(gè)關(guān)聯(lián)的變化表中,它是在CDC建立和配置過(guò)程中創(chuàng)建的。在源表和變化捕獲表之間有一個(gè)一對(duì)一的關(guān)系。你對(duì)一個(gè)單獨(dú)的源表最多可以有兩個(gè)變化表。因?yàn)镃DC特性需要不斷地讀取事務(wù)日志文件,所以顯而易見(jiàn),CDC運(yùn)行SQL Server代理應(yīng)該一直執(zhí)行的。
怎樣使一個(gè)SQL Server 2008數(shù)據(jù)庫(kù)可以使用CDC
1. 使用SQL Server管理套件連接到SQL Server 2008實(shí)例。
2. 在查詢窗口中,輸入下面的TSQL查詢來(lái)創(chuàng)建一個(gè)ChangeDataCapture 數(shù)據(jù)庫(kù)。
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. 當(dāng)這個(gè)數(shù)據(jù)庫(kù)成功創(chuàng)建之后,你需要使這個(gè)數(shù)據(jù)庫(kù)可以使用數(shù)據(jù)捕獲特性,這可以通過(guò)執(zhí)行下面的TSQL查詢來(lái)實(shí)現(xiàn):
Use ChangeDataCapture Go EXEC sys.sp_cdc_enable_db Go |
4. 執(zhí)行下面的查詢來(lái)檢查這個(gè)數(shù)據(jù)庫(kù)是否可用于CDC:
Select [name] as DBName, is_cdc_enabled from sys.databases |
5. 當(dāng)數(shù)據(jù)庫(kù)可用于CDC時(shí),你就可以看到在ChangeDataCapture數(shù)據(jù)庫(kù)中創(chuàng)建的新cdc schema、cdc用戶、新的元數(shù)據(jù)表和其它系統(tǒng)對(duì)象。當(dāng)使得CDC可用在一個(gè)數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)管理員要時(shí)刻牢記的最重要的事情是確保這個(gè)數(shù)據(jù)庫(kù)在配置CDC之前沒(méi)有cdc schema或cdc用戶。如果在這個(gè)數(shù)據(jù)庫(kù)中有cdc schema或cdc用戶,那么CDC的配置將會(huì)失敗,所以數(shù)據(jù)庫(kù)管理員需要在配置CDC之前從數(shù)據(jù)庫(kù)中刪除或重命名之前存在的cdc schema或用戶。
怎樣為一個(gè)SQL Server 2008數(shù)據(jù)庫(kù)表配置CDC
1. 現(xiàn)在讓我們執(zhí)行下面的TSQL查詢?cè)贑hangeDataCapture數(shù)據(jù)庫(kù)中創(chuàng)建Currency表:
Use ChangeDataCapture Go Create table Currency ( CurrencyKey Int Identity(1,1) Primary Key NOT NULL, CurrencyAlternateKey varchar(5) ) |
2. 當(dāng)Currency表成功創(chuàng)建之后,你需要確保SQL Server 代理服務(wù)正在運(yùn)行。為了使CDC成功,SQL Server 代理應(yīng)該運(yùn)行。
3. 通過(guò)執(zhí)行下面提到的TSQL查詢使CDC可用于表Currency。
Use ChangeDataCapture Go EXEC sp_cdc_enable_table 'dbo', 'Currency', @role_name = NULL, @supports_net_changes =1 Go |
4. 執(zhí)行下面的查詢來(lái)檢查這個(gè)表是否可以使用CDC:
Use ChangeDataCapture Go Select [name], is_tracked_by_cdc from sys.tables GO |
is_tracked_by_cdc字段值為1代表CDC可用于這個(gè)表,而值為0代表CDC不可用。
5. 當(dāng)你使CDC可用于Currency表后,另一個(gè)表被創(chuàng)建以保存變化數(shù)據(jù)和關(guān)于源表中變化的信息。新創(chuàng)建的表名稱為cdc.dbo_Currency_CT,如下圖所示。
6. 下一步是修改Currency表來(lái)添加CurrencyName字段:
Use ChangeDataCapture Go Alter table Currency add CurrencyName varchar(25) Go |
7. 可以通過(guò)執(zhí)行下面的TSQL查詢來(lái)查看Currency表所發(fā)生的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 |
總結(jié)
變化數(shù)據(jù)捕獲特性幫助數(shù)據(jù)庫(kù)管理員使得可以在一個(gè)數(shù)據(jù)庫(kù)表上使用CDC并跟蹤一個(gè)特定用戶表上所有數(shù)據(jù)庫(kù)定義語(yǔ)言的改變。