监控表活动

时间:2015-07-03 05:27:39

标签: sql sql-server-2008

我有一个由几个类组成的应用程序,用于从文件中导入数据。导入导致多个表被更新/删除/插入。有许多存储过程和触发器被调用来执行此任务。如何在数据库中的表级监控活动?我想要的是一个受导入影响的表的摘要,插入/删除/更新的模式(通过触发器/存储过程/应用程序)。您的解决方案将非常有用。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以选择跟踪sql server本身的更改。

你可能想......

  • 在所有表上创建触发器并让它们写入日志
  • 设置SQL Server Profiler并解释他为特定会话监控的所有内容
  • 使用CDC(这是最重要的)

等。等等。

但在这种情况下,对你来说最简单的事情可能就是使用几乎没有记录的fn_dblog

有点像回顾过去。您可以在最后几分钟,几天,几小时甚至几天内查看系统中发生的每个更改。

SELECT *
FROM fn_dblog(NULL,NULL)

你会得到一个巨大的名单(小心!)。 在此列表中,您可以找到不同的操作类型。其中一些是:

  • LOP_INSERT_ROWS - 插入
  • LOP_MODIFY_ROW - 更新
  • LOP_DELETE_ROWS - 删除

您还可以看到AllocUnitName。这表示发生这些操作类型的表。

此外,您可以使用Transaction IdTransaction Name过滤所有这些记录。 Transaction Name将在事务开始时定义(Operation-Type:LOP_BEGIN_XACT)。过滤它的另一种方法可能是列Begin TimeEnd Time。您还可以在特定Spid之后进行过滤。但要注意,并非所有列都会在任何地方填充。您可能需要加入这些值,或者只是尝试先获取事务,然后找到所有与这些事务一起更改的行。