SSIS和CDC - " Mark Processed Range"结束时的错误状态。

时间:2014-05-21 16:54:49

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

问题

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

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

enter image description here

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

第二个流程是增量流程,具有以下布局:

enter image description here

导入Rico进入Vertica 步骤使用CDC源,并应从CT表中提取最新的插入,更新和删除,这些应该应用于目标。这是问题所在的地方;我从不从CDC源接收任何内容,即使新行插入 subscription_events 相应的CT表正在增长大小与新的变化数据。

根据我的理解,这就是事情应该如何运作:

  1. 标记初始加载开始
    1. CDC State应 ILSTART
  2. 数据流
  3. 标记初始加载结束
    1. CDC State应 ILEND
  4. 获取加工范围(首次运行)
    1. CDC State应 ILUPDATE
  5. 数据流
  6. 标记处理范围(首次运行)
    1. CDC State应 TFEND
  7. 获取处理范围(后续运行)
    1. CDC State应 TFSTART
  8. 数据流
  9. 标记处理范围(后续运行)
    1. CDC State应 TFEND
  10. 重复最后三个步骤
  11. 这不是我的CDC状态的设定方式,但是......以下是我在同一过程中的状态。

    1. 标记初始加载开始
      1. CDC State ILSTART
    2. 数据流
    3. 标记初始加载结束
      1. CDC State ILEND
    4. 获取加工范围(首次运行)
      1. CDC State ILUPDATE
    5. 数据流
    6. 标记处理范围(首次运行)
      1. CDC State ILEND
    7. 获取处理范围(后续运行)
      1. CDC State ILUPDATE
    8. 数据流
    9. 标记处理范围(后续运行)
      1. CDC State ILEND
    10. 重复最后三个步骤
    11. 我永远无法摆脱 ILUPDATE / ILEND 循环,所以我永远无法从CT表中获取任何新数据。为什么会发生这种情况,我该怎么做才能解决这个问题?

      非常感谢你,提前帮助你! :)

      编辑1

      以下是一些有点描述我的情况的文章,尽管不完全一样。他们也没有帮助我解决这个问题,但它可能会帮助你想到我可以尝试的东西。

      第二篇文章包含此图片,其中显示了我被困的 ILUPDATE / ILEND 循环。

      enter image description here

      编辑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

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

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。

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

你通过放置一个&#34; Mark CDC start&#34;来修复它。仅在初始加载包的末尾的CDC控制任务。这将使状态值保持TFEND状态,这是您在增量加载开始时所需的状态。