2011-09-06 57 views
2

我正在使用SQL Server 2008中的擴展事件來執行一些監視。我在下面活動最感興趣:按照受影響的表過濾擴展事件?

  • sqlserver.sp_statement_completed
  • sqlserver.sp_statement_starting
  • sqlserver.sql_statement_completed
  • sqlserver.sql_statement_starting

我想知道這是否是可能根據它們影響的表格過濾掉這些擴展事件。我還沒有看到任何有助於我執行此類過濾的謂詞。由於單個存儲過程實際上可能影響多個表,我甚至不知道他們將如何做,但有人可能會想到一些巧妙的技巧。

在此先感謝!

回答

2

不,在SQL Server 2008中沒有任何東西可以讓你嘗試做這個作爲會話定義的一部分,但是如果你使用track_causality = on和你,你可以將它作爲事件後處理的一部分僅在對象級別爲sqlserver.lock_aquired事件添加模式穩定性鎖,然後篩選要定位的對象的object_id。然後,您必須根據activity_xref_id進行篩選,並可以爲那些沒有關聯的sqlserver.lock_acquired事件的activity_xref_ids拋出開始/完成的事件。這將工作,但它很複雜,並且會捕獲大量額外的噪音數據。

想想吧,您也可以在sqlserver.sql_text和sqlserver.tsql_stack操作中使用sqlserver.lock_acquired事件,以便能夠以較少的噪音完成相同的操作。
您希望能夠與訪問特定對象關聯的開始/完成事件是否返回了特定的數據元素,還是僅僅想知道訪問數據庫中特定對象的SP和特殊SQL?

讓我知道一些更具體的細節,我會看看我是否可以處理演示,以顯示這個給你。

+0

嗨喬納森,非常感謝你的回答。簡而言之,我的客戶希望通過擴展事件和ETW對其SQL Server數據庫執行審計,因爲所有其他系統也將登錄到ETW,從而實現關聯。我爲審計選擇的4個事件是上面在問題中指定的事件。承認這會產生負載的事件,他們問我們是否可以將範圍縮小到......只有幾張桌子......因此,我的問題是按表過濾**事件**。如果我們想在ETW中記錄數據庫活動,您認爲我們是否正確?謝謝! – Huck

+0

僅僅因爲你可以並不意味着你應該或它是有道理的。將XEvent數據寫入ETW並不保證您可以將數據與寫入ETW的其他進程相關聯。 SQL Server僅使用ETW的經典提供程序,而不是Windows Server 2008中可用且基本由應用程序使用的基於清單的提供程序。使用標準工具關聯來自SQL的ETW數據通常會導致來自SQL的事件指導,您必須執行大量手動映射才能理解,這些映射與其他事件鬆散地交織在一起。這個實現對我來說似乎不對。 –

+1

經過我的調查,我傾向於同意你的看法。看來2008年的「SQL Server Audit」功能更適合我們的需求。另外,看似建立在擴展事件之上,它必須符合我們的性能目標。 – Huck