Menghubungkan ExecutionInstanceGUID ke SSISDB

13

Rilis 2012 SQL Integration Services, SSIS, telah memberikan katalog SSISDB yang melacak operasi paket (antara lain). Eksekusi paket default untuk solusi yang menggunakan model Project Deployment akan mengaktifkan logging ke SSISDB.

Ketika sebuah paket dieksekusi, System::ExecutionInstanceGUIDdiisi dengan nilai yang, jika seseorang menggunakan logging eksplisit (ke sys.sysdtslog90/ sys.sysssislog) akan merekam semua peristiwa untuk eksekusi paket tertentu.

Yang ingin saya ketahui adalah bagaimana saya mengikat ExecutionInstanceGUID dengan apa pun di katalog SSISDB. Atau, adalah paket SSIS yang mengeksekusi di SSISDB privy untuk nilai nyacatalog.executions.execution_id

Pada akhirnya, saya mencoba menggunakan tabel audit kustom yang ada dan menautkannya kembali ke riwayat terperinci dalam katalog SSISDB tetapi tampaknya tidak dapat menemukan tautannya.

billinkc
sumber

Jawaban:

5

Terlalu banyak untuk komentar, tetapi mencoba sesuatu. Dari halaman msdn dari katalog sistem table.executions saya mendapatkan:

execution_id - bigint - Pengidentifikasi unik (ID) untuk instance eksekusi.

Dari artikel ini - SSIS 2012 - Lihat Informasi Manajer Koneksi untuk Eksekusi Sebelumnya - Saya mengerti bahwa:

SSIS 2012 menyediakan variabel sistem baru, ServerExecutionID, untuk penggunaan Anda di dalam paket, jadi jika Anda melakukan pencatatan / pemberitahuan kustom, itu adalah variabel yang baik untuk dimasukkan karena akan menjadi penunjuk langsung ke tampilan katalog yang akan kami gunakan untuk menemukan informasi string koneksi. ... Catalog.executions berisi satu baris per eksekusi. Di sinilah kami akan memfilter menurut eksekusi_id.

Dengan kueri contoh:

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;

Yang tidak saya lihat adalah ExecutionInstanceGUID Anda di tabel ini. Namun, yang saya lihat adalah item Connect kuno ini di mana ada cerita berikut:

SSIS RunningPackage.InstanceID! = System :: ExecutionInstanceGUID meskipun keduanya harus sama.

Jadi kesimpulan saya adalah bahwa ExecutionInstanceGUID tidak terkait dengan execut_id, tetapi beberapa kolom InstanceId, jika Anda mungkin memiliki satu di SSISDB.

Marian
sumber
9

Saya membuat proyek SSIS menggunakan Model Penerapan 2012 yang terdiri dari satu paket. Dalam paket itu, saya menambahkan OLE DB Connection Manager, mengarahkannya ke tempdb dan menjatuhkan Script Task ke kanvas. Saya juga menyalakan logging eksplisit menggunakan OLE DB Connection Manager itu dan menangkap OnInformationacara tersebut.

Kontrol aliran dengan tugas skrip - Info SCR Fire

Info Kebakaran SCR

Saya mengkonfigurasi tugas skrip saya untuk mengambil dua parameter: System::ExecutionInstanceGUIDdan System::ServerExecutionIDsaya akui saat ini, saya belum memperhatikan variabel kedua hingga jawaban Marian. Di dalam tugas, saya mengangkat 2 peristiwa Informasi sehingga saya bisa mendapatkan nilai-nilai yang direkam. Ini harus login ke tabel eksplisit (dbo.sysssislog) dan "bebas" logging (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;
    }

Menyebarkan dan mengeksekusi

Saya kemudian menyebarkan proyek saya ke server dan menjalankannya.

Prompt untuk melihat Laporan Operasi, id operasi 8

Saya membuka Laporan Operasi dan mengklik SCR Fire inforincian tugas.

Rincian operasi

Item yang dilingkari merah menunjukkan bahwa kami sedang melihat detail untuk Operasi 8, seperti yang diharapkan. Garis yang disorot adalah OnInformationperistiwa yang menggelembungkan nilai-nilai dari kedua variabel sistem. Juga seperti yang diharapkan, nilai System::ServerExecutionIDcocok dengan apa yang ada di laporan. Nilai System::ExecutionInstanceGUIDtidak ada artinya seperti biasa tetapi hadir {3F515780-8062-40AA-B9EC-C320CBAC5EFD}.

Mengikat semuanya bersama-sama

Sekarang saya memiliki dua log berbeda yang ingin saya ikat bersama.

permintaan sysssislog

Menjalankan kueri ini menarik kembali baris yang relevan dari tabel logging old-school.

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;

Hasilnya tampak seperti

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 permintaan

Menjalankan kueri ini terhadap katalog SSISDB menunjukkan semua pesan yang ada di laporan di atas dan juga mengonfirmasi bahwa saya dapat menautkan nilai messageke operation_idserta kedbo.sysssislog.executionid

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

Hasilnya adalah

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

Bungkus

Ketika paket dieksekusi di luar konteks katalog SSISDB (alias melalui SSDT-BI atau baris perintah ke .ispac) nilai dari nilai System::ServerExecutionIDtersebut adalah 0. Masuk akal, tetapi pembaca di masa mendatang akan menggunakan LEFT OUTER JOIN saat menghubungkan sysssislog ke catalog.operation_messages jika Anda ingin menangkap semua eksekusi paket.

Kiat topi, terima kasih yang tulus dan penghargaan yang diberikan kepada Marian karena menempatkan saya di jalur yang benar. Diberi pilihan antara menyimpan GUID (16 byte) dan bigint (8 byte) di tabel logging ringkasan saya, itu tidak ada gunanya bagi saya: tolong tolong bilangan bulat besar yang meningkat secara monoton.

billinkc
sumber