【问题标题】:SSIS for each loop propagate not working每个循环的 SSIS 传播不起作用
【发布时间】:2017-02-23 13:18:58
【问题描述】:

我有一个循环通过连接循环。每个循环连接到不同的连接,然后加载表等。第二步是连接,然后将数据加载到我们的 DWH 中。有时连接会因为某种原因而断开,并且会在这一步失败。我需要这个包来继续这个连接失败。

我已经阅读了很多关于 propogate 设置为 false 的内容,但这仍然不起作用。正如您在我的屏幕截图中看到的,我将“Load ...”onError 事件处理程序传播设置为 false,并将序列容器 onError 传播设置为 false。

我还尝试将序列容器最大错误设置为 0,以便该部分完成,并在“Load ...”的 onError 上设置一个变量中的标志,以便在连接完成时继续进行,或者在此处停止如果连接失败。

我过去曾这样做过,只是将整体包完成状态设置为完成时成功,但这不会捕获此循环中可能发生的其他错误,我需要捕获/失败包。

如有任何帮助,我们将不胜感激。

【问题讨论】:

  • 您是否尝试过将FailParentOnFailure 设置为False?
  • 我确实将所有这些设置为 false 它仍然没有任何区别。我后来想通了。请在下面查看我的答案。

标签: ssis ssis-2008 event-propagation foreach-loop-container


【解决方案1】:

在对连接失败进行更多研究时,我找到了 Jamie Thomson 的脚本:Verify a connection before using it [SSIS]

我根据自己的用法稍微修改了一下:

  1. 只使用一个连接,而不是遍历所有连接。
  2. 我将任务结果设置为始终成功。
  3. 我没有使用FireError,而是使用FireWarning
  4. 我创建了一个变量 (connFail) 来设置为 0 或 1,具体取决于连接是否失败。

我将这个脚本任务放在我的表加载之前,以便在任务执行之前捕获任何失败的连接。这些修改允许我在连接失败时触发电子邮件警报 (connfail = 1),或者在连接成功时继续处理包 (`connFail = 0')。

我使用的完整脚本如下:

bool failure = false;
bool fireAgain = true;

try
{
    Dts.Connections["Connection"].AcquireConnection(null);
    Dts.Events.FireInformation(1, ""
        , String.Format("Connection aquired successfully on '{0}'", Dts.Connections["Connection"].Name)
        , "", 0, ref fireAgain);
}
catch (Exception e)
{
    Dts.Events.FireWarning(-1, ""
        , String.Format("Failed to aquire connection to '{0}'. Error Message='{1}'",Dts.Connections["Connection"].Name, e.Message)
        , "", 0);
    failure = true;
}

if (failure)
{
    Dts.TaskResult = (int)ScriptResults.Success;
    Dts.Variables["connFail"].Value = 1;
}
else
{
    Dts.TaskResult = (int)ScriptResults.Success;
    Dts.Variables["connFail"].Value = 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多