[SQL SERVER][CDC]SQL2008新特性-Change Data Capture#1簡介

[SQL SERVER]SQL2008新特性-Change Data Capture#簡介

由於之前小弟在Survey相關ETL軟體,當時覺得SSIS沒有相關CDC模組可供使用

後來查詢TechNet發現原來SSIS要搭配SQL2008才能實現CDC

就讓小弟簡單介紹SQL2008新特性-Change Data Capture

 

簡介

CDC(Change Data Capture)是SQL SERVER2008 Enterprise、Developer和Evaluation才有的特性,

由於之前小弟在玩ODI(Oracle Data Integrator),該ETL工具當初有個讓我印象深刻的功能,

就是這篇小弟將介紹的SQL2008新特性-CDC(Change Data Capture)。

該功能真是讓小弟感動,為什麼呢?因為我在也不用trigger這樣的效能殺手去記錄相關DML異動的資訊,

當然或許有人不用trigger來處理,可能會直接在Table新增timestamp欄位記錄…等。

當初小弟需求是希望SSIS2008(ETL軟體工具)以有封裝CDC模組功能,即不用設計DataFlow和DataControl相關細節,

只需簡單在SSIS2008上點點按鈕設定相關參數如同ODI那樣方便,

但人算不如天算(ETL部分希望微軟能在加強~~><)SQL又讓我落下男兒淚,夢想又破滅。

況且使用ETL工具,無法保證資料來源都是SQL2008(因為SSIS須配合SQL2008才能實現CDC),

假設今天來源資料庫有Oracle,DB2,Sysbase,Informaix,難道要使用者都要先了解每家資料庫的交易運作流程,

才能使用SSIS2008設計規劃CDC流程嗎(神的境界=.=)?

有點無法理解SSIS開發團隊的想法,anyway~~抱怨完了,回歸主題~~^^。

我大概說一下CDC的運作流程,當SQL2008開啟CDC功能後,同時Agent會自動建立兩個Job,

而這兩個job會記錄套用至 SQL Server 資料表的新增、更新和刪除操作。

主要是擷取修改資料的行和列資訊並寫入ldf檔案。

同時SQL也提供sys.fn_cdc開頭函數讓使用者可以存取異動資料。

 

CDC運作流程圖:

image 

◎當DML commit到資料庫時,SQL Server必須先寫入日志,且在buffer中更新資料,最後執行checkpoint將buffer中資料寫入硬碟。


◎CDC內部運作主要是在日志檔案中擷取所有異動操作歷史記錄,並將這些訊息寫入對應的跟蹤表。


◎當DBA或開發人員使利用SSIS ETL軟體工具(工具會利用CDC查詢函數),擷取資料並匯入目地資料表可以縮短整個作業流程時間。


◎當啟用CDC後,ldf檔案成長速度會相當驚人(只要硬碟空間夠,就會持續成長),

    因此CDC底層會清理相關跟蹤表,在預設情況下三天後會被自動清理同時是釋放邏輯空間。

 

更多詳細資料可參考

異動資料擷取的概觀

 

下篇小弟將實作CDC,是否能準確擷取到相關的資料異動。