9

長久以來,我們一直希望創建一個歷史不會丟失的案例管理系統。當做出更改時,我們希望記錄該更改,但有能力回到任何時間點並查看記錄的樣子。我想向Stack Overflow社區提出這個問題,看看有什麼辦法做到這一點,是否有技術已經到位,以實現這一目標?在SQL Server 2008數據庫中維護數據歷史的方法

回答

3

我不是當然如何像marc_s時間數據庫中提到的作品,但如果你使用SQL Server 2008或更高版本,可以利用其內置的變更數據捕獲(CDC)的功能優勢:

啓用CDC使用複製的事務日誌存儲插入,更新和刪除操作的表並創建表值函數,這些函數允許您檢索給定日期/時間的行,或僅檢索更改。

儘管如此,您不能單靠CDC,因爲您的交易日誌會變得難以駕馭,並且速度很慢。所以,你要做的就是:

  • 使CDC,
  • 使用相同的模式與原始表創建歷史表,但添加一對夫婦更列在關係存儲行版本信息(很像slowly-changing dimension OLAP數據庫),並
  • 創建一個作業,這將定期輪詢CDC功能自去年負荷的變化,並將其推到歷史表

然後你可以再使用歷史表在查詢中,加入像往常一樣,但是與一個額外的謂詞來獲取記錄「as-of」,無論你想要什麼日期。

+1

對於觸發器可以執行的操作來說,這看起來好像還有很多附加層,可以填充您提及的相同歷史記錄表。 – Chris 2010-10-06 20:30:33

+0

這是真的;儘管取決於列的數量,但它也可能需要大量的觸發器。無論哪種方式都可以用編程方式編寫腳本,所以複雜性不應該太大。兩種方法都有其優點和缺點,哪種方式是正確的取決於您的要求。這裏有一個很好的討論: http:// sqlserverplanet。com/design/triggers-service-broker-cdc-or-change-tracking/ – utexaspunk 2010-10-06 23:20:36

+0

我使用單獨的表格+觸發器來管理記錄歷史記錄,以及兩個其他表格來記錄何時和誰做了哪些記錄的更改。 +1觸發器! – Achilles 2011-10-03 00:03:05