2012-07-10 58 views
0

我們有一個winform應用程序,所有的SQL都是內聯的,不幸的是沒有使用存儲過程。如何捕獲和記錄SQL表的活動

什麼是最好的方式來跟蹤對SQL表執行什麼操作(INSERT,UPDATE或DELETE),監視和捕獲單表中正在進行的活動的記錄。

我知道SQL server profiler是可用的,但理想情況下我不想讓分析器始終運行,我需要的是在幕後運行並捕獲一個表的所有活動。

我想過使用觸發器,但使用它有一些缺點,所以我想知道是否有其他選項?

感謝

+0

根據您想要捕獲的內容,觸發器可能是最容易實現的選項。你能解釋一下你想要捕捉什麼,以及你關心的具體缺點? – 2012-07-11 00:15:49

回答

2

如果你使用SQL Server 2008(及以上),變更數據捕獲聽起來像一個良好的開端:

http://msdn.microsoft.com/en-us/library/bb522489(v=sql.105).aspx

+0

相關鏈接:http://msdn.microsoft.com/en- us/library/cc627369(v = sql.105).aspx – NotMe 2012-07-10 21:53:48

+1

請注意,Change Data Capture是企業版功能。 – 2012-07-10 23:12:45

+0

謝謝,這正是我正在尋找的。 – 03Usr 2012-07-11 07:40:57

0

如果您使用的是Oracle,您可以使用此報表審計表(如果fireid 是用戶做的名字更新):

AUDIT選擇表,更新表,INSERT TABLE,DELETE TABLE BY fireid BY ACCESS;

結果將存儲在SYS.AUD $表

(如果你使用其他數據庫只是搜索審計DML語句的文檔。)

SQL SERVER:有一個功能叫做「SQL審計」這是你在找什麼? http://www.bradmcgehee.com/2010/03/an-introduction-to-sql-server-2008-audit/

+0

不幸的是,它不是Oracle。它是MS SQL 2008 R2 – 03Usr 2012-07-10 21:51:11

+0

SQL SERVER:有一個名爲「SQL AUDIT」的功能,這是你在找什麼?請參閱此URL: http://www.bradmcgehee.com/2010/03/an-introduction-to-sql-server-2008-audit/ – 2012-07-10 21:53:53

0

有幾種方法。如果你只是想在代碼中執行它(取決於你的程序) 你可以將這些命令添加到列表中並將它們寫入文件。

如果您使用的是EntityFrameWork,那麼我會記錄數據更改。使用EF時,使用存儲的procs是最好的選擇。

您的代碼或項目的示例將有所幫助。 TransactionLogs已經捕獲了這些信息。

明顯你使用Sql Server的這些ORACLE人都是如此的嫉妒。

也看看使用DataSourceViews,這是一種告訴服務器正在發生什麼的方法。

0

我認爲SQL Server CHANGE TRACKING TeEchinique最適合您的要求。