SSIS包动态连接中的异常处理

时间:2013-08-04 00:52:06

标签: sql-server ssis sql-server-2008-r2

SSIS情景

我有一个object类型的SQL变量。它包含与不同服务器/数据库的所有连接。我想逐个连接到这些数据库并运行查询。

预期的异常处理

如果SSIS连接管理器(动态连接管理器)无法找到与服务器的连接(可能是服务器已关闭),我想跳过该连接(数据库/服务器)并将其记录到表中并转到下一个连接(数据库/服务器)。 SSIS包不应该崩溃。

我的实施

我已成功配置SSIS包以使用连接管理器(动态连接管理器)和Foreach循环来循环遍历对象类型的SSIS变量。但如果找不到服务器/数据库,我无法跳过连接。它会产生错误,服务器/数据库未找到/连接问题和SSIS包失败。

我在SSIS的经历是一周之久

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

我不认为一旦遇到错误就可以继续执行包。您需要通过SQL Server表(或任何其他表)来控制此行为。

一旦程序包失败,您可以在表中设置一个标志,说明程序包失败。程序包下次运行时,您可以从此时开始并继续执行。但是自动跳过下来的服务器有点像从帽子里拉出一只兔子。

另一种方法是先将每个服务器ping在一个单独的包中,然后将ping结果存储在一个表中。仅选择ping结果为正的记录(服务器)。否则只需跳过服务器即可。

答案 1 :(得分:0)

如何设置 - >强制执行任务的Result属性为成功

答案 2 :(得分:0)

我也在寻找相同的解决方案。似乎正常的OnError Eventhandling不适用于连接到源数据库时出现的问题。

我还想提一下另一种解决方法。您可以处理数据流任务中的错误(OnError Eventhandler,将System-Variable" Propagate"在该Eventhandler中设置为false)。我认为这仍然是必需的,但不确定。我也用它来记录异常。

之后,您可以将ForEachLoop中的MaximumErrorCount设置为" 0" (这意味着无限制)。我不确定它为什么会起作用,但是试图找到一种方法来处理你描述的情景,我发现了这一点。

==

正如一个有趣的观察结果:出于调试目的,我向ForEachLoop添加了一个OnError Eventhandler,并在虚拟脚本中设置断点。从未达成过。尽管如此,ForEachLoop一直失败,直到我将MaximumErrorCount设置为0。