【问题标题】:SSIS and CDC - Incorrect state at end of "Mark Processed Range"SSIS 和 CDC -“标记已处理范围”结束时的状态不正确
【发布时间】:2014-05-21 16:54:48
【问题描述】:

问题

我目前在名为 subscription_events 的表上运行 CDC。相应的 CT 表正在填充新的插入、更新和删除。

我有两个 SSIS 流将数据从 subscription_events 移动到不同数据库中的另一个表中。第一个流程是初始流程,具有以下布局:

Import Rows Into Vertica 步骤只包含一个源和一个目标,并将每一行复制到另一个表中。请注意,源表当前处于活动状态,并且每隔几分钟就会有新行流入。 标记初始加载开始/结束步骤将当前状态存储在一个变量中,该变量存储在一个单独的表中,用于存储 CDC 名称和状态。

第二个流是增量流,布局如下:

将行导入 Vertica 步骤使用 CDC 源,应从 CT 表中提取最新的插入、更新和删除,并将这些应用于目标。这就是问题所在;我从未从 CDC 源接收到任何信息,即使 subscription_events 表中插入了新行并且相应的 CT 表正在增长新变化数据的大小。

据我了解,事情应该是这样的:

  1. 标记初始加载开始
    1. CDC 状态应为 ILSTART
  2. 数据流
  3. 标记初始加载结束
    1. CDC 状态应为 ILEND
  4. 获取处理范围(首次运行)
    1. CDC 状态应为 ILUPDATE
  5. 数据流
  6. 标记处理范围(首次运行)
    1. CDC 状态应为 TFEND
  7. 获取处理范围(后续运行)
    1. CDC 状态应为 TFSTART
  8. 数据流
  9. 标记处理范围(后续运行)
    1. CDC 状态应为 TFEND
  10. 重复最后三个步骤

这不是我的 CDC 状态的设置方式,但是……这是我在同一过程中的状态。

  1. 标记初始加载开始
    1. CDC 状态为 ILSTART
  2. 数据流
  3. 标记初始加载结束
    1. CDC 状态为 ILEND
  4. 获取处理范围(首次运行)
    1. CDC 状态为 ILUPDATE
  5. 数据流
  6. 标记处理范围(首次运行)
    1. CDC 状态为 ILEND
  7. 获取处理范围(后续运行)
    1. CDC 状态为 ILUPDATE
  8. 数据流
  9. 标记处理范围(后续运行)
    1. CDC 状态为 ILEND
  10. 重复最后三个步骤

我永远无法摆脱 ILUPDATE/ILEND 循环,因此我永远无法从 CT 表中获取任何新数据。为什么会发生这种情况,我可以做些什么来解决这个问题?

非常感谢您的帮助! :)

编辑 1

这里有几篇文章有点描述了我的情况,但并不完全准确。他们也没有帮助我解决这个问题,但它可能会帮助你想出一些我可以尝试的方法。

第二篇文章包含这张图片,它显示了我陷入的ILUPDATE/ILEND循环。

编辑 2

上周(2014 年 5 月 26 日)我在 subscription_events 表上禁用然后重新启用了 CDC。这并没有改变任何东西,所以我在整个数据库上禁用了 CDC,在数据库上重新启用了 CDC,然后在 subscription_events 表上启用了 CDC。这确实使 CDC 工作了几天(我认为通过这个过程已经解决了问题)。但是,在上周末(2014 年 5 月 30 日)我需要通过这个过程重新加载整个表,我又遇到了同样的问题。我仍然被困在这个循环中,我不确定为什么或如何摆脱它。

编辑 3

在我遇到这个问题之前,我有一个单独的问题,我在这里发布过:

CDC is enabled, but cdc.dbo<table-name>_CT table is not being populated

我不确定这些是否相关,但认为提供它不会有什么坏处。

【问题讨论】:

    标签: sql-server ssis cdc change-data-capture


    【解决方案1】:

    我遇到了同样的问题。

    我有一个用于启动的初始加载包和一个单独的增量加载包,用于按计划加载更新。

    您可以通过仅在初始加载包的末尾放置“标记 CDC 开始”CDC 控制任务来修复它。这将使状态值处于 TFEND 状态,这是您在增量负载开始时想要的。

    【讨论】:

    • 另外,请确保您的 cdc.dbo_CT 表中只有一行 - 因为我更改了状态名称并导致了一些不可预测的状态,所以我一次有两行值。
    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2019-11-28
    相关资源
    最近更新 更多