2012-02-23 117 views
3

我想监视10个表格,每个表格有1000条记录。我需要知道什么时候有记录,哪条记录改变了。有哪些方法可用于监视SQL数据库记录?

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

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

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

你知道任何其他方法吗?

编辑: 我使用SQL Server 2008

我特地到变更数据捕获这是在2008年SQL提供和马丁·史密斯建议。更改数据捕获似乎是一个强大,易于实施和非常有吸引力的解决方案。我将在我的数据库上发布CDC。

+1

SQL Server的版本和版本是什么? [更改数据捕获](http://msdn.microsoft.com/zh-cn/library/bb522489.aspx)是否可用? – 2012-02-23 00:06:25

+0

不要依赖应用程序代码。尽你所能相信,它永远不会是唯一触及你的数据的东西。 – 2012-02-23 03:51:32

+0

@Martin Smith我正在使用SQL Server 2008.我将不得不检查并查看Change Data Capture是否可用。 – Mausimo 2012-02-23 16:37:50

回答

1

什么SQL硒的版本和版本rver?变更数据捕获是否可用? - Martin Smith

我正在使用支持更改数据捕获的SQL 2008。更改数据捕获是一种非常稳健的跟踪数据更改的方法,正如我所愿。感谢你的回答。

5

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

+0

他们将捕获对您的表格所做的所有更改,无论这些更改是由您的应用程序代码还是无聊的DBA制作的。 – 2012-02-23 00:06:24

+1

+1为了澄清,您可以使用UPDATE()或COLUMNS_UPDATED()位掩码来确定哪些列被“触及”,但它们不会告诉您值是否保持不变(通常情况下在CRUD实现中)。您可以通过比较“已插入”和“已删除”伪表来查看哪些值实际上发生了变化,但根据表的复杂程度和涉及的类型,这可能变得非常复杂。 – 2012-02-23 03:49:43

0

这是一个idea.You可以在每个表上创建一个标志,每次创建或更新记录时均填入当前日期时间。然后当你注意到一条记录已经改变时,它的标志再次设置为空。因此,无变化的记录在其标志字段中为空,并且你可以查询非空值来查看哪条记录已经改变/创建以及何时(并且将它们的标志再次设置为空)。

3

你写之前/实现你自己看看AutoAudit

AutoAudit是SQL Server(2005,2008)代码生成工具,创建 审计跟踪触发器具有:

  • 创建,创建,修改,修改,和RowVersion(递增INT)列到表
  • 插入事件记录到审计表
  • 更新新与旧值记录到审计表
  • 删除日志中的所有最终值审核表
  • 以重建被删除的行
  • UDF重建行历史
  • 架构审计触发追踪模式更改
  • 回复-code-一族触发时,ALTER TABLE更改表
相关问题