เกี่ยวข้อง ExecutionInstanceGUID กับ SSISDB


13

SSIS, SQL Server Integration Services 2012 ได้เปิดตัวแคตตาล็อก SSISDB ซึ่งติดตามการทำงานของแพ็คเกจ (เหนือสิ่งอื่นใด) การดำเนินการแพ็คเกจเริ่มต้นสำหรับโซลูชันที่ใช้โมเดลการปรับใช้โครงการจะเปิดใช้งานการบันทึกลงใน SSISDB

เมื่อแพคเกจดำเนินการSystem::ExecutionInstanceGUIDบรรจุด้วยค่าที่หากมีการใช้การบันทึกอย่างชัดเจน (ถึงsys.sysdtslog90/ sys.sysssislog) จะบันทึกเหตุการณ์ทั้งหมดสำหรับการดำเนินการแพคเกจเฉพาะ

สิ่งที่ฉันอยากรู้คือฉันจะผูก ExecutionInstanceGUID กับอะไรในแคตตาล็อก SSISDB ได้อย่างไร อีกวิธีหนึ่งคือแพคเกจ SSIS ที่ทำงานใน SSISDB privy ค่าของมันcatalog.executions.execution_id

ท้ายที่สุดฉันพยายามใช้ตารางการตรวจสอบที่มีอยู่แล้วและเชื่อมโยงกลับไปที่ประวัติโดยละเอียดในแคตตาล็อก SSISDB แต่ดูเหมือนจะไม่พบลิงก์

คำตอบ:


5

มากเกินไปสำหรับความคิดเห็น แต่ลองทำอะไรบางอย่าง จากหน้า msdn ของระบบตารางcatalog.executionsฉันได้รับ:

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! = ระบบ :: ExecutionInstanceGUID แม้ว่าพวกเขาควรจะเท่ากัน

ดังนั้นข้อสรุปของฉันคือ ExecutionInstanceGUID ไม่เกี่ยวข้องกับ execution_id แต่มีบางคอลัมน์ InstanceId ในกรณีที่คุณอาจมีหนึ่งใน SSISDB


9

ฉันสร้างโครงการ SSIS โดยใช้โมเดลการปรับใช้ 2012 ซึ่งประกอบด้วยแพ็คเกจเดียว ในแพ็คเกจนั้นฉันเพิ่มตัวจัดการการเชื่อมต่อ OLE DB ชี้ไปที่ tempdb และวางภารกิจของสคริปต์ลงบนพื้นที่ทำงาน ฉันยังเปิดใช้งานการบันทึกอย่างชัดเจนโดยใช้ OLE DB Connection Manager และบันทึกOnInformationเหตุการณ์

โฟลว์ควบคุมด้วยภารกิจสคริปต์ - ข้อมูล SCR Fire

ข้อมูล SCR Fire

ฉันกำหนดค่างานสคริปต์ของฉันเพื่อคว้าสองพารามิเตอร์: System::ExecutionInstanceGUIDและSystem::ServerExecutionIDฉันจะยอมรับ ณ จุดนี้ฉันไม่ได้สังเกตตัวแปรที่สองจนกระทั่งคำตอบของแมเรียน ภายในงานฉันเพิ่มเหตุการณ์ข้อมูล 2 เหตุการณ์เพื่อให้ได้ค่าที่บันทึกไว้ สิ่งนี้ควรถูกบันทึกไว้ทั้งในตารางอย่างชัดเจน (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;
    }

ปรับใช้และดำเนินการ

จากนั้นฉันปรับใช้โครงการของฉันไปยังเซิร์ฟเวอร์และดำเนินการ

พร้อมที่จะดูรายงานการดำเนินงาน id การดำเนินงาน 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 แสดงข้อความทั้งหมดที่อยู่ในรายงานข้างต้นและยังยืนยันว่าฉันสามารถเชื่อมโยงค่าในmessageไปoperation_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 (aka ผ่าน SSDT-BI หรือบรรทัดคำสั่งเป็น. ispac) ค่าที่System::ServerExecutionIDจะเป็น 0 มันสมเหตุสมผล แต่ผู้อ่านในอนาคตอาจใช้ LEFT OUTER JOIN เมื่อเชื่อมโยงไป sysssislog catalog.operation_messages ถ้าคุณต้องการที่จะจับทุกการประหารชีวิตของแพคเกจ

ปลายหมวกขอบคุณมากและเครดิตคำตอบไปที่ Marian ที่ทำให้ฉันไปในเส้นทางที่ถูกต้อง ด้วยตัวเลือกระหว่างการจัดเก็บ GUID (16 ไบต์) และ bigint (8 ไบต์) ในตารางการบันทึกสรุปของฉันมันไม่มีเกมง่ายๆสำหรับฉัน: โปรดเพิ่มจำนวนเต็มขนาดใหญ่ที่จำเจ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.