2012-02-23 65 views
3

我想監視10個表格,每個表格有1000條記錄。我需要知道什麼時候有記錄,哪條記錄改變了。有哪些方法可用於監視SQL數據庫記錄?

我已經查看了SQL依賴關係,但看起來SQL依賴關係只能告訴我表更改了表,而不更改哪條記錄。然後我必須比較表中的所有記錄以找到修改的記錄。隨着記錄的不斷變化,我懷疑這對我來說會是個問題。

我也研究過SQL觸發器,但我不確定觸發器是否可以監視哪條記錄發生了變化。

我的另一個想法是創建一個「監控」表,每當記錄被修改時,通過應用程序代碼添加記錄。

你知道任何其他方法嗎?

編輯: 我使用SQL Server 2008

我特地到變更數據捕獲這是在2008年SQL提供和馬丁·史密斯建議。更改數據捕獲似乎是一個強大,易於實施和非常有吸引力的解決方案。我將在我的數據庫上發佈CDC。

+1

SQL Server的版本和版本是什麼? [更改數據捕獲](http://msdn.microsoft.com/zh-cn/library/bb522489.aspx)是否可用? – 2012-02-23 00:06:25

+0

不要依賴應用程序代碼。盡你所能相信,它永遠不會是唯一觸及你的數據的東西。 – 2012-02-23 03:51:32

+0

@Martin Smith我正在使用SQL Server 2008.我將不得不檢查並查看Change Data Capture是否可用。 – Mausimo 2012-02-23 16:37:50

回答

1

什麼SQL硒的版本和版本rver?變更數據捕獲是否可用? - Martin Smith

我正在使用支持更改數據捕獲的SQL 2008。更改數據捕獲是一種非常穩健的跟蹤數據更改的方法,正如我所願。感謝你的回答。

5

您可以添加觸發器並讓他們將行添加到審計表。他們可以審覈更改行的主鍵,甚至可以更改有關更改的其他信息。例如,在UPDATE的情況下,他們可以記錄已更改的列。

+0

他們將捕獲對您的表格所做的所有更改,無論這些更改是由您的應用程序代碼還是無聊的DBA製作的。 – 2012-02-23 00:06:24

+1

+1爲了澄清,您可以使用UPDATE()或COLUMNS_UPDATED()位掩碼來確定哪些列被「觸及」,但它們不會告訴您值是否保持不變(通常情況下在CRUD實現中)。您可以通過比較「已插入」和「已刪除」僞表來查看哪些值實際上發生了變化,但根據表的複雜程度和涉及的類型,這可能變得非常複雜。 – 2012-02-23 03:49:43

0

這是一個idea.You可以在每個表上創建一個標誌,每次創建或更新記錄時均填入當前日期時間。然後當你注意到一條記錄已經改變時,它的標誌再次設置爲空。因此,無變化的記錄在其標誌字段中爲空,並且你可以查詢非空值來查看哪條記錄已經改變/創建以及何時(並且將它們的標誌再次設置爲空)。

3

你寫之前/實現你自己看看AutoAudit

AutoAudit是SQL Server(2005,2008)代碼生成工具,創建 審計跟蹤觸發器具有:

  • 創建,創建,修改,修改,和RowVersion(遞增INT)列到表
  • 插入事件記錄到審計表
  • 更新新與舊值記錄到審計表
  • 刪除日誌中的所有最終值審覈表
  • 以重建被刪除的行
  • UDF重建行歷史
  • 架構審計觸發追蹤模式更改
  • 回覆-code-一族觸發時,ALTER TABLE更改表
相關問題