如何记录在SQL Server中进行的每个数据更改?

时间:2011-06-29 08:27:08

标签: sql-server asp.net-mvc logging

我有一个个人资料页面(少于1万个用户),我需要跟踪用户通过应用程序进行的每个更改和更新。无论用户是更新个人资料图片还是在“评论”字段中添加额外空间,我都需要存储以前的数据 简而言之:我需要存储所有内容

是否存在某种“跟踪历史记录和更改-sql-server”软件,还是我必须自己实现?

如果我必须自己实施,我可以想到三种方法:

  1. 我把所有东西放在同一张桌子里 但是我添加了一个 key 列 指定哪个行处于活动状态 哪个是旧的。

  2. 我添加了一个名为 history 的新表 我存储具有的列名称 改变,什么时候改变了什么 旧数据是。

  3. 我为每个表添加了一个历史表 在数据库中。它看起来一样 但只能跟踪每个表格 历史。

  4. 有没有人有类似的问题,你是如何解决的?

      

    这是使用mvc 4构建的,它是一个   普通网站。

    修改
    我最感兴趣的是现有的解决方案/软件,但如果没有,我必须自己做 有人使用过SQL Data Compare吗?

4 个答案:

答案 0 :(得分:3)

我上次工作的地方一切都必须完全记录下来。 (与政府组织合作)。我们从未更新或删除数据。

您要做的是在每一行上都有一个开始日期和结束日期。要进行更新,您可以将旧数据更新为具有enddate,然后在表中插入新行。要进行删除,您可以在具有null enddate的行上放置enddate。我们还有一个“更新者”列来放置用户标识

答案 1 :(得分:1)

我使用第三种方法来做到这一点,但没有为我的数据库的所有表创建历史表,而是为最重要的表创建历史表。您可以使用triggers执行此操作,为trigger创建Update。您可以详细了解触发器herehere

答案 2 :(得分:1)

Microsoft暂时提供Change TrackingChange Data Capture。从技术上讲,它们可以跟踪数据库中所有 all 的更改,这很适合您的目的。请注意,CT在大多数版本中都可用,而CDC以前仅在Enterprise中可用,直到SQL Server 2016为止,在那里他们也将其用于Standard。

ApexSQL日志的功能也差不多,但是如果您使用的是SQL Server,则它已经集成在您的软件中。

答案 3 :(得分:0)

您是否考虑过在数据库上启用完整事务日志记录,然后使用某些日志读取工具来监视数据更改。 ApexSQL Log是目前市场上最好的日志阅读器,但还有其他解决方案。 Red Gate的SQL Log Rescue是免费的,但它仅适用于sql server 2000.

使用此方法,您无需在数据库或应用程序中进行任何其他更改,因为在数据库处于完全恢复模式时会自动记录每个事务。

希望这有帮助。