长久以来,我们一直希望创建一个历史不会丢失的案例管理系统。当做出更改时,我们希望记录该更改,但有能力回到任何时间点并查看记录的样子。我想向Stack Overflow社区提出这个问题,看看有什么办法做到这一点,是否有技术已经到位,以实现这一目标?在SQL Server 2008数据库中维护数据历史的方法
9
A
回答
8
是的,这项技术绝对存在 - 这是一个努力实施它,并做到这一点是正确的。
什么你正在寻找被称为时空数据库 - 看到一些资源:
3
我不是当然如何像marc_s时间数据库中提到的作品,但如果你使用SQL Server 2008或更高版本,可以利用其内置的变更数据捕获(CDC)的功能优势:
- Change Data Capture (MSDN)
- Basics of Change Data Capture (MSDN)
- Using Change Data Capture
- Sql Server 2008: Change Data Capture (CDC)
启用CDC使用复制的事务日志存储插入,更新和删除操作的表并创建表值函数,这些函数允许您检索给定日期/时间的行,或仅检索更改。
尽管如此,您不能单靠CDC,因为您的交易日志会变得难以驾驭,并且速度很慢。所以,你要做的就是:
- 使CDC,
- 使用相同的模式与原始表创建历史表,但添加一对夫妇更列在关系存储行版本信息(很像slowly-changing dimension OLAP数据库),并
- 创建一个作业,这将定期轮询CDC功能自去年负荷的变化,并将其推到历史表
然后你可以再使用历史表在查询中,加入像往常一样,但是与一个额外的谓词来获取记录“as-of”,无论你想要什么日期。
相关问题
- 1. 在店铺数据库中维护历史数据
- 2. SQL Server 2008数据保护
- 3. 如何维护数据库中的历史更改
- 4. 在SQL Server 2008数据库中保护数据的最佳做法
- 5. 数据库维护
- 6. 在SQL Server 2005/2008中存储历史数据的最佳方式是什么?
- 7. SQL Server 2008维护
- 8. 保存数据库历史
- 9. SQL Server数据库保护
- 10. SQL Server显示历史数据
- 11. 举行数据库的历史数据
- 12. SQL Server 2008中的数据库备份
- 13. SQL Server 2008中的数据仓库
- 14. SQL Server 2008维护计划失败,因为数据库正在使用
- 15. 在SQL Server 2008中维护“集合”的最有效方法?
- 16. 在SQL Server 2008上还原数据库
- 17. SQL Server 2008数据库中学
- 18. 数据库部分函数(sql server 2008)
- 19. SQL Server如何维护GUID跨表在同一数据库
- 20. 将历史存储在数据库中
- 21. 复制数据库的最佳方法(SQL Server 2008)
- 22. 保护SQL Server数据库的安全
- 23. 如何维护SQL Server数据库的调试版本?
- 24. SQL Server 2008的差异数据库
- 25. SQL Server 2008的数据仓库
- 26. 如何在SQL Server 2005中恢复SQL SERVER 2008数据库
- 27. Django DB Design - 维护常见和历史数据
- 28. SQL触发维护修改历史
- 29. sql server 2005镜像数据库事务日志文件维护
- 30. 如何创建和维护SQL Server数据库副本
对于触发器可以执行的操作来说,这看起来好像还有很多附加层,可以填充您提及的相同历史记录表。 – Chris 2010-10-06 20:30:33
这是真的;尽管取决于列的数量,但它也可能需要大量的触发器。无论哪种方式都可以用编程方式编写脚本,所以复杂性不应该太大。两种方法都有其优点和缺点,哪种方式是正确的取决于您的要求。这里有一个很好的讨论: http:// sqlserverplanet。com/design/triggers-service-broker-cdc-or-change-tracking/ – utexaspunk 2010-10-06 23:20:36
我使用单独的表格+触发器来管理记录历史记录,以及两个其他表格来记录何时和谁做了哪些记录的更改。 +1触发器! – Achilles 2011-10-03 00:03:05