ฉันสร้างโครงการ SSIS โดยใช้โมเดลการปรับใช้ 2012 ซึ่งประกอบด้วยแพ็คเกจเดียว ในแพ็คเกจนั้นฉันเพิ่มตัวจัดการการเชื่อมต่อ OLE DB ชี้ไปที่ tempdb และวางภารกิจของสคริปต์ลงบนพื้นที่ทำงาน ฉันยังเปิดใช้งานการบันทึกอย่างชัดเจนโดยใช้ OLE DB Connection Manager และบันทึกOnInformation
เหตุการณ์
ข้อมูล 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;
}
ปรับใช้และดำเนินการ
จากนั้นฉันปรับใช้โครงการของฉันไปยังเซิร์ฟเวอร์และดำเนินการ
ฉันเปิดรายงานการปฏิบัติงานและคลิกเข้าไปใน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 ไบต์) ในตารางการบันทึกสรุปของฉันมันไม่มีเกมง่ายๆสำหรับฉัน: โปรดเพิ่มจำนวนเต็มขนาดใหญ่ที่จำเจ