簡體   English   中英

監視SQL數據庫表更改的設計注意事項

[英]Design considerations for monitoring SQL database table changes

我正在分配一個任務,以監視和記錄多層.NET 4 WPF,WCF,SQL 2008應用程序中的各種“系統級消息”,用消息表示我的應用程序中發生的事件的詳細信息,例如用戶登錄和注銷或保存數據通過登錄,我的意思是我們將把消息插入一個輕量級的SQL表中,客戶端可以從中查詢並顯示最新消息。

這些消息的來源可能來自我們應用程序中的幾個不同組件,例如Windows服務,IIS中的WCF主機,甚至數據庫中的存儲過程。 最終,這些組件以各自的方式修改SQL表。 因此,我認為我可以通過說在修改(更新,插入)SQL中的某些表時需要“觸發”消息來簡化事情,而不是獨立地攻擊每個組件。

首先想到的是每個表上的觸發器,該表監視更改並將記錄插入輕量級消息表中。 我一直(99%的時間)一直認為數據庫觸發器是個壞消息( 數據庫觸發器是邪惡的嗎? )。 我個人寧願開發和調試C#,也不願使用SQL觸發器。

因此,在尋求替代方案時,我遇到了使用SqlDependency監視數據庫更改的問題 ,該部分討論了如何使用SqlDependency類檢測更改。 快速概念驗證似乎有效; 但是,在查看了幾個代碼示例后,似乎檢測到每個更改,都必須重新初始化新的SqlConnection,SqlCommand和SqlDependency對象,我可能需要監視3或4個查詢。

有更好的選擇來檢測C#中的SQL表更改嗎?

此外,撇開觸發器的偏見,這似乎是一種環回方法,可以簡單地監視一組表中的更改,只是將數據重新插入到另一個表中。 我寧願在C#中實現一些其他邏輯,但是我是否應該編寫觸發器來完成並完成呢?

有什么想法嗎?

我認為您對觸發器的總體偏見是沒有根據的。 人們看不起觸發器的原因與看不起光標的原因相同:在許多情況下,它們被濫用和濫用。 但是,就像許多事物一樣,它們當然也有其位置,如果正確使用, 它們是正確的答案。

您還應該研究其他一些本機技術:

變更追蹤
http://msdn.microsoft.com/zh-CN/library/cc280462(SQL.100).aspx

更改數據捕獲
http://msdn.microsoft.com/zh-CN/library/bb522489(SQL.100).aspx

SQL Server審核
http://msdn.microsoft.com/zh-CN/library/cc280386(SQL.100).aspx

雖然我不知道您的版本(其中一些是企業功能)。 也存在一些第三方解決方案(我沒有使用過任何解決方案,因此請您自行查找/研究)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM