将ExecutionInstanceGUID与SSISDB相关


13

SQL Server Integration Services的2012年发行版SSIS提供了一个SSISDB目录,该目录可跟踪程序包的操作(以及其他操作)。使用项目部署模型的解决方案的默认程序包执行将打开到SSISDB的日志记录。

程序包执行时,将System::ExecutionInstanceGUID使用一个值填充,如果使用显式日志记录(到sys.sysdtslog90/ sys.sysssislog)将记录特定程序包执行的所有事件。

我想知道的是如何将ExecutionInstanceGUID绑定到SSISDB目录中的任何内容。或者,是否以SSISDB的值执行SSIS包中的SSIS包catalog.executions.execution_id

最终,我尝试使用现有的自定义审核表,并将其链接回SSISDB目录中的详细历史记录,但似乎找不到链接。

Answers:


5

评论太多了,但是尝试了一些。从该系统表catalog.executions的msdn页面中,我得到:

execution_id-bigint-执行实例的唯一标识符(ID)。

从本文开始-SSIS 2012 –查看连接管理器信息以了解过去的执行情况 -我了解:

SSIS 2012提供了一个新的系统变量ServerExecutionID,供您在包内使用,因此,如果您执行任何自定义的日志记录/通知,则包括在内是一个很好的变量,因为它将直接指向我们将用来查找目录视图的指针。连接字符串信息。... Catalog.executions每次执行包含一行。在这里,我们将按execution_id进行过滤。

带有以下示例查询:

DECLARE @execution_id BIGINT = 41753; -- Your execution_id/ServerExecutionID goes here.
SELECT e.package_name,
        e.start_time,
        e.end_time,
        e.status,
        emc.package_path,
        CAST(emc.property_value AS VARCHAR(1000)) AS connection_string
   FROM catalog.executions e
   JOIN catalog.event_messages em
     ON e.execution_id = em.operation_id
   JOIN catalog.event_message_context AS emc WITH (FORCESEEK)
     ON em.event_message_id = emc.event_message_id
    AND emc.property_name = 'ConnectionString'
    AND emc.context_type = 80 -- Connection Managers
  WHERE e.execution_id = @execution_id;

我看不到此表中的您的ExecutionInstanceGUID。不过,我看到的是这个古老的Connect项目,其中包含以下故事:

SSIS RunningPackage.InstanceID!= System :: ExecutionInstanceGUID, 尽管它们应该相等。

所以我的结论是,ExecutionInstanceGUID与execution_id无关,但与某些InstanceId列无关,以防SSISDB中可能有一个。


9

我使用包含一个软件包的2012部署模型创建了一个SSIS项目。在该程序包中,我添加了一个OLE DB连接管理器,将其指向tempdb,并将脚本任务放到画布上。我还使用该OLE DB连接管理器打开了显式日志记录并捕获了该OnInformation事件。

使用脚本任务控制流-SCR Fire Info

SCR火灾信息

我将脚本任务配置为具有两个参数:System::ExecutionInstanceGUID并且System::ServerExecutionID我承认,在玛丽安回答之前,我没有注意到第二个变量。在任务内部,我引发2个Information事件,以便获取记录的值。这应该记录到显式表(dbo.sysssislog)和“免费”记录(catalog.operation_messages)中。

    public void Main()
    {
        bool fireAgain = true;
        string description = string.Empty;
        string variable = string.Empty;
        string value = string.Empty;

        variable = "System::ServerExecutionID";
        value = Dts.Variables[variable].Value.ToString();
        description = string.Format("{0}: {1}", variable, value);
        Dts.Events.FireInformation(0, "Reporting", description, string.Empty, 0, ref fireAgain);

        variable = "System::ExecutionInstanceGUID";
        value = Dts.Variables[variable].Value.ToString();
        description = string.Format("{0}: {1}", variable, value);
        Dts.Events.FireInformation(0, "Reporting", description, string.Empty, 0, ref fireAgain);

        Dts.TaskResult = (int)ScriptResults.Success;
    }

部署并执行

然后,我将项目部署到服务器上并执行它。

提示查看工序报告,工序编号8

我打开了操作报告,然后单击SCR Fire info任务详细信息。

操作细节

红色圆圈表示我们正在按预期方式查看操作8的详细信息。突出显示的行是使OnInformation这两个系统变量的值冒泡的事件。同样符合预期,其值System::ServerExecutionID与报告中的值匹配。的值System::ExecutionInstanceGUID一如既往地无意义,但存在{3F515780-8062-40AA-B9EC-C320CBAC5EFD}。

绑在一起

我现在有两个不同的原木,我想绑在一起。

sysssislog查询

运行此查询将从老式日志表中撤回相关行。

SELECT
    L.event
,   L.source
,   L.message 
FROM
    dbo.sysssislog AS L
WHERE
    L.executionid = '{3F515780-8062-40AA-B9EC-C320CBAC5EFD}'
ORDER BY
    L.id ASC;

结果看起来像

event   source  message
PackageStart    ParameterTest   Beginning of package execution.

OnInformation   SCR Fire info   System::ServerExecutionID: 8
OnInformation   ParameterTest   System::ServerExecutionID: 8
OnInformation   SCR Fire info   System::ExecutionInstanceGUID: {3F515780-8062-40AA-B9EC-C320CBAC5EFD}
OnInformation   ParameterTest   System::ExecutionInstanceGUID: {3F515780-8062-40AA-B9EC-C320CBAC5EFD}
PackageEnd  ParameterTest   End of package execution.

catalog.operation_messages查询

针对SSISDB目录运行此查询将显示上述报告中的所有消息,并确认我可以将值链接messageoperation_id以及dbo.sysssislog.executionid

SELECT 
    OM.* 
FROM 
    catalog.operation_messages AS OM
WHERE
    OM.operation_id = 8;

这些结果是

operation_message_id    operation_id    message_time    message_type    message_source_type message extended_info_id
30  8   2013-04-02 21:02:34.1418917 -05:00  10  30  ParameterTest:Validation has started.   NULL
31  8   2013-04-02 21:02:34.1738922 -05:00  10  40  SCR Fire info:Validation has started.   NULL
32  8   2013-04-02 21:02:34.1768872 -05:00  20  40  SCR Fire info:Validation is complete.   NULL
33  8   2013-04-02 21:02:34.1788903 -05:00  20  30  ParameterTest:Validation is complete.   NULL
34  8   2013-04-02 21:02:34.3349188 -05:00  30  30  ParameterTest:Start, 9:02:34 PM.    NULL
35  8   2013-04-02 21:02:34.4009253 -05:00  30  40  SCR Fire info:Start, 9:02:34 PM.    NULL
36  8   2013-04-02 21:02:34.4009253 -05:00  10  40  SCR Fire info:Validation has started.   NULL
37  8   2013-04-02 21:02:34.4019251 -05:00  20  40  SCR Fire info:Validation is complete.   NULL
38  8   2013-04-02 21:02:34.4219283 -05:00  70  40  SCR Fire info:Information: System::ServerExecutionID: 8 NULL
39  8   2013-04-02 21:02:34.4259295 -05:00  70  40  SCR Fire info:Information: System::ExecutionInstanceGUID: {3F515780-8062-40AA-B9EC-C320CBAC5EFD}    NULL
40  8   2013-04-02 21:02:34.4409316 -05:00  40  40  SCR Fire info:Finished, 9:02:34 PM, Elapsed time: 00:00:00.031. NULL
41  8   2013-04-02 21:02:34.4419388 -05:00  40  30  ParameterTest:Finished, 9:02:34 PM, Elapsed time: 00:00:00.125. NULL

包起来

当在SSISDB目录的上下文之外(也通过SSDT-BI或.ispac的命令行)执行该程序包时,the的值System::ServerExecutionID将为0。这是有道理的,但是以后的读者可能会使用LEFT OUTER JOIN如果要捕获软件包的所有执行,将sysssislog链接到catalog.operation_messages时。

帽子提示,我衷心的感谢和感谢,这归功于玛丽安(Marian)使我走上了正轨。鉴于可以在摘要日志表中存储GUID(16字节)和bigint(8字节)之间进行选择,这对我来说是毫不费力的:请单调增加大整数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.