2008-11-17 100 views
4

有沒有辦法使用Profiler來確定表是否被查詢訪問?使用SQL Server Profiler訪問日誌表

我看到一個名爲Object:Opened的事件(表示當一個對象被訪問,如SELECT,INSERT或DELETE語句)和Object:Closed,但這些似乎並沒有工作。

特別是,我用Object:Opened和Object:Closed創建了一個簡單的跟蹤,沒有過濾器(除了標準的「應用程序名稱不像'SQL Profiler'」過濾器)並且運行了SELECT TOP 1 * FROM TableName,但沒有報告任何事件。

那麼,有沒有辦法使用Profiler來確定是否正在選擇一個表?

回答

4

它可能有助於調查SQL正在獲取的鎖。 Select語句通常會獲得共享鎖(LCKMS),因此您可以過濾此。

在剖析器中查找Locks:Acquired事件。 ObjectID將解析爲表格,您可以使用OBJECT_NAME(objectid)輕鬆查找該表格。該模式會告訴你正在獲取的鎖共享鎖的種類3.欲瞭解更多信息,請看here

0

我沒有看到那些在SQL Server 2005

以我的經驗,我看SQL:StmtStartingSP:StmtStarting - 你可以在%TABLE_NAME%過濾TextData。當你使用SP:StmtStarting時,這甚至會吸引SP內部的東西。

這不是防彈的,因爲它必須使用LIKE語法,但它可能會幫助您找到所需的東西。

3

有一種方法可以用Profiler來實現,但它對性能有很大的影響。

相反,你可以用你正在使用的SQL Server版本來澄清你的問題嗎?如果您使用的是SQL Server 2008,請查看審計對象,該對象專門用於執行此操作,而且它的性能影響非常低。

下面是一篇文章,解釋瞭如何建立審計:

Implementing Security Audits in SQL Server 2008

其他海報指出的是,你可以在對象名稱過濾的TextData,但如果有人使用視圖訪問不工作物體。

+0

我使用的是2000,但我希望問題在多個版本的SQL Server中是通用的。 – Tadmas 2009-01-02 23:02:18