【发布时间】: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 表正在增长新变化数据的大小。
据我了解,事情应该是这样的:
- 标记初始加载开始
- CDC 状态应为 ILSTART
- 数据流
- 标记初始加载结束
- CDC 状态应为 ILEND
- 获取处理范围(首次运行)
- CDC 状态应为 ILUPDATE
- 数据流
- 标记处理范围(首次运行)
- CDC 状态应为 TFEND
- 获取处理范围(后续运行)
- CDC 状态应为 TFSTART
- 数据流
- 标记处理范围(后续运行)
- CDC 状态应为 TFEND
- 重复最后三个步骤
这不是我的 CDC 状态的设置方式,但是……这是我在同一过程中的状态。
- 标记初始加载开始
- CDC 状态为 ILSTART
- 数据流
- 标记初始加载结束
- CDC 状态为 ILEND
- 获取处理范围(首次运行)
- CDC 状态为 ILUPDATE
- 数据流
- 标记处理范围(首次运行)
- CDC 状态为 ILEND
- 获取处理范围(后续运行)
- CDC 状态为 ILUPDATE
- 数据流
- 标记处理范围(后续运行)
- CDC 状态为 ILEND
- 重复最后三个步骤
我永远无法摆脱 ILUPDATE/ILEND 循环,因此我永远无法从 CT 表中获取任何新数据。为什么会发生这种情况,我可以做些什么来解决这个问题?
非常感谢您的帮助! :)
编辑 1
这里有几篇文章有点描述了我的情况,但并不完全准确。他们也没有帮助我解决这个问题,但它可能会帮助你想出一些我可以尝试的方法。
- http://www.bradleyschacht.com/understanding-the-cdc-state-value/
- http://msdn.microsoft.com/en-us/library/hh231087.aspx
第二篇文章包含这张图片,它显示了我陷入的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