我有一个个人资料页面(少于1万个用户),我需要跟踪用户通过应用程序进行的每个更改和更新。无论用户是更新个人资料图片还是在“评论”字段中添加额外空间,我都需要存储以前的数据 简而言之:我需要存储所有内容。
是否存在某种“跟踪历史记录和更改-sql-server”软件,还是我必须自己实现?
如果我必须自己实施,我可以想到三种方法:
我把所有东西放在同一张桌子里 但是我添加了一个 key 列 指定哪个行处于活动状态 哪个是旧的。
我添加了一个名为 history 的新表 我存储具有的列名称 改变,什么时候改变了什么 旧数据是。
我为每个表添加了一个历史表 在数据库中。它看起来一样 但只能跟踪每个表格 历史。
有没有人有类似的问题,你是如何解决的?
这是使用mvc 4构建的,它是一个 普通网站。
修改
我最感兴趣的是现有的解决方案/软件,但如果没有,我必须自己做
有人使用过SQL Data Compare吗?
答案 0 :(得分:3)
我上次工作的地方一切都必须完全记录下来。 (与政府组织合作)。我们从未更新或删除数据。
您要做的是在每一行上都有一个开始日期和结束日期。要进行更新,您可以将旧数据更新为具有enddate,然后在表中插入新行。要进行删除,您可以在具有null enddate的行上放置enddate。我们还有一个“更新者”列来放置用户标识
答案 1 :(得分:1)
我使用第三种方法来做到这一点,但没有为我的数据库的所有表创建历史表,而是为最重要的表创建历史表。您可以使用triggers
执行此操作,为trigger
创建Update
。您可以详细了解触发器here和here
答案 2 :(得分:1)
Microsoft暂时提供Change Tracking和Change 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.
使用此方法,您无需在数据库或应用程序中进行任何其他更改,因为在数据库处于完全恢复模式时会自动记录每个事务。
希望这有帮助。