2

SSIS 场景

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

预期的异常处理

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

我的实现

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

我在 SSIS 的经验是一周前

任何帮助将不胜感激。

4

3 回答 3

0

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

于 2013-08-07T12:23:43.660 回答
0

我也在寻找同样的解决方法。似乎正常的 OnError 事件处理不适用于连接到源数据库时出现的问题。

我想提到另一种解决方法。您可以处理数据流任务中的错误(OnError 事件处理程序,将该事件处理程序中的系统变量“传播”设置为 false)。我认为这仍然是必需的,但不确定。我也用它来记录异常。

之后,您可以将 ForEachLoop 中的 MaximumErrorCount 设置为“0”(表示无限制)。我不完全确定它为什么起作用,但试图找到一种方法来处理你描述的场景,我发现了这个。

==

正如一个有趣的观察:出于调试目的,我向 ForEachLoop 添加了一个 OnError 事件处理程序,并在一个虚拟脚本中设置了一个断点。从来没有达到过。尽管如此,ForEachLoop 一直失败,直到我将 MaximumErrorCount 设置为 0。

于 2015-03-30T15:01:02.187 回答
-1

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

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

您可以执行此操作的另一种方法是在单独的包中事先对每个服务器执行 ping 操作,并将 ping 结果存储在一个表中。只选择那些 ping 结果为正的记录(服务器)。否则只是跳过服务器。

于 2013-08-05T23:35:29.933 回答