ExecutionInstanceGUID değerini SSISDB ile ilişkilendirme


13

SQL Server Entegrasyon Hizmetlerinin 2012 sürümü olan SSIS, paketlerin (diğer şeylerin yanı sıra) işlemlerini izleyen bir SSISDB kataloğu teslim etti. Proje Dağıtım modelini kullanan çözümler için varsayılan paket yürütmede SSISDB'de oturum açma açık olacaktır.

Bir paket yürütüldüğünde, System::ExecutionInstanceGUIDaçık günlük (to sys.sysdtslog90/ sys.sysssislog) kullanıyorsa belirli bir paket yürütme için tüm olayları kaydedecek bir değerle doldurulur .

Bilmek istediğim, bir ExecutionInstanceGUID'yi SSISDB kataloğundaki herhangi bir şeye nasıl bağlayacağım . Alternatif olarak, SSISDB özelliğinde değeri olan bir SSIS paketicatalog.executions.execution_id

Sonuç olarak, mevcut, özel denetim tablosunu kullanmaya ve SSISDB kataloğundaki ayrıntılı geçmişe geri bağlamaya çalışıyorum, ancak bağlantıyı bulamıyorum.

Yanıtlar:


5

Bir yorum için çok fazla, ama bir şey denemek. Bu sistem tablosu kataloğunun msdn sayfasından alın.

execution_id - bigint - Yürütme örneği için benzersiz tanımlayıcı (ID).

Bu makaleden - SSIS 2012 - Geçmiş Çalışmalar için Bağlantı Yöneticisi Bilgilerini Görüntüle - Bunu anlıyorum:

SSIS 2012, paketlerin içindeki kullanımınız için yeni bir sistem değişkeni olan ServerExecutionID'yi sağlar; bağlantı dizesi bilgisi. ... Catalog.executions her yürütme için bir satır içerir. Burada execution_id ile filtreleyeceğiz.

Örnek bir sorgu ile:

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;

Ne görmüyorum bu tabloda ExecutionInstanceGUID olduğunu. Gördüğüm şey, şu hikayenin olduğu bu eski Connect öğesi :

SSIS RunningPackage.InstanceID! = System :: ExecutionInstanceGUID eşit olsalar da.

Sonuç olarak, SSISDB'de bir tane olması durumunda ExecutionInstanceGUID'nin execution_id ile değil, bazı InstanceId sütunuyla ilgili olduğu sonucuna varıyorum.


9

Tek bir paketten oluşan 2012 Dağıtım Modelini kullanarak bir SSIS projesi oluşturdum. Bu pakette, bir OLE DB Bağlantı Yöneticisi ekledim, tempdb'ye işaret ettim ve tuval üzerine bir Script Görevi bıraktım. Ayrıca, OLE DB Bağlantı Yöneticisi'ni kullanarak açık günlük kaydını açtım ve OnInformationolayı yakaladım .

Kod görevi ile akışı kontrol etme - SCR Fire info

SCR Yangın bilgisi

Ben kepçeye iki parametre benim komut görev yapılandırılmış: System::ExecutionInstanceGUIDve System::ServerExecutionIDben bu noktada itiraf edecek, ben vardı değil Marian'ın cevap kadar ikinci değişken fark ettim. Görevin içinde, kaydedilen değerleri alabilmem için 2 Bilgi olayı oluşturuyorum. Bu hem açık tabloya (dbo.sysssislog) hem de "serbest" günlüğe (catalog.operation_messages) kaydedilmelidir.

    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;
    }

Dağıtma ve yürütme

Daha sonra projemi bir sunucuya dağıttım ve yürüttüm.

İşlem Raporu'nu görüntüleme istemi, işlem kimliği 8

İşlemler Raporunu açtım ve SCR Fire infogörev ayrıntılarını tıkladım .

İşlem ayrıntıları

Kırmızı daire içine alınmış öğe, İşlem 8'in ayrıntılarını beklendiği gibi görüntülediğimizi gösteriyor. Vurgulanan çizgiler, OnInformationbu iki sistem değişkeninin değerlerini arttıran olaylardır. Ayrıca beklendiği gibi System::ServerExecutionID, rapordaki değerle eşleşti. Değeri System::ExecutionInstanceGUIDher zamanki gibi anlamsızdı ama mevcuttu {3F515780-8062-40AA-B9EC-C320CBAC5EFD}.

Hepsini bir araya getirmek

Şimdi birbirine bağlamak istediğim iki farklı kütük vardı.

sysssislog sorgusu

Bu sorguyu çalıştırmak, eski okul günlüğü tablosundan ilgili satırları geri çekti.

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;

Sonuçlar şöyle görünüyordu

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 sorgusu

Yukarıdaki raporu vardı ve ayrıca ben de değerini tutabilecekleri doğruladı tüm iletileri SSISDB katalog karşı bu sorguyu gösterdi Koşu messageiçin operation_idiçin üzerinde dedbo.sysssislog.executionid

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

Bu sonuçlar

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

Sarmak

Paket SSISDB kataloğunun bağlamı dışında yürütüldüğünde (diğer adıyla SSDT-BI veya bir .ispac komut satırı üzerinden) değeri System::ServerExecutionID0 olacaktır. paketin tüm yürütmelerini yakalamak istiyorsanız sysssislog'u catalog.operation_messages'e bağlarken .

Şapka ipucu, içten teşekkürlerimi ve cevap kredisi beni doğru yola koymak için Marian gidin. Özetlenmiş kayıt tablomda bir GUID (16 bayt) ve bir bigint (8 bayt) depolamak arasındaki seçim göz önüne alındığında, bu benim için bir beyin değil: monoton olarak artan büyük tamsayı lütfen.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.