如何存储更改数据(CDC)SQL Server 2012

时间:2015-03-25 03:47:27

标签: sql-server ssis etl cdc

我已经阅读了几次,现在正在设置CDC features in SQL Server 2012。然而,有一个非常令人困惑的图形

magic data warehouse

似乎证明您的CDC数据可以存储在另一个数据库(数据仓库)中。然而,这并不是我认为真正“存储”它的东西。

按照设置“data collection”单位的说明操作时,没有ETL功能。我对数据收集的理解是随着时间的推移监视您的数据库活动,而不是返回并查看对特定行集的更改。

所以我必须错过一些基本的逻辑。是否有某种神奇的CDC功能可以批量插入或从cdc changetable中移动数据(默认情况下只保留3天)本身,还是我需要为每个为CDC设置的表编写自定义SSIS / ETL作业?我写SSIS的工作很好,但似乎这很可能不是正确的方法。如果有人能指出我在另一个数据库或实例上存储cdc数据的教程,我将不胜感激。我的搜索只是指向数据收集或cdc,这些都不是实际存储100%的更改历史记录。

感谢您的编辑请求。我以为这让人很困惑:

我的要求如下:

  1. 捕获特定表格集上的所有更改(CDC到救援并且有效)

  2. 将更改数据存储在不同的关系数据库中7年。即。能够返回到特定记录并在任何时间段内对其进行所有更改。 (这是让我对MSDN图形和明显解决方案感到困惑的部分)。

  3. 数据ETL工作应尽可能实时完成(非批量或按计划)

1 个答案:

答案 0 :(得分:1)

作为一种技术,CDC主要用于促进二级数据存储(例如数据仓库)与主数据库中发生的更改保持同步。也就是说,没有什么可以说你不能做你想用CDC做的事。从本质上讲,您将在有兴趣跟踪更改的表格上设置CDC并致电cdc.fn_cdc_get_all_changes...cdc.fn_cdc_get_net_changes...(以适合您的情况为准,但我猜测所有更改都是您的描述)定期获取这些表的更改,此时您将原始cdc数据存储到您指定用于保存它的另一个表中。

但请注意,保留要求很粗糙。例如,您不能在保留期结束后删除记录,因为只要记录仍处于活动状态,您就需要一条完整的更改链回到记录的原始插入内容。