SQL Server更改数据捕获是一项功能,可从SQL Server事务日志中读取历史数据并将其存储在特殊表中。
然后,通过使用特殊的表值函数(TVF),它允许用户查询此数据,从而有可能获得特定表上的所有更改,或者仅获得特定时间内由更改导致的净更改。
CDC具有一定优势
- 可以将其配置为仅跟踪某些表或列。
- 它能够在一定程度上处理模型更改。
- 它不会像触发器那样严重影响性能,因为它可以与事务日志一起使用。
- 它很容易启用/禁用,并且不需要在表上跟踪其他列。
它还有一些缺点:
- 历史数据的数量可以快速变得巨大。
- 您无法跟踪更改的对象(至少不能删除)。
- 由于历史数据是基于事务日志的,因此需要花费一些时间来追赶。
- 它取决于SQL Server代理。如果代理未运行或崩溃,则不会跟踪任何历史记录。
我已经阅读了很多有关CDC的文章,虽然我现在知道如何使用它,但是我仍然不确定它是否适合我。
- CDC对于哪些任务/方案是正确的工具?(例如,是否允许用户将数据对象还原到某个时间点?审核?显示数据的完整历史记录?)
- 您什么时候不应该使用CDC,而应该使用基于触发器的自定义解决方案?
- 是否可以在运营数据库中使用CDC并在运营应用程序中使用CDC数据?(例如,将其显示给最终用户)还是这显然是滥用此功能?
我通常听到CDC是一种审核工具,但是这不是SQL Server Audit的目的吗?它们是否都是用于同一任务的不同工具?还是CDC可以用于其他用途?
我目前的情况是要求我构建一个可靠的数据框架,该框架应该作为将来多个应用程序的基础。确切的要求是模糊的,但是一个要求是它应该能够跟踪数据历史记录,并将旧条目以及其他表中的所有相关数据还原。我现在正在评估CDC作为一种选择,但是不确定是否要这样做,因为我找不到真正推荐的用例。
虽然我很欣赏针对我的特定情况的建议,但是答案应该提供有关何时或何时不使用Change Data Capture的一般建议。