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

Sql server SSIS包动态连接中的异常处理,sql-server,ssis,sql-server-2008-r2,Sql Server,Ssis,Sql Server 2008 R2,SSIS场景 我有一个object类型的SQL变量。它包含到不同服务器/数据库的所有连接。我想逐个连接到这些数据库并运行查询 预期的异常处理 如果SSIS连接管理器(动态连接管理器)无法找到与服务器的连接(可能服务器已关闭),我希望跳过该连接(数据库/服务器),并将其记录到表中,然后转到下一个连接(数据库/服务器)。SSIS包不应崩溃 我的实施 我已经成功地将SSIS包配置为使用连接管理器(动态连接管理器)和Foreach循环来循环对象类型的SSIS变量。但是如果找不到服务器/数据库,我无法跳过

SSIS场景

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

预期的异常处理

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

我的实施

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

我在SSIS的经验只有一周了


任何帮助都将不胜感激。

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

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


另一种方法是先对每台服务器执行ping操作,然后将其放入一个单独的包中,并将ping结果存储在一个表中。仅选择ping结果为正的记录(服务器)。否则就跳过服务器

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

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


另一种方法是先对每台服务器执行ping操作,然后将其放入一个单独的包中,并将ping结果存储在一个表中。仅选择ping结果为正的记录(服务器)。否则就跳过服务器

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

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

我也在寻找相同的修复方法。对于连接到源数据库时出现的问题,正常的OnError事件处理似乎不起作用

我还想提到另一个解决办法。您可以处理数据流任务中的错误(OnError Eventhandler,将该Eventhandler中的系统变量“Propagate”设置为false)。我认为这仍然是必需的,但不确定。我还使用它来记录异常

之后,您可以将ForEachLoop中的MaximumErrorCount设置为“0”(表示无限)。我不太清楚它为什么会起作用,但为了找到一种处理您描述的场景的方法,我发现了这个

==


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

我也在寻找相同的修复方法。对于连接到源数据库时出现的问题,正常的OnError事件处理似乎不起作用

我还想提到另一个解决办法。您可以处理数据流任务中的错误(OnError Eventhandler,将该Eventhandler中的系统变量“Propagate”设置为false)。我认为这仍然是必需的,但不确定。我还使用它来记录异常

然后,可以将ForEachLoop中的MaximumErrorCount设置为“0”(这意味着无限)。我不太清楚它为什么会起作用,但为了找到一种处理您描述的场景的方法,我发现了这个

==


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

我这样做了。使用脚本任务。我使用脚本任务连接到服务器。我在try-catch循环中添加了SSIS连接管理器类,并为此调用了连接。当它抛出一个异常,即它找不到服务器时,我会捕获它并返回(int)Scriptresult.success,这样它就不会停止您在SSIS中谈论的检查点过程的执行。他们习惯于从他们离开的州开始。很高兴知道你绕过了这个,但我不是说检查站。不要介意。你有解决办法@金纳瓦兹-你有没有可能发布解决方案?谢谢,我做到了。使用脚本任务。我使用脚本任务连接到服务器。我在try-catch循环中添加了SSIS连接管理器类,并为此调用了连接。当它抛出一个异常,即它找不到服务器时,我会捕获它并返回(int)Scriptresult.success,这样它就不会停止您在SSIS中谈论的检查点过程的执行。他们习惯于从他们离开的州开始。很高兴知道你绕过了这个,但我不是说检查站。不要介意。你有解决办法@金纳瓦兹-你有没有可能发布解决方案?谢谢