Liên quan đến ExecutInstanceGUID với SSISDB


13

Bản phát hành năm 2012 của Dịch vụ tích hợp SQL Server, SSIS, đã phân phối một danh mục SSISDB theo dõi hoạt động của các gói (trong số những thứ khác). Việc thực thi gói mặc định cho các giải pháp sử dụng mô hình Triển khai dự án sẽ được đăng nhập vào SSISDB được bật.

Khi một gói thực thi, System::ExecutionInstanceGUIDgiá trị được điền với một giá trị mà nếu một người đang sử dụng ghi nhật ký rõ ràng (đến sys.sysdtslog90/ sys.sysssislog) sẽ ghi lại tất cả các sự kiện cho một thực thi gói cụ thể.

Điều tôi muốn biết là làm cách nào để liên kết ExecutInstanceGUID với bất kỳ thứ gì trong danh mục SSISDB. Ngoài ra, là gói SSIS thực thi trong quyền riêng tư SSISDB theo giá trị của góicatalog.executions.execution_id

Cuối cùng, tôi đang cố gắng sử dụng bảng kiểm toán tùy chỉnh hiện có và liên kết nó trở lại lịch sử chi tiết trong danh mục SSISDB nhưng dường như không thể tìm thấy liên kết.

Câu trả lời:


5

Quá nhiều cho một bình luận, nhưng cố gắng một cái gì đó. Từ trang msDN của danh mục bảng hệ thống đó.executions tôi nhận được:

exec_id - bigint - Mã định danh duy nhất (ID) cho trường hợp thực hiện.

Từ bài viết này - SSIS 2012 - Xem thông tin Trình quản lý kết nối cho các lần thực hiện trước - Tôi hiểu rằng:

SSIS 2012 cung cấp một biến hệ thống mới, ServerExecutID, để bạn sử dụng bên trong các gói, vì vậy nếu bạn thực hiện bất kỳ ghi nhật ký / thông báo tùy chỉnh nào thì đó là một biến tốt để bao gồm vì nó sẽ là con trỏ trực tiếp đến các chế độ xem danh mục mà chúng tôi sẽ sử dụng để tìm thông tin chuỗi kết nối. ... Catalog.executions chứa một hàng cho mỗi lần thực hiện. Đây là nơi chúng tôi sẽ lọc theo exec_id.

Với một truy vấn mẫu của:

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;

Những gì tôi không thấy là ExecutInstanceGUID của bạn trong bảng này. Tuy nhiên, những gì tôi thấy là mục Kết nối cổ xưa này , nơi có câu chuyện sau đây:

SSIS RunningPackage.InstanceID! = System :: ExecutInstanceGUID mặc dù chúng phải bằng nhau.

Vì vậy, kết luận của tôi là ExecutInstanceGUID không liên quan đến exec_id, nhưng một số cột InstanceId, trong trường hợp bạn có thể có một cái trong SSISDB.


9

Tôi đã tạo một dự án SSIS bằng Mô hình triển khai 2012 bao gồm một gói duy nhất. Trong gói đó, tôi đã thêm Trình quản lý kết nối OLE DB, chỉ nó vào tempdb và thả Tác vụ tập lệnh xuống khung vẽ. Tôi cũng đã bật ghi nhật ký rõ ràng bằng Trình quản lý kết nối OLE DB đó và ghi lại OnInformationsự kiện.

Kiểm soát luồng với tác vụ kịch bản - Thông tin SCR Fire

Thông tin về SCR

Tôi đã cấu hình tác vụ kịch bản của mình để lấy hai tham số: System::ExecutionInstanceGUIDSystem::ServerExecutionID tôi sẽ thừa nhận tại thời điểm này, tôi đã không nhận thấy biến thứ hai cho đến khi câu trả lời của Marian. Trong nhiệm vụ, tôi đưa ra 2 sự kiện Thông tin để tôi có thể nhận được các giá trị được ghi lại. Điều này nên được ghi vào cả bảng rõ ràng (dbo.sysssislog) và ghi nhật ký "miễn phí" (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;
    }

Triển khai và thực hiện

Sau đó tôi đã triển khai dự án của mình đến một máy chủ và thực hiện nó.

Nhắc để xem Báo cáo hoạt động, id hoạt động 8

Tôi đã mở Báo cáo hoạt động và nhấp vào SCR Fire info chi tiết nhiệm vụ.

Chi tiết vận hành

Mục được khoanh tròn màu đỏ cho thấy chúng tôi đang xem chi tiết cho Chiến dịch 8, như mong đợi. Các dòng được tô sáng làOnInformation sự kiện làm nổi lên các giá trị của hai biến hệ thống đó. Cũng như mong đợi, giá trị System::ServerExecutionIDkhớp với những gì trong báo cáo. Giá trị của nó System::ExecutionInstanceGUIDlà vô nghĩa như mọi khi nhưng nó đã có mặt {3F515780-8062-40AA-B9EC-C320CBAC5EFD}.

Buộc tất cả lại với nhau

Bây giờ tôi đã có hai bản ghi khác nhau mà tôi muốn liên kết với nhau.

truy vấn sysssislog

Chạy truy vấn này đã kéo các hàng có liên quan từ bảng ghi nhật ký trường cũ.

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;

Kết quả trông như

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.

danh mục.operation_messages truy vấn

Chạy truy vấn này đối với các cửa hàng SSISDB cho thấy tất cả các thông điệp mà là trong báo cáo trên và cũng khẳng định tôi có thể liên kết các giá trị trong messageđể operation_idcũng như trên đểdbo.sysssislog.executionid

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

Những kết quả đó là

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

Gói (lại

Khi gói được thực thi bên ngoài ngữ cảnh của danh mục SSISDB (còn gọi là qua SSDT-BI hoặc dòng lệnh đến .ispac), giá trị của System::ServerExecutionIDsẽ là 0. Điều đó có ý nghĩa, nhưng các độc giả trong tương lai sẽ sử dụng LEFT OUTER THAM GIA khi liên kết sysssislog với catalog.operation_messages nếu bạn muốn bắt tất cả thực thi của gói.

Hat tip, lời cảm ơn nồng nhiệt của tôi và tín dụng câu trả lời gửi đến Marian vì đã đưa tôi đi đúng hướng. Đưa ra lựa chọn giữa việc lưu trữ GUID (16 byte) và bigint (8 byte) trong bảng ghi nhật ký tóm tắt của tôi, đó là điều không có gì phải đắn đo đối với tôi: làm ơn tăng số nguyên lớn một cách đơn điệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.