SSIS自动重启/重新触发包

时间:2019-03-19 14:05:37

标签: ssis

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

现在,最初加载数据的过程确实将元数据插入到显示开始和结束日期/时间的表中。我想在我的程序包中设置一些内容,以检查元数据表中当前日期的结束日期/时间。如果当前日期存在,则该过程继续...如果不存在日期/时间,则该过程停止(此处为启动程序),但是一个小时后,程序包会自动自动重新触发自身,以检查初始数据加载是否完成。

我已经对检查点等进行了研究,但是似乎可以涵盖的是,如果程序包失败,它将在重新启动程序包时从其离开的地方继续读取。我不想手动重新触发该过程,我希望它检查元数据并在可能的情况下重新启动自身。我什至可以进行处理,如果它检查元数据3次,它将完全停止。

非常感谢您的帮助

3 个答案:

答案 0 :(得分:1)

您想要的东西不可能完全按照您的描述方式进行。当程序包运行完毕时,它是惰性的。它本身无法重新触发,必须重新触发。

这并不意味着您必须手动进行。我要处理的方式是安排一个代理作业每天运行一次,每天工作X个小时。这项工作每次都会调用该程序包,而元数据将告诉该程序包是需要执行任何操作还是不执行任何操作。

答案 1 :(得分:1)

有两种方法可以解决此问题。

正如您在上面概述的那样,它们都从设置初始检查开始。查看所需数据是否存在。基于此,如果您的数据存在,则将布尔变量(我称其为DataExists)设置为TRUE,否则将其设置为FALSE。或10,或您拥有什么。

创建两个Precedent Contraints完成该任务;一个要求DataExists==TRUE,显然,另一个要求DataExists==FALSE

TRUE路径是您快乐的路径。该程序包将执行您的代码。

FALSE路径上,您可以选择。

就我个人而言,我将使用FALSE路径导致软件包被迫失败。从那里,我将作业调度程序设置为等待一个小时,然后重试。但是我还要对重试次数设置一个限制。 X重试后,继续并实际引发错误。这样,如果您的数据从未真正出现在表中,您将大为抬头。

如果您不想(或无法)从调度程序那里获得这种级别的帮助,则可以模仿SSIS中的功能,但这并非没有风险。

在您的FALSE路径上,使用简单的WAITFOR DELAY '01:00:00.00'命令触发一个Execute SQL Task,然后让该任务在等待完成时再次调用初始检查。这将消耗您的SQL Server上的一个线程,并且可能最终会在线程不足的情况下被SQL引擎丢弃。

走第二条路线,我将设置另一个Iteration变量,每次尝试将其递增,并在先例约束中设置一个限制,以再次在数据不正确时引发实际错误。不会在合理的尝试次数内出现。

答案 2 :(得分:0)

非常感谢您的帮助!通过一些其他研究,我发现以下文章可供参考,并为我的需求创建了解决方案。尽管我的进程不需要重试失败,但我将进程设置为在3次尝试后强制失败。

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

非常感谢 祝福