SSIS包 - 跟踪呼叫工作

时间:2011-08-25 15:31:19

标签: sql-server ssis

我正在寻找有关如何自动跟踪调用该包的作业的想法。

我们有一些从不同作业调用的genric包,每个作业作为参数传递在不同的文件路径中,因此根据路径处理大小不同的文件。

在包中我有一些自定义审计设置,它基本上跟踪包的开始时间和结束时间,从而跟踪执行的持续时间。我希望能够跟踪调用包的作业,因此如果包运行时间长,我可以确定哪个作业称为它。

还要注意我更喜欢这种自动使用某种系统变量等,因此人为错误不是问题。我还希望将这些审计任务内置到我们所有的包中作为模板,所以我不想使用用户变量 - 因为不同的包可能使用不同的变量。

只是寻找一些想法 - 欣赏任何意见

2 个答案:

答案 0 :(得分:1)

我们使用父包和子包而不是调用相同包的不同作业。您可以将有关哪个父级调用它的信息发送到子包,然后在子包中将该数据记录到表中以及开始日期和结束日期。

我们的解决方案有一个完整的元数据库,通过记录每个步骤来记录所有细节。父级告诉孩子使用哪种配置并根据该配置记录详细信息。作业调用父包 - 从不调用子包(在配置表中没有配置,因为它始终通过父包发送的变量进行配置。无需人为干预(初始开发或失败时除外)发生)需要。

编辑现有作业。

考虑作业可以有多个步骤。将第一步作为一个SQL脚本,将审计信息插入到表中,包括包的开始时间,调用它的作业的名称以及调用的ssispacakge的名称。然后第二步调用SSIS包,然后使最后一步成为仅在结束日期时间插入相同数据的SQL脚本。

答案 1 :(得分:0)

执行此操作的一种简单方法是将SSIS包上的变量设置为varchar。在启动时使用表达式将值设置为@ [System :: ParentContainerGUID]的变量值。 SQL Agent不会设置该值,因此当作为单个作业运行时,它将是一个空字符串。但是如果被另一个包调用,它将包含调用包的GUID。您可以测试该值。您可以使用优先约束来控制程序逻辑。

我们有作为大型计划的一部分运行的软件包,但有时我们需要单独运行它们。每个包都有一个失败任务的电子邮件,但我们只希望在包单独运行时执行。当它是大运行的一部分时,我们收集所有错误的包的名称,并将它们作为一封电子邮件从主包发送。我们不希望个人电子邮件和摘要电子邮件在同一次运行中发送。