9

长久以来,我们一直希望创建一个历史不会丢失的案例管理系统。当做出更改时,我们希望记录该更改,但有能力回到任何时间点并查看记录的样子。我想向Stack Overflow社区提出这个问题,看看有什么办法做到这一点,是否有技术已经到位,以实现这一目标?在SQL Server 2008数据库中维护数据历史的方法

回答

3

我不是当然如何像marc_s时间数据库中提到的作品,但如果你使用SQL Server 2008或更高版本,可以利用其内置的变更数据捕获(CDC)的功能优势:

启用CDC使用复制的事务日志存储插入,更新和删除操作的表并创建表值函数,这些函数允许您检索给定日期/时间的行,或仅检索更改。

尽管如此,您不能单靠CDC,因为您的交易日志会变得难以驾驭,并且速度很慢。所以,你要做的就是:

  • 使CDC,
  • 使用相同的模式与原始表创建历史表,但添加一对夫妇更列在关系存储行版本信息(很像slowly-changing dimension OLAP数据库),并
  • 创建一个作业,这将定期轮询CDC功能自去年负荷的变化,并将其推到历史表

然后你可以再使用历史表在查询中,加入像往常一样,但是与一个额外的谓词来获取记录“as-of”,无论你想要什么日期。

+1

对于触发器可以执行的操作来说,这看起来好像还有很多附加层,可以填充您提及的相同历史记录表。 – Chris 2010-10-06 20:30:33

+0

这是真的;尽管取决于列的数量,但它也可能需要大量的触发器。无论哪种方式都可以用编程方式编写脚本,所以复杂性不应该太大。两种方法都有其优点和缺点,哪种方式是正确的取决于您的要求。这里有一个很好的讨论: http:// sqlserverplanet。com/design/triggers-service-broker-cdc-or-change-tracking/ – utexaspunk 2010-10-06 23:20:36

+0

我使用单独的表格+触发器来管理记录历史记录,以及两个其他表格来记录何时和谁做了哪些记录的更改。 +1触发器! – Achilles 2011-10-03 00:03:05