当其中一个服务器关闭时,继续执行SSIS任务

时间:2017-04-14 15:49:03

标签: sql-server ssis

我的SSIS包的目的是从一个集中式服务器获取数据并将该数据多播到多个服务器。

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

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

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

这些目标服务器具有不可靠的互联网连接,因此我需要计划是否至少有一个目的地处于离线状态。

我试图禁用错误消息,如此处所示

我已尝试将最大错误次数设置为较高的数字。

但是每次我尝试执行时,程序包都会完全停止并抱怨其中一个连接被破坏(我故意将其打破以进行测试)。尽管至少有一个错误的连接,我怎么能强制包继续?

由于

2 个答案:

答案 0 :(得分:0)

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

如果您仍想使用多播方法,我建议您在脚本组件中编写脚本。但是,一旦遇到故障并需要调试它,这将是纠结的混乱。

答案 1 :(得分:0)

我没有迭代动态生成的连接循环(谷歌建议的那么多解决方案),而是将SSIS任务减少到一次只修改一个表,所以不再进行多播。

关键是在SQL Server Manager的任务级别修改连接字符串。

我在服务器上的“作业”菜单下为每个连接设置了一个任务。每个任务都有一个连接字符串。在将包设置为SSIS包之后,我在“数据源”下修改了此连接字符串。每个步骤都以相同的SSIS包连接字符串作为默认开始(因为我一遍又一遍地使用相同的包创建步骤),但是如果我更改了服务器地址,一切都很顺利。为了清楚起见,我刚修改了“Data source = server.address.here;”和“初始目录= TableToModifyOnThatSpecificServer;”。每个连接字符串中的所有其他信息都是相同的。

有趣的是,“Password =#passwordGoesHere;”连接字符串的一部分将消失。它仍然存在,所以不要惊慌失措。

我知道这不能解决SSIS级别的问题,但我希望我几天前就已经知道了。祝所有读这个寻找答案的人好运!