【问题标题】:How to store change data (CDC) SQL Server 2012如何存储更改数据 (CDC) SQL Server 2012
【发布时间】:2015-03-25 03:47:26
【问题描述】:

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

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

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

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

感谢您的编辑请求。我在想这很混乱:

我的要求如下:

  1. 捕获一组特定表上的所有更改(CDC 来拯救它并且有效)

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

  3. 如果可能,数据 ETL 作业应实时完成(而不是分批或按计划)

【问题讨论】:

  • 帮我理解一下,为什么不“存储”呢?另外,我不理解“我对数据收集的理解是为了随着时间的推移监控您的数据库活动,而不是返回并查看对特定行集的更改”。也许,通过清楚地说明您要完成的工作,您的问题会得到改善。 听起来您对需要将数据保留多长时间等有想法,因此请单击编辑按钮并帮助我们了解您的目标。
  • 为清晰起见已编辑!谢谢blinkc。
  • 我认为有 NET 和 ALL 等选项可用于检查您在特定记录上执行的操作,这些操作可以通过数字 0 到 5 进行区分......

标签: sql-server ssis etl cdc


【解决方案1】:

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

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

【讨论】:

  • 您的回答仅涉及我已经表明我已经运行的第一个要求。 msdn 提供的图像使您相信将更改存储在单独的数据库中是 CDC 设置的一部分,但事实并非如此。仍然为此设置自己的 ssis 自定义作业是唯一的选择吗?
  • SSIS 不是唯一的选择。我已经为您提供了用于手动获取更改的函数的名称。就该图而言,该图暗示了将ETL过程转换为DW(如上所述)。您可以跳过“T”(即转换)并在其他地方加载原始 CDC 记录。至于您对实时的要求,CDC 并不是真正为此而构建的,但是您可以用我认为会产生很多开销的方式来做到这一点。您可以为 cdc get 函数的处理间隔指定所需的任何端点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 2014-07-07
相关资源
最近更新 更多