【问题标题】:Run Two Sql Server Agent Jobs in Parallel and Run a Third Job at the end of both并行运行两个 Sql Server 代理作业并在两者结束时运行第三个作业
【发布时间】:2019-02-16 16:23:48
【问题描述】:

我有两个 SSIS ETL 包,我需要安排它们每天运行。这两个包将数据加载到两个不同的暂存数据库中,因此可以并行运行。但是,在这两个作业执行结束时,我需要调用一个单独的作业(存储过程)将数据从暂存数据库加载到最终数据库中。

SQL Server 作业调度代理是否提供任何功能来跟踪前两个作业是否成功完成?

非常感谢任何帮助。

谢谢!

【问题讨论】:

  • 我同意以下答案。这是 SSIS 擅长而 SQL 代理不擅长的一件事。您可以在作业步骤中添加逻辑以检查 SSIS 日志和 SQL 代理日志是否完成,但这非常不可靠。
  • 这绝对是一个不错的选择,但我对此只有一个顾虑。如果前两个包中的一个由于某种原因失败,我将不得不从头重新启动这两个包。我希望如果只有一个包成功运行,如果我将它们分开保存,我就不需要运行其他包。
  • 它们已经是单独的包,所以有许多机制来管理它。例如,有选择地禁用控制包中的一个包的环境变量。

标签: sql-server ssis sql-agent-job sql-job


【解决方案1】:

我建议您在您的 ssis 项目中包含第三个“控制”包,其中包含 Execute Package 任务,以便在 Sequence Container 中并行运行这两个包,然后在成功完成之后的 Execute SQL 任务Sequence Container 在这些都完成后启动存储过程。

这样做,您只需要一个运行“控制”包的代理作业。

【讨论】:

  • 这绝对是一个不错的选择,但我对此只有一个顾虑。如果前两个包中的一个由于某种原因失败,我将不得不从头重新启动这两个包。我希望如果只有一个包成功运行,如果我将它们分开保存,我就不需要运行其他包。
  • 如果您希望它在无人值守的基础上运行并且不能忍受双重执行,我建议使用日志表来记录您的包的成功执行并在控制包中进行检查根据这个日志表决定是执行还是跳过包执行。
  • 这也是我的建议。我还会询问这是否是一个有效的问题,因为故障不应该经常发生。如果您担心源文件中的错误数据,请使用错误重定向到隔离表并继续!
【解决方案2】:

最好的办法是将 2 个 SSIS 包包装在一个主包中 - 这些包可以在其中并行运行。 然后创建一个以此作为步骤 1 的作业 Step 2 可以是 Exec sp_run_job [需要运行的作业]

【讨论】:

  • 这也与之前的答案相似,我的担忧仍然相同。 “这绝对是一个不错的选择,但我只有一个担心。如果前两个包中的一个由于某种原因失败,我将不得不从头开始重新启动两个包。我希望如果只有一个包成功运行,如果我把它们分开保存,我就不需要运行其他包了。”
猜你喜欢
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多