2

问题

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

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

在此处输入图像描述

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

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

在此处输入图像描述

行导入 Vertica步骤使用 CDC 源,应该从 CT 表中提取最新的插入、更新和删除,并且这些应该应用到目标。这就是问题所在;我从未从 CDC 源收到任何信息,即使订阅事件表中插入了新行,并且相应的 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 已启用,但未填充 cdc.dbo<table-name>_CT 表

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

4

1 回答 1

0

我有同样的问题。

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

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

于 2015-04-30T18:35:38.217 回答