SQL事件探查器:捕获特定表的写入

时间:2011-06-08 18:02:44

标签: sql-server-2008

我需要捕获写操作(任何更改数据的查询),但仅限于两个特定的表。这可以在Sql Profiler中配置吗?如果是这样,怎么样?我希望找到一个不涉及对文本进行过滤的解决方案。

3 个答案:

答案 0 :(得分:6)

根据对其他答案的评论,根据需要使用SQL事件探查器进行以下设置

Event Selection:
-Stored Procedures
  - SP: StmtStarting
-TSQL
  - SQL:StmtStarting

Column Filters
-TextData (LIKE)
 - "insert %"
 - "update %"
 - "delete %"

我不想过滤文本数据,但这是获得我想要的唯一方法。

答案 1 :(得分:0)

使用更改数据捕获,详细说明here

如果CDC不是您的选择,请考虑在桌子上放置一个触发器。在触发器内捕获来自SQL Server内置函数的数据,如

select App_name() as 'AppName', CURRENT_USER as 'CurrentUser', HOST_ID () as 'HostID', HOST_NAME () as 'HostName', SESSION_USER as 'SessionUser', SYSTEM_USER as 'SystemUser'

然后将数据放入历史表

答案 2 :(得分:0)

我同意其他答案,CDC是要走的路(只要你在企业版上)

使用分析器在技术上是可行的,但只是勉强。

首先捕获TSQL:StmtStarting,TSQL:StmtCompleting

然后,您必须导出列表以进行进一步分析。您必须编写某种类型的分析器来过滤掉不符合标准的语句。如果您的系统获得临时查询或者系统生成各种各样的查询,那么分析列表很快就会变得非常毛茸茸。

还有一个问题是运行分析器有很大的开销,如果你想在很长一段时间内获得这些数字,你会很快将系统资源压缩到大多数生产系统的不可接受的水平。

简而言之,尝试以这种方式使用探查器可能会很有趣,但不是在“现实世界”场景中。

这来自一个喜欢看割草机比赛的人。