之前我大概介紹了SSIS(ETL)有提到CDC功能,所以這篇就來介紹SQL2008新特性。
由於之前小弟在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運作流程圖:
◎當DML commit到資料庫時,SQL Server必須先寫入日志,且在buffer中更新資料,最後執行checkpoint將buffer中資料寫入硬碟。
◎CDC內部運作主要是在日志檔案中擷取所有異動操作歷史記錄,並將這些訊息寫入對應的跟蹤表。
◎當DBA或開發人員使利用SSIS ETL軟體工具(工具會利用CDC查詢函數),擷取資料並匯入目地資料表可以縮短整個作業流程時間。
◎當啟用CDC後,ldf檔案成長速度會相當驚人(只要硬碟空間夠,就會持續成長),
因此CDC底層會清理相關跟蹤表,在預設情況下三天後會被自動清理同時是釋放邏輯空間
更多詳細資料可參考
異動資料擷取的概觀
下篇小弟將實作CDC,是否能準確擷取到相關的資料異動。