Dot-Net

在 SQL Server 2008 數據庫中維護數據歷史記錄的方法

  • June 12, 2015

長期以來,我們一直希望創建一個不會失去歷史記錄的案例管理系統。進行更改時,我們希望記錄該更改,但能夠返回到任何時間點並查看記錄的樣子。我想向 Stack Overflow 社區提出這個問題,看看有哪些方法可以做到這一點,是否已經有技術可以實現這一目標?

是的,這項技術確實存在——實施它並正確地實施它需要付出一些努力。

您正在尋找的稱為時態數據庫- 請參閱一些資源:

我不確定像 marc_s 這樣的臨時數據庫是如何工作的,但是如果您使用的是 SQL Server 2008 或更高版本,則可以利用其內置的更改數據擷取 (CDC) 功能:

啟用 CDC 使用複制事務日誌來儲存表的插入、更新和刪除,並創建允許您檢索給定日期/時間的行或僅檢索更改的表值函式。

但是,您不能單獨依賴 CDC,因為您的事務日誌將變得難以管理且速度緩慢。所以你要做的是:

  • 啟用 CDC,
  • 使用與原始表相同的模式創建歷史表,但添加了更多列來儲存行版本資訊(很像關係 OLAP 數據庫中緩慢變化的維度),以及
  • 創建一個作業,該作業將定期輪詢 CDC 函式自上次載入以來的更改並將它們推送到歷史記錄表

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

引用自:https://stackoverflow.com/questions/3875078