序列生成器中止时的行为如何?

Posted

技术标签:

【中文标题】序列生成器中止时的行为如何?【英文标题】:How Sequence Generator behave when it is aborted? 【发布时间】:2015-06-03 17:51:14 【问题描述】:

序列生成器在中止时的行为如何?

如果从序列生成器将 SL.NO 1 到 50 加载到目标表并且工作流突然中止,那么在下一次运行期间,当前值是多少?是 1 还是 51?

【问题讨论】:

【参考方案1】:

是否取决于序列生成器转换是否可重用以及您是否配置了缓存值的数量。

如果它是不可重用的并且您没有使用缓存值的数量,那么它将从 1 开始,因为由于致命错误,在会话结束时,IS 无法使用最终的当前值更新存储库加一。

如果它是不可重用的,但您使用的缓存值数量为 100,那么它将从 101 开始。

如果它是可重用的并且缓存值的数量是 100,那么它的行为仍然与上面的场景 #2 一样。

当使用缓存值的数量时,IS 会提取配置的数量(在我们的示例中为 100)并在会话开始时更新存储库。

**不可重用与可重用**

假设您有一个由两个不同映射加载的表,并且您正在使用序列生成器来加载该表的键。 如果您使用不可重用的序列生成器并并行运行这些映射,您将遇到键的争用。为什么?因为对于不可重用的序列生成器,IS(集成服务)从存储在存储库中的值开始,并在会话结束时使用下一个可用值更新存储库。 当您使用不可重用和缓存值的组合(例如设置为 100)时,IS 将从存储在存储库中的值开始,并为此会话保留或缓存 100 个值并更新存储库的下一个可用值。如果会话中只使用了 30 个,则丢弃剩余的 70 个。这意味着永远不会使用 70 个键值。如果所有 100 都用完了,那么 IS 再次访问 repo。

在可重用转换的情况下,IS 要求您配置缓存值的数量。

可重用和不可重用之间的另一个主要区别是您不能重置可重用转换的序列。

【讨论】:

感谢您的回答。你能解释一下可重用和不可重用序列生成器的行为吗?如果在两个不同的映射中使用可重用的序列生成器,将如何加载值? 此处因字符限制更新了答案。

以上是关于序列生成器中止时的行为如何?的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 tcc 针对 gcc 生成的 .o 文件编译源时的奇怪行为

C# - 允许方法异步中止

信号:中止(核心转储),从向量生成两个和对

Rails bin / rails生成模型导轨中止

格雷码生成

如何中止 Crystal 报表