CDC Control Task可以从控制CDC数据同步,比如初始化加载、LSN范围的管理。它可以代替另一种做法,就是通过调用一批CDC函数来完成同样的事情。从SSIS的角度来完成,事情编程简单,和另外两个空间配合起来(CDC Source,和CDC Splitter),仅需配置一些控件参数便可以完成整个数据抽取过程。
CDC Source从启用了CDC的数据表中查询数据
CDC Splitter和Conditional Split组件功能相似。它生成三个数据流分支:Inserts, Updates, and Deletions
加载CDC数据一般来讲需要两个包,一个做initial load,另一个做incremental load。
说到CDC Control Task,需要说明CDC Control Operation属性有4个选项:
1)Mark Initial Load Start: initial load开始时获取start LSN和更新CDC_State变量值
2)Mark Initial Load End:initial load结束时获取start LSN和更新CDC_State变量值
3)Mark CDC Start: 记录CDC范围开始值
4)Get Processing Range: 获取增量加载时的LSN范围值
5)Mark Processed Range:完成增量加载后的LSN范围值
不过经过测试,这里好像有个SSIS的Bug。在按照下面的博客的做法做之后发现运行过程报错
报错信息如:Error: "No CDC End (CE) in state variable User::CDC_State.
Google了一下发现很多人和我遇到同样的问题。
搞不懂为什么不行。在MSDN上找到一个相关连接,
而即便我按里面的ANSWER去做,把CDC Control Operation设置为Get Processing Range,第一遍运行还是报错
第二遍运行才成功
这里有人report了这个问题给微软,不过问题似乎没有得到解答。
这里我还是觉得这个东西不太稳定,不如用CDC函数来组合编写CDC加载数据的逻辑