SQL Server Integration Services 的 2012 版 SSIS 提供了一个 SSISDB 目录,用于跟踪包的操作(以及其他内容)。使用项目部署模型的解决方案的默认包执行将启用对 SSISDB 的日志记录。
当一个包执行时,将System::ExecutionInstanceGUID
填充一个值,如果使用显式日志记录(到sys.sysdtslog90
/ sys.sysssislog
)将记录特定包执行的所有事件。
我想知道的是如何将 ExecutionInstanceGUID 绑定到SSISDB 目录中的任何内容。或者,在 SSISDB 中执行的 SSIS 包是否知道其值catalog.executions.execution_id
最终,我尝试使用现有的自定义审计表并将其链接回 SSISDB 目录中的详细历史记录,但似乎找不到链接。
我使用由单个包组成的 2012 部署模型创建了一个 SSIS 项目。在那个包中,我添加了一个 OLE DB 连接管理器,将它指向 tempdb 并将一个脚本任务放到画布上。我还使用该 OLE DB 连接管理器打开了显式日志记录并捕获了该
OnInformation
事件。SCR 火灾信息
我将我的脚本任务配置为获取两个参数:我承认在这一点上,直到玛丽安的回答我才
System::ExecutionInstanceGUID
注意到第二个变量。在任务内部,我引发了 2 个信息事件,以便我可以获取记录的值。这应该同时记录到显式表 (dbo.sysssislog) 和“免费”日志记录 (catalog.operation_messages)。System::ServerExecutionID
部署和执行
然后我将我的项目部署到服务器并执行它。
我打开了操作报告并单击了
SCR Fire info
任务详细信息。红色圈出的项目显示我们正在查看操作 8 的详细信息,正如预期的那样。突出显示的行是使
OnInformation
这两个系统变量的值冒泡的事件。正如预期的那样, 的值System::ServerExecutionID
与报告中的值相匹配。的值System::ExecutionInstanceGUID
一如既往地毫无意义,但它存在 {3F515780-8062-40AA-B9EC-C320CBAC5EFD}。将它们捆绑在一起
我现在有两个不同的日志,我想将它们捆绑在一起。
系统日志查询
运行此查询从老式日志记录表中拉回相关行。
结果看起来像
catalog.operation_messages 查询
对 SSISDB 目录运行此查询显示了上述报告中的所有消息,并确认我可以将值链接
message
到operation_id
以及链接到dbo.sysssislog.executionid
这些结果是
包起来
当包在 SSISDB 目录的上下文之外执行时(又名通过 SSDT-BI 或 .ispac 的命令行),the 的值
System::ServerExecutionID
将为 0。这是有道理的,但未来的读者要么使用 LEFT OUTER JOIN如果要捕获包的所有执行,则将 sysssislog 链接到 catalog.operation_messages 时。帽子提示,我衷心感谢,感谢玛丽安让我走上了正确的轨道。考虑到在我的汇总日志表中存储 GUID(16 字节)和 bigint(8 字节)之间的选择,这对我来说很容易:请单调增加大整数。
太多的评论,但尝试一些东西。从该系统表catalog.executions的 msdn 页面我得到:
从这篇文章 - SSIS 2012 - 查看过去执行的连接管理器信息- 我了解到:
使用以下示例查询:
我在此表中没有看到您的 ExecutionInstanceGUID。不过,我看到的是这个古老的 Connect 项目,其中有以下故事:
所以我的结论是 ExecutionInstanceGUID 与 execution_id 无关,而是一些 InstanceId 列,以防您在 SSISDB 中有一个。