有哪些方法可用于监视SQL数据库记录?

时间:2012-02-23 00:00:24

标签: asp.net sql notifications monitoring

我想监控10个表,每个表有1000条记录。我需要知道什么时候记录,哪个记录改变了。

我已经查看了SQL依赖项,但是看起来SQL依赖项只能告诉我表已更改,而不是更改了哪条记录。然后我必须比较表中的所有记录以找到修改后的记录。我怀疑这对我来说是一个问题,因为记录不断变化。

我也研究了SQL触发器,但是我不确定触发器是否可用于监视哪条记录发生了变化。

我的另一个想法是创建一个"监控"每当修改记录时,将通过应用程序代码添加记录的表。

你知道其他任何方法吗?

编辑: 我正在使用SQL Server 2008

我研究了SQL 2008中提供的并由Martin Smith建议的Change Data Capture。 Change Data Capture似乎是一个强大,易于实施且极具吸引力的解决方案。我打算在我的数据库上滚动CDC。

4 个答案:

答案 0 :(得分:5)

您可以添加触发器并让它们向审计表添加行。他们可以审核更改行的主键,甚至可以审核有关更改的其他信息。例如,在UPDATE的情况下,他们可以记录更改的列。

答案 1 :(得分:3)

在您编写/实现自己之前,请先查看AutoAudit

  

AutoAudit是一个SQL Server(2005,2008)创建的Code-Gen实用程序   审计跟踪触发器:

     
      
  • Created,CreatedBy,Modified,ModifiedBy和RowVersion(递增INT)列到表
  •   
  • 将事件记录到审核表
  •   
  • 更新记录到审核表的新旧值
  •   
  • 删除将所有最终值记录到审核表
  •   
  • 查看重建已删除的行
  •   
  • UDF重建行历史
  •   
  • 用于跟踪架构更改的架构审核触发器
  •   
  • 当Alter Table更改表格时重新编码gens触发
  •   

答案 2 :(得分:1)

  

SQL Server的哪个版本和版本?变更数据捕获是否可用? - 马丁史密斯

我正在使用支持Change Data Capture的SQL 2008。如我所愿,Change Data Capture是一种非常强大的跟踪数据更改的方法。谢谢你的回答。

答案 3 :(得分:0)

这是一个想法。您可以在每个表上都有一个标志,每次创建或更新记录时都会填充当前日期时间。然后,当您注意到记录已更改时,将其标志再次设置为null。因此,未更改的记录在其标志字段中为空,您可以查询非空值以查看哪条记录已更改/创建以及何时(并再次将其标志设置为null) )。