SSIS自动重启/重启包

问题描述 投票:3回答:3

美好的一天!我有一个SSIS包,它从数据库中检索数据并将其导出到一个平面文件(简单的过程)。我遇到的问题是我的包每天早上检索的数据取决于在我的包检索之前将数据加载到表中的单独进程。

现在,最初加载数据的过程会将元数据插入到表中,该表显示开始和结束日期/时间。我想在我的包中设置一些东西来检查元数据表中当前日期的结束日期/时间。如果当前日期存在,则该过程继续...如果不存在日期/时间,则该过程停止(这里是踢球者)但是包裹在一小时后自动重新触发以检查初始数据加载是否完成。

我已经对检查点等进行了研究,但似乎所有这些都是如果包失败了它会在重新启动包时离开的地方。我不想手动重新触发该过程,我希望它检查元数据并在可能的情况下重新启动。我甚至可以进行处理,如果它检查元数据3次,它将完全停止。

非常感谢你的帮助

ssis
3个回答
1
投票

您想要的并不完全按照您的描述方式实现。当包装完成运行时,它是惰性的。它无法重新触发自身,必须重新触发它。

这并不意味着你必须手动完成。我处理这个问题的方法是安排一个代理作业每小时运行一次,每天工作X小时。这项工作每次都会调用包,元数据会告诉包是否需要做任何事情或者什么都不做。


1
投票

有几种方法可以解决这个问题。

它们都是从设置初始检查开始的,就像您上面概述的那样。查看您需要的数据是否存在。基于此,如果你的数据在那里,设置一个布尔变量(我将它称为DataExists)到TRUE,如果不存在,则设置FALSE。或者10,或者你有什么。

创造两个Precedent Contraints即将完成任务;一个需要DataExists==TRUE,显然,另一个需要DataExists==FALSE

TRUE路径是你快乐的道路。包执行您的代码。

FALSE路径上,你有选择。

就个人而言,我有FALSE路径导致包的强制失败。从那里,我将工作安排程序设置为等待一个小时,然后再试一次。但我也会对重试设置一个限制。在X重试之后,继续并实际引发错误。这样,如果您的数据从未真正落入您的桌面,您将获得提升。

如果您不希望(或不能)从调度程序获得该级别的帮助,您可以模仿SSIS中的功能,但它并非没有风险。

在你的FALSE路径上,用一个简单的Execute SQL Task命令触发一个WAITFOR DELAY '01:00:00.00',然后让该任务在等待时再次调用初始检查。这将消耗SQL Server上的一个线程,如果它被线程缺乏,最终可能会被SQL引擎删除。

走第二条路线,我会设置另一个Iteration变量,每次尝试都会增加它,并在先前约束中设置一个限制,如果你的数据没有显示在一个合理的数字内,那么再次引发实际错误尝试


0
投票

非常感谢你的帮助!通过一些额外的研究,我发现了以下文章,我能够参考并创建满足我需求的解决方案。虽然我的过程不需要尝试重新尝试,但我将过程设置为在3次尝试后强制失败。

http://microsoft-ssis.blogspot.com/2014/06/retry-task-on-failure.html

非常感谢祝福

© www.soinside.com 2019 - 2024. All rights reserved.