我正在实施基于 SSIS/CDC 的数据仓库解决方案,并且对目标数据库的参照完整性有疑问。
例如,我INVENTORY_TRANSACTION
在一个表和PART
另一个表中都有自己的 SSIS 包,用于增量加载。我不想出现INVENTORY_TRANSACTIONS
数据仓库中没有关联父PART
记录的情况。
我已经阅读了很多关于这个主题的内容,但我仍然不清楚。
我是否应该在具有相关数据的表上使用相同的 capture_instance,以便它们都针对相同的 LSN 链?我应该使用相同的州名称吗?或者,我完全错过了什么吗?
来自微软文档。猜猜我只需要找到正确的文档... https://learn.microsoft.com/en-us/sql/integration-services/data-flow/cdc-flow-components#grouping-tables-for-cdc-加工
用于 CDC 处理的分组表
数据库项目的大小从几个表到数千个表不等。在设计初始加载和 CDC 包时,将表分组到更小的组中以便于管理和提高效率是有益的。本节列出了影响将表分类为小组的各种注意事项,其中每个小组中的表最初加载,然后作为一个组更新。
CDC 组件支持的 CDC 模式假定该分组已经确定。每个组定义一个单独的 CDC 上下文,该上下文与其他组分开维护。对于每个组,创建初始加载和滴流更新包。根据更改处理约束的速率(例如,CPU 和 IO 消耗、对其他系统的影响)和所需的延迟,安排定期运行滴流更新。
表格根据以下考虑进行分组:
根据目标数据库。所有写入不同目标数据库或经过不同处理的表都应分配给不同的 CDC 组。
与参照完整性约束相关的表应分配到同一组,以避免在目标处出现参照完整性问题。
可以对可以容忍较高延迟的表进行分组,以便可以降低它们的处理频率并降低整体系统负载。
变化率较高的表应该分组在较小的组中,而变化率较低的表可以分组在较大的组中。
为每个 CDC 组创建以下两个包:
一个初始加载包,它从源表中读取整个范围的数据并将其应用于目标表。
一个 trickle-feed 更新包,它读取对源表所做的更改并将更改应用到目标表。这个包应该定期执行。
疾病预防控制中心
每个 CDC 组都有一个与其关联的状态,它由具有特定格式的字符串表示。有关详细信息,请参阅 CDC 控制任务。下表显示了可能的 CDC 状态值。
StateDescription0-(INITIAL)在当前 CDC 组上运行任何包之前存在的状态。这也是CDC状态为空时的状态。
关于CDC Control任务操作的更多信息,请参见CDC Control Task。1-ILSTART(Initial-Load-Started)这是初始加载包启动时存在的状态。这发生在对 CDC 控制任务的 MarkInitialLoadStart 操作调用之后。
关于CDC Control任务操作的更多信息,请参见CDC Control Task。2-ILEND(Initial-Load-Ended)这是初始加载包成功结束时存在的状态。这发生在 MarkInitialLoadEnd 操作调用 CDC 控制任务之后。
关于CDC Control任务操作的更多信息,请参见CDC Control Task。3-ILUPDATE(Initial Load Update)这是在初始加载后第一次运行Update包后仍然在处理初始处理范围时存在的状态。这发生在对 CDC 控制任务的 GetProcessingRange 操作调用之后。
如果使用 _$reprocessing 列,则将其设置为 1 以指示包可能正在重新处理目标中已经存在的行。
有关 CDC 控制任务操作的详细信息,请参阅 CDC 控制任务。4-TFEND(滴流更新结束)这是常规 CDC 运行的预期状态。它表示上一次运行成功完成,可以开始新的处理范围的新运行。 5-TFSTART (Trickle-Feed-Update-Started)这是在 GetProcessingRange 操作之后更新包的后续运行中存在的状态调用 CDC 控制任务。
这表示常规 CDC 运行已启动,但尚未完成或尚未完全完成 (MarkProcessedRange)。
有关 CDC 控制任务操作的更多信息,请参阅 CDC 控制任务。6-TFREDO(重新处理-滴流-馈送-更新)这是在 TFSTART 之后发生的 GetProcessingRanget 上的状态。这表明上一次运行未成功完成。
如果使用 __$reprocessing 列,则将其设置为 1 以指示包可能正在重新处理目标中已存在的行。7-ERRORCDC 组处于 ERROR 状态。
这是 CDC 组件的状态图。当达到预期之外的状态时,将达到 ERROR 状态。预期状态如下图所示。但是该图并未显示 ERROR 状态。
例如,在初始加载包结束时,当尝试将状态设置为 ILEND 时,如果状态为 TFSTART,则 CDC 组处于错误状态并且 Trickle-Feed Update 包不运行(初始加载包确实运行)。
一旦 Initial Load 包成功运行,Trickle-Feed Update 包就会按照预先确定的计划重复运行,以处理对源表的更改。每次运行 Trickle-Feed Update 包都是 CDC 运行。