定义状态变量

此过程介绍如何定义存储 CDC 状态的包变量。

CDC 状态变量由 CDC 控制任务加载、初始化和更新,由 CDC 源数据流组件用来确定更改记录的当前处理范围。 可以在 CDC 控制任务和 CDC 源通用的任何容器上定义 CDC 状态变量。 这可能位于包级别,但也可能位于其他容器上,例如循环容器。

不建议手动修改 CDC 状态变量值,但了解其内容很有用。

下表提供 CDC 状态变量值的组件的高级说明。

组件 DESCRIPTION
<state-name> 这是当前 CDC 状态的名称。
CS 这标志着当前处理范围起点(当前开始)。
<cs-lsn> 这是上一次 CDC 运行中处理的最后一个日志序列号 LSN。
CE 这标志着当前处理范围终结点(当前结束)。 CDC 状态中的 CE 组件显示,要么 CDC 包当前正在处理,要么 CDC 包在完全处理其 CDC 处理范围之前失败。
<ce-lsn> 当前 CDC 运行中要处理的最后一个 LSN 是这一个。 始终假定要处理的最后一个序列号是最大值(0xFFF...)。
IR 这标志着初始处理范围。
<ir-start> 这是在初始加载开始之前更改的 LSN。
<ir-end> 这是在初始加载结束时发生更改的 LSN。
TS 这标志着上次 CDC 状态更新的时间戳。
<时间戳> 这是 64 位 System.DateTime.UtcNow 属性的十进制表示形式。
ER 当最后一次操作失败时,屏幕上会出现此错误,并包含错误原因的简短说明。 如果此组件存在,它将始终显示在最后。
<short-error-text> 这是简短的错误说明。

LSN 和序列号分别编码为表示 Binary(10)的 LSN 值的十六进制字符串(最多 20 位)。

下表描述了可能的 CDC 状态值。

国家 DESCRIPTION
(初始) 这是当前 CDC 组上运行任何包之前的初始状态。 这也是 CDC 状态为空时的状态。
ILSTART (初始加载已启动) 这是初始负载包启动时的状态,在调用 MarkInitialLoadStart 的 CDC 控制任务后。
ILEND (初始加载结束) 这是在调用 CDC 控制任务后,MarkInitialLoadEnd 初始加载包成功完成时的状态。
ILUPDATE(初始加载更新) 这是初始加载后逐步更新包的运行状态,同时仍在处理初始处理范围。 这是在调用 GetProcessingRange 操作到 CDC 控制任务之后。

如果使用 __$reprocessing 列,则设置为 1 以指示包可能已在目标处重新处理行。
TFEND (Trickle-Feed 更新结束) 这是常规 CDC 运行应该出现的状态。 它指示前一次运行已成功完成,可以开始具有新的处理范围的新一轮运行。
TFSTART 这是 CDC 控制任务的 GetProcessingRange 操作调用之后,涓流更新包的非初始运行。

这表示常规 CDC 运行已启动,但尚未完成或尚未顺利完成(MarkProcessedRange)。
TFREDO (重新处理 Trickle-Feed 更新) 这是 TFSTART 之后在GetProcessingRange上发生的状态。 这指示上次运行未成功完成。

如果使用 __$reprocessing 列,则设置为 1,指示包可能已在目标位置重新处理行。
错误 CDC 组处于 ERROR 状态。

下面是 CDC 状态变量值的示例。

  • ILSTART/IR/0x0000162B158700000000//TS/2011-08-07T17:10:43.0031645/

  • ILSTART/IR/0x0000162B158700000000//TS/2011-08-07T17:10:43.0031645/

  • TFEND/CS/0x0000025B000001BC0003/TS/2011-07-17T12:05:58.1001145/

  • TFSTART/CS/0x0000030D000000AE0003/CE/0x0000159D1E0F01000000/TS/2011-08-09T05:30:43.9344900/

  • TFREDO/CS/0x0000030D000000AE0003/CE/0x0000159D1E0F01000000/TS/2011-08-09T05:30:59.5544900/

定义 CDC 状态变量

  1. 在 SQL Server Data Tools 中,打开 SQL Server 2014 Integration Services (SSIS) 包,其中包含需要在其中定义变量的 CDC 流。

  2. 单击“ 包资源管理器 ”选项卡,并添加新变量。

  3. 为变量指定一个可识别为状态变量的名称。

  4. 为变量提供 字符串 数据类型。

不要为变量指定一个值作为其定义的一部分。 该值必须由 CDC 控制任务设置。

如果计划将 CDC 控制任务与 自动状态持久性一起使用,则 CDC 状态变量将从指定的数据库状态表读取,并在其值更改时更新回同一个表。 有关状态表的详细信息,请参阅 CDC 控制任务CDC 控制任务编辑器

如果不将 CDC 控制任务与自动状态持久性一起使用,则必须从上次运行包时保存其值的永久性存储中加载变量值,并在当前处理范围完成时将其写回到持久存储。

另请参阅

CDC 控制任务
CDC 控制任务编辑器