sql-server – 更改数据捕获用例?

我正在开发一个自定义应用程序,需要确定对特定列的更改,对数据库中的特定行(MS SQL 2008R2).

创建行时创建的&插入修改时间戳.无论何时任何列发生更改,都会更新修改后的时间戳.

我需要能够获取在我的应用程序上次运行之间和现在之间更改了一个特定列的所有记录.此外,我真的只关心这个特定列值是否从“N”变为“Y”.

我想做所有这些,而不是改变数据库模式,或者由于它们的开销而使用触发器.

我的研究让我想到了Change Data Capture,这是一个很好的用例来使用Change Data Capture吗?

是否有可能将CDC上的开销限制为只改变为特定值的项目,我的表有大约200k行,索引为300mb,数据为200mb,并且行被大量修改,所以我关心金额将捕获的数据.

我所知道的唯一替代方法是在单独的审计表中捕获父事件(创建的行),然后在每次应用程序运行时将其与原始表进行比较以推测更改,是否有优势这个,或者有更简单的方法吗?

最佳答案
变更跟踪将是一个更轻量级的解决方案,满足您的需求,并且比使用时间戳更强大(即使以您描述的方式从CDC驱动).您可以在列级别启用跟踪.版本号 – 用于确定自上次通过以来发生了哪些变化 – 在竞争条件下是安全的.至关重要的是,它是在交易完成时发布的.自制程序解决方案最终可能使用在另一个时间点发布的值(例如时间戳),并且不足以确保始终从另一个时间确定一个事务.这导致边缘情况,其中变化的确定可能不正确.以下一系列MS文档描述了如何设置变化跟踪. https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-tracking-sql-server(尽管是轻量级的,但使用代表您的生产环境的变化量来测试性能仍然很重要.有一些参数,例如可以调整更改保留期以平衡性能.)

转载注明原文:sql-server – 更改数据捕获用例? - 代码日志