2017-04-14 36 views
0

我的SSIS包的目的是从一台集中式服务器获取数据并将该数据组播到多台服务器。当许多服务器中的一台服务器出现故障时继续执行SSIS任务

我有一个中央服务器和5个目的地。

我截断每个目标服务器的表,然后使用多播将每个表发送到所有目标。每个数据流对象都会更新每个服务器上的一个表。

我需要强调的是没有for-loops。这个数据流是相对线性的。

这些目标服务器具有不可靠的互联网连接,所以如果至少有一个目的地处于脱机状态,则需要进行规划。

我试图禁用错误消息,因为这里

看到我试过设置最大错误计数为较高的数字。

但是,每次我尝试执行时,程序包都会完全停止并抱怨其中一个连接断开(我故意打破该连接以进行测试)。尽管至少有一次连接不良,我如何强制继续使用该软件包?

谢谢

+0

禁用错误消息只会引起更多的麻烦。我不会建议你这样做。 – rvphx

回答

0

将每个服务器放在1个数据流任务中。将一个数据流连接到另一个数据流时,而不是使用成功/失败优先级约束,请将其设置为完成。关于性能的一句话:这会减慢你的处理速度,因为你再也不能组播了。但这也将确保如果其中一个失败,其他人仍然可以继续工作。

如果你仍然想使用多播方法,我会建议在脚本组件中编写一个脚本。但是一旦遇到故障并且需要调试时,这将会陷入混乱。

0

而不是遍历一个动态生成的连接循环(谷歌建议的许多解决方案),我减少了SSIS任务,一次只修改一个表,所以没有更多的多播。

关键是在SQL服务器管理器的任务级别修改连接字符串。

我在服务器上的作业菜单下为每个连接设置了一个任务。每个任务都有一个连接字符串。在将包设置为SSIS包后,我在“数据源”下修改了此连接字符串。每个步骤都使用相同的SSIS包连接字符串作为默认值(因为我反复创建使用同一个包的步骤),但是如果我更改了服务器地址,则一切正常。要清楚,我只是修改了“Data source = server.address.here;”和“初始目录= TableToModifyOnThatSpecificServer;”。每个连接字符串中的所有其他信息都是相同的。有趣的是,“Password =#passwordGoesHere;”连接字符串的一部分将消失。它仍然在那里,所以不要吓坏了。

我知道这并不能解决SSIS级别的问题,但我希望在几天前知道这个问题。祝好运的读者在此寻找答案!