|
對于大部分企業(yè)應(yīng)用來用,有一個基本的功能必不可少,那就是Audit Trail或者Audit Log,中文翻譯為追蹤檢查、審核檢查或者審核記錄。我們采用Audit Trail記錄每一筆業(yè)務(wù)操作的基本信息,比如操作的基本描述、操作時間、操作者等。對于一些安全級別比較高的應(yīng)用,或者操作一些比較敏感的數(shù)據(jù),我們甚至需要記錄該筆業(yè)務(wù)操作引起的數(shù)據(jù)的改變。具體來說,這里的“數(shù)據(jù)改變”指的是每一條影響的記錄在操作執(zhí)行前后的變化。對于添加的記錄,需要記錄下新插入的記錄;對于刪除的記錄,需要記錄下原來的記錄;對于更新的記錄,則需要同時記錄下更新前后的記錄。
說到這里,很多人都會想到采用觸發(fā)器的方式來實現(xiàn)對數(shù)據(jù)改變的捕捉。但是這種實現(xiàn)方案具有一個最大的局限:由于觸發(fā)器是在數(shù)據(jù)操作所在事務(wù)范圍內(nèi)執(zhí)行的,所有會帶來性能的問題,嚴重的話還會因為觸發(fā)器的執(zhí)行導(dǎo)致事務(wù)超市。所以在這里,我們介紹一種更好的解決方案:SQLCDC。
目錄
一、SQLCDC簡介
二、在數(shù)據(jù)庫級別開啟CDC
三、為某個數(shù)據(jù)表開啟CDC
四、記錄添加記錄的數(shù)據(jù)改變
五、記錄刪除數(shù)據(jù)的數(shù)據(jù)改變
六、記錄更新記錄的數(shù)據(jù)改變
一、SQLCDC簡介
CDC的全名為Change Data Capture,顧名思義,就是用于追蹤和捕捉數(shù)據(jù)改變。CDC是在SQL Server 2008中才出現(xiàn)的新特性,而這個特性則在很早之前就出現(xiàn)在了Oracle中。對于SQL Server之前版本來說,在沒有CDC的情況下,如果需要記錄基于某個數(shù)據(jù)表的數(shù)據(jù)改變,我們只能采用觸發(fā)器,具體來說就是通過手工創(chuàng)建After Insert、After Update和After Delete觸發(fā)器去記錄變化的數(shù)據(jù)。而CDC給了我們一種更為方便、易用和省心的方式去記錄某個數(shù)據(jù)表的歷史操作。
二、在數(shù)據(jù)庫級別開啟CDC
在默認的情況下,數(shù)據(jù)庫的CDC特性是被關(guān)閉的,你可以通過系統(tǒng)表sys.databases的is_cdc_enabled字段確定某個數(shù)據(jù)庫的CDC是否開啟。如果在默認的情況下,我執(zhí)行如下的SQL語句查看數(shù)據(jù)庫TestDb的CDC是否開啟,你將會看到該字段的值為0。
你可以通過執(zhí)行系統(tǒng)存儲過程sys.sp_cdc_enable_db為當前數(shù)據(jù)庫開啟CDC特性。下面的T-SQL代碼片斷中,我們通過執(zhí)行該存儲過程為TestDb打開了CDC特性。
Use TestDb
Go
Exec sys.sp_cdc_enable_db
Go
it知識庫:追蹤記錄每筆業(yè)務(wù)操作數(shù)據(jù)改變的利器——SQLCDC,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。