SSIS 包动态连接中的异常处理
Posted
技术标签:
【中文标题】SSIS 包动态连接中的异常处理【英文标题】:Exception handling in SSIS Package Dynamic Connection 【发布时间】:2013-08-04 00:52:05 【问题描述】:SSIS 场景
我有一个对象类型的 SQL 变量。它包含到不同服务器/数据库的所有连接。我想一个一个地连接到那些数据库并运行一个查询。
预期异常处理
如果 SSIS 连接管理器(动态连接管理器)无法找到与服务器的连接(可能服务器已关闭),我想跳过该连接(数据库/服务器)并将其记录到表中并移至下一个连接(数据库/服务器)。 SSIS 包不应崩溃。
我的实现
我已成功将 SSIS 包配置为使用连接管理器(动态连接管理器)和 Foreach 循环来循环遍历对象类型的 SSIS 变量。但如果找不到服务器/数据库,我将无法跳过连接。它会生成找不到服务器/数据库/连接问题和 SSIS 包失败的错误。
我在 SSIS 的经验是一周前的
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:如何设置-->强制执行任务的Result属性为成功
【讨论】:
【参考方案2】:我也在寻找同样的解决方法。似乎正常的 OnError 事件处理不适用于连接到源数据库时出现的问题。
我想提一下另一种解决方法。您可以处理数据流任务中的错误(OnError 事件处理程序,将该事件处理程序中的系统变量“传播”设置为 false)。我认为这仍然是必需的,但不确定。我也用它来记录异常。
之后,您可以将 ForEachLoop 中的 MaximumErrorCount 设置为“0”(表示无限制)。我不完全确定它为什么起作用,但试图找到一种方法来处理你描述的场景,我发现了这个。
==
正如一个有趣的观察:出于调试目的,我向 ForEachLoop 添加了一个 OnError 事件处理程序,并在一个虚拟脚本中设置了一个断点。从来没有达到过。尽管如此,ForEachLoop 一直失败,直到我将 MaximumErrorCount 设置为 0。
【讨论】:
【参考方案3】:我认为一旦遇到错误就不可能继续执行包。您需要通过 SQL Server 表(或任何其他表)来控制此行为。
一旦包失败,您可以在表中设置一个标志,表示包失败。下次包运行时,您可以从这一点开始并继续执行。但是自动跳过宕机的服务器有点像把兔子从帽子里拉出来。
您可以执行此操作的另一种方法是在单独的包中事先对每个服务器执行 ping 操作,并将 ping 结果存储在一个表中。只选择那些 ping 结果为正的记录(服务器)。否则只是跳过服务器。
【讨论】:
我做到了。使用脚本任务。我使用脚本任务连接到服务器。我在 try catch 循环中添加了 SSIS 连接管理器类并为此调用了连接。当它向我抛出一个异常时,它无法找到我捕获它并返回 (int)Scriptresult.succes 的服务器,这样它就不会停止执行您在 SSIS 中谈论检查点的进程。他们习惯于从他们离开的状态开始。 很高兴知道你解决了这个问题,但我不是在谈论检查点。没关系。你有办法! @KinnanNawaz - 你有机会发布解决方案吗?谢谢以上是关于SSIS 包动态连接中的异常处理的主要内容,如果未能解决你的问题,请参考以下文章