代码之家  ›  专栏  ›  技术社区  ›  Tadmas

使用SQL Server探查器访问日志表

  •  4
  • Tadmas  · 技术社区  · 17 年前

    有没有一种方法可以使用探查器来确定查询是否正在访问表?

    我看到了一个名为 Object:Opened (指示访问对象的时间,例如SELECT、INSERT或DELETE语句)和 Object:Closed ,但这些似乎不起作用。

    特别是,我创建了一个简单的跟踪,其中Object:Opened和Object:Closed都没有过滤器(除了标准的“Application Name not like'SQL Profiler'”过滤器),然后运行 SELECT TOP 1 * FROM TableName ,但未报告任何事件。

    那么,有没有一种方法可以使用探查器来确定是否从中选择了一个表?

    4 回复  |  直到 17 年前
        1
  •  4
  •   Nick Kavadias    17 年前

    这可能有助于调查SQL正在获取的锁。Select语句通常会获取共享锁(LCKM),因此您可以对此进行筛选。

    在探查器中查找Locks:Acquired事件。ObjectID将解析为可以轻松查找的表 OBJECT_NAME(objectid) . 该模式将告诉您获取的锁类型共享锁为3。有关更多信息,请查看 here .

        2
  •  3
  •   Brent Ozar    17 年前

    相反,您能用您正在使用的SQL Server版本来澄清您的问题吗?如果您使用的是SQLServer2008,请查看Audit对象,该对象正是为此而设计的,而且它对性能的影响非常小。

    下面有一篇文章解释如何设置审核:

    Implementing Security Audits in SQL Server 2008

        3
  •  3
  •   Darren Comeau    15 年前

    当我在一些挖掘之后独立地发现这一点时,我发现了这篇优秀的文章;

    http://www.databasejournal.com/features/mssql/article.php/3887996/Determining-Object-Access-Using-SQL-Server-Profiler.htm

    当做

    达伦。

        4
  •  0
  •   Cade Roux    17 年前

    我在SQLServer2005中没有看到这些。

    SQL:StmtStarting SP:StmtStarting -你可以过滤 TextData 在…上 %TABLE_NAME% . 当您使用时,这甚至会捕获SPs中的内容 SP:StmtStarting .

    它不是防弹的,因为它必须使用 LIKE