运行SQL Server作业,直到成功为止

时间:2017-07-27 05:30:59

标签: sql sql-server jobs

我的SQL Server作业已运行了近2年。

它连接到一个不断断开连接的恶意Oracle数据库,它总是因此而失败。当我在10或15分钟后再次运行它时,它会成功运行。我每天都无聊地检查它......

是否有一种方法可以使作业连接到该Oracle源,直到成功,或者另一个查看此作业状态的作业,如果失败,那么它会再次运行直到成功为止?

2 个答案:

答案 0 :(得分:0)

我们使用的解决方案是这样的:

将您的Oracle查询包装在SSIS包中,在查询之后,让包更新一个SQL表,该表保留执行历史记录,或者只保留一行跟踪上次成功运行作业的行。简而言之,如果Oracle查询成功,那么在表中添加一些内容,说明查询今天成功运行。如果没有成功,那么今天就不要在桌子上放任何东西。

然后在包的开头,在Oracle查询之前,检查查询是否已成功运行。如果它已成功运行,则不执行任何操作并退出程序包。如果它今天没有成功运行,那么按照上述的查询后步骤继续尝试运行它。如果你有关于什么时候运行包的任何其他条件(例如"仅在上午10点之后"或者类似的事情),你可以在这里包含这个逻辑。

最后,安排作业调用包,并安排每15分钟运行一次,或者经常你喜欢。它将每15分钟尝试一次,直到它成功运行,之后它将停止做任何事情,直到第二天。

作为奖励,您可以使用相同的包和作业来启动您想要以相同方式处理的所有任务。您只需要在历史/元数据表中保留有关所有这些任务的元数据。

答案 1 :(得分:0)

另一种方法是创建作业步骤并将其安排为非计划状态,并创建一个ssis作业作为所有作业的主节点,并且每分钟运行一次,检查配置表中的所有作业步骤,这些步骤至今尚未成功执行,并且它找到的所有内容都使用sp_start_job执行。

如果它们成功运行,则将统计信息记录到日志表中,这将阻止它们再次启动直到第二天。这样可以避免每15分钟安排您所有的工作,等等,它们会尽快启动,并且您可以添加额外的逻辑来处理依赖关系,并行运行的数量,重要性级别等,开始时间,最新开始时间,最大数量到retty等