Sql server資料庫記錄修改追蹤和恢復的解決方案

iSQlServer發表於2009-02-16
Sql server資料庫記錄修改追蹤和恢復的解決方案
    在專案開發中,可能很多人都遇到這樣客戶要求:使用者運算元據庫關鍵記錄時要記錄使用者的ID,時間,修改的內容等,在必要的情況下要回滾到某一時刻的記錄內容。如何解決?這裡我根據自己的工作經驗總結了三種解決方案,如有不當或者更好的方案請賜教 : )。

    1.資料表冗餘記錄法
      在關鍵的資料庫表中,加入 "建立時的日期時間"、"建立使用者"、"修改或刪除時的日期時間"、"修改或刪除使用者"、"記錄狀態" 等欄位,當然了欄位名可以簡化,這裡為了更好的說明。“記錄狀態”包括“當前可用”和“存檔”兩種狀態。當使用者修改記錄時,要執行兩步操作 1).更新當前資料庫記錄,記錄修改者和時間,把“記錄狀態”改成“存檔”。2)新建一條記錄,把修改者和時間作為建立者和時間存入,儲存新的記錄內容,而“記錄狀態”為“當前可用”。 如果使用者刪除記錄,只是執行第一步操作即可。
    這種方案可以用程式在前臺方便的察看記錄修改歷史情況,並可以很容易的回滾到“某一時刻”,這裡的回滾不是真正的回滾,仍然要在表裡新建記錄,和上面提到的修改記錄操作相同,只不過記錄的內容是“某一時刻”的內容而已。
    使用這種方法會造成資料庫表中記錄的過多儲存,在查詢和統計時效能會有影響。

2.新建資料表記錄操作
    在資料庫中為關鍵資料表建立對應的“操作記錄表”,所有對關鍵記錄的修改、刪除甚至讀取都可以記錄在“操作記錄表”中,具體的實施可以在程式程式碼中控制,但更好的方法是可以使用觸發器控制。
    這種方案也可以在前臺方便的察看記錄修改歷史情況,並可以很容易的回滾到“某一時刻”。但由於為每一個關鍵資料表都建立了“操作記錄表”也造成了Sql server的效能影響。
    另外有第三方提供了採用這種方案的輔助程式:OmniAudit
      下載http://www.ttdown.com/SoftView/SoftView_27817.html

3.使用Sql Server日誌
    我們知道Sql Server資料庫除了資料檔案外,還有日誌檔案,日誌檔案記錄資料庫的變化情況,如果我們能察看日誌檔案的內容也就等於知道了資料庫的操作歷史,但是微軟沒有提供諸如察看sql日誌的方法和介面等,好在有一個軟體提供了這種功能:
Lumigent Entegra For SQL Server ,下載頁面http://www.ttdown.com/SoftView/SoftView_30135.html
它能跟蹤資料庫的所有改動情況,並且提供回滾功能,還可以匯出操作歷史等。
這種方案的好處是不為資料庫增加任何負擔就可以察看記錄修改歷史情況,並可以很容易的回滾到“某一時刻”。但是必須使用第三方的軟體,而不能在自己程式的前臺操作。另外Lumigent Entegra For SQL Server v2.3.1對中文支援不太好,有些鬱悶。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-553439/,如需轉載,請註明出處,否則將追究法律責任。

相關文章