我想监控10个表,每个表有1000条记录。我需要知道什么时候记录,哪个记录改变了。
我已经查看了SQL依赖项,但是看起来SQL依赖项只能告诉我表已更改,而不是更改了哪条记录。然后我必须比较表中的所有记录以找到修改后的记录。我怀疑这对我来说是一个问题,因为记录不断变化。
我也研究了SQL触发器,但是我不确定触发器是否可用于监视哪条记录发生了变化。
我的另一个想法是创建一个"监控"每当修改记录时,将通过应用程序代码添加记录的表。
你知道其他任何方法吗?
编辑: 我正在使用SQL Server 2008
我研究了SQL 2008中提供的并由Martin Smith建议的Change Data Capture。 Change Data Capture似乎是一个强大,易于实施且极具吸引力的解决方案。我打算在我的数据库上滚动CDC。
答案 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) )。