Ich habe ein SSIS-Projekt mit dem Bereitstellungsmodell 2012 erstellt, das aus einem einzelnen Paket besteht. In diesem Paket habe ich einen OLE DB-Verbindungs-Manager hinzugefügt, auf tempdb verwiesen und eine Skriptaufgabe auf der Zeichenfläche abgelegt. Ich habe auch die explizite Protokollierung mit diesem OLE DB-Verbindungs-Manager aktiviert und das OnInformation
Ereignis aufgezeichnet.
SCR-Brandinfo
Ich baue meine Skript Aufgabe zu greifen zwei Parameter: System::ExecutionInstanceGUID
und System::ServerExecutionID
ich werde an dieser Stelle zugeben, ich hatte nicht die zweite Variable bis Marian Antwort bemerkt. Innerhalb der Aufgabe löse ich 2 Informationsereignisse aus, damit ich die Werte aufzeichnen kann. Dies sollte sowohl in der expliziten Tabelle (dbo.sysssislog) als auch in der "freien" Protokollierung (catalog.operation_messages) protokolliert werden.
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;
}
Bereitstellen und ausführen
Ich habe dann mein Projekt auf einem Server bereitgestellt und ausgeführt.
Ich öffnete den Betriebsbericht und klickte auf die SCR Fire info
Aufgabendetails.
Das rot eingekreiste Element zeigt an, dass wir erwartungsgemäß Details für Operation 8 anzeigen. Die hervorgehobenen Linien sind die OnInformation
Ereignisse, die die Werte dieser beiden Systemvariablen in die Luft gesprudelt haben. Auch der Wert System::ServerExecutionID
stimmte erwartungsgemäß mit dem im Bericht überein. Der Wert von System::ExecutionInstanceGUID
war wie immer bedeutungslos, aber vorhanden {3F515780-8062-40AA-B9EC-C320CBAC5EFD}.
Alles zusammenbinden
Ich hatte jetzt zwei verschiedene Protokolle, die ich zusammenbinden wollte.
Sysssislog-Abfrage
Durch Ausführen dieser Abfrage wurden relevante Zeilen aus der Protokollierungstabelle der alten Schule zurückgezogen.
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;
Die Ergebnisse sahen so aus
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.
Abfrage catalog.operation_messages
Wenn Sie diese Abfrage für den SSISDB-Katalog ausführen, werden alle Nachrichten angezeigt, die im obigen Bericht enthalten sind, und es wird bestätigt, dass der Wert sowohl message
mit operation_id
als auch mit verknüpft werden kanndbo.sysssislog.executionid
SELECT
OM.*
FROM
catalog.operation_messages AS OM
WHERE
OM.operation_id = 8;
Diese Ergebnisse waren
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
Einpacken
Wenn das Paket außerhalb des Kontexts des SSISDB-Katalogs ausgeführt wird (auch bekannt als über SSDT-BI oder die Befehlszeile zu einem .ispac), ist der Wert von the System::ServerExecutionID
0. Es ist sinnvoll, aber zukünftige Leser verwenden entweder LEFT OUTER JOIN Wenn Sie sysssislog mit catalog.operation_messages verknüpfen, um alle Ausführungen des Pakets abzufangen .
Der Hut, mein herzlicher Dank und die Antwort gehen an Marian, der mich auf den richtigen Weg gebracht hat. Angesichts der Wahl zwischen der Speicherung einer GUID (16 Byte) und einer Bigint (8 Byte) in meiner zusammengefassten Protokollierungstabelle ist es für mich ein Kinderspiel: Bitte erhöhen Sie die Big Integer-Zahl monoton.