发生异常时整个 SSIS 包失败

问题描述 投票:0回答:3

我有一个包含大量容器和逻辑的 SSIS 包。我正在运行一个附加任务(我想独立运行),假设它充当“事件监听器”。当这个单独的任务出错时,我想出错整个包。我想,它应该默认工作,但令我惊讶的是,它不是:-

我尝试在父容器和子容器上设置

FailPackageOnFailure

FailParentOnFailure
属性,但它不起作用。
    

sql-server ssis visual-studio-2019
3个回答
3
投票

包的一个部分发生故障不会导致另一个未连接的部分停止执行。一旦执行部分完成,包

将会

失败,但是Sequence Container 3无法知道

Sequence Container 2
中发生了什么。

老实说,这就是我们想要的。如果

Sequence Container 3

正在执行 DML,如果包中其他地方的不相关故障突然使一切突然停止,您可能会使数据处于不幸的状态。


如果您不想在

Sequence Container 3

失败时运行

Sequence Container 2
,那么只需从
Sequence Container 2
Sequence Container 3
运行优先级约束,#3 才会执行,直到 #2 成功
并且
Execute SQL Task成功了。
    


3
投票

我重新设计了包,使其包含标志检查。



假设我们有一个成功标志作为用户变量,默认情况下为 False。

现在,我们在序列 2 执行结束时将此变量设置为 True,标志着该序列中所有其他任务的成功。


第二部分放入 for 循环中,该循环仅运行一次(如果有的话)。它检查 success 变量是否为 true,然后才运行内部任务。如下所示:




问题是,for 循环开始时的 success 变量检查将始终具有 false 的初始值(因为它与 seq 2 并行运行并且不会等到 seq 2 结束)。因此第二部分永远不会被执行。现在将 success 变量的初始值更改为 true 并再次运行该包。通过禁用容易出错的任务并运行包来进行游戏。您将了解它是如何工作的。


0
投票

需要设置容器的

components

中的属性FailParentOnFailure 为真 (或 FailPackageOnFailure 或两者)。 在您的屏幕截图中,

执行 SQL

组件中的属性需要设置为 TRUE。

© www.soinside.com 2019 - 2024. All rights reserved.