如何记录 SSIS 包的 termination/any 结尾?

How can I log the termination/any end of an SSIS package?

我有一个 SSIS 包(针对 SQL Server 2012),我目前正在调试它。我所追求的是如何通过任何方法记录 SSIS 包已完成 或停止

最接近的看起来是 'OnExecStatusChanged'、'OnPostExecute' 和 'OnPostValidate',但是当我 中断执行时,其中 NONE 会提供任何日志消息 在 Visual Studio.

截图如下:

我怀疑答案可能是"you can't",但我想在我放弃之前看看是否有更多奇特的解决方案。

我知道这是部分答案。这里介绍的是检测一个包被成功的错误完成。这可以通过从另一个父包调用包来完成。

但是如果包被强制停止那么这不会有任何影响。

我能想到的有两个选项。
上面已经强调了使用 pre 和 post execute 函数。如果您要使用此解决方案,我建议您使用 table(Dim_Package_Log?)并在执行前和 post 上使用存储过程插入此 table。
澄清:这不会捕获包中断,只是开始、结束和错误。

正如您正确识别的那样,尽管这不会记录包裹中断。为了捕获这一点,我实现了一个使用两个 tables.

的视图
SSISDB.catalog.event_messages

SSISDB.catalog.executions

如果您进行一些 "exotic" 连接,您可以利用来自执行的 execution_status 和来自 event_messages 的消息来查找您想要的信息。

我不记得是在哪个 msdn 页面找到的,但这就是 catalog.executions

中 execution_status 的意思
The possible values are created (1), running (2), canceled (3), failed (4), pending (5), ended unexpectedly (6), succeeded (7), stopping (8), and completed (9).

澄清:

下面是 SSISDB.catalog.executions 为作业中的每个包执行输出的示例行:

43198   FolderName  ProjectName PackageName.dtsx    NULL    NULL    NULL    NULL    10405   GUID    SERVICEACCOUNTNAME  0   200 2015-02-16 00:00:03.4156856 +11:00  20  18  7   2015-02-16 00:00:05.4409834 +11:00  2015-02-16 00:00:58.4567400 +11:00  GUID    SERVICEACCOUNTNAME      10324   NULL    NULL    ID  SERVER  SERVER  16776756    3791028 20971060    8131948 2

在此示例中,有一个值为 7 的列。如上所述,此状态会根据包执行的结束状态而变化。在这种情况下,成功。如果包裹中途破损,将被捕获到此状态。

有关此 ssidb 功能的更多信息位于 this MSDN 页面。