Stworzyłem projekt SSIS przy użyciu modelu wdrażania 2012, składającego się z jednego pakietu. W tym pakiecie dodałem Menedżera połączeń OLE DB, wskazałem go na tempdb i upuściłem Zadanie Skryptu na płótno. Włączyłem także jawne rejestrowanie przy użyciu Menedżera połączeń OLE DB i zarejestrowałem OnInformation
zdarzenie.
Informacje o ogniu SCR
Skonfigurowałem moje zadanie skryptu, aby pobierało dwa parametry: System::ExecutionInstanceGUID
i System::ServerExecutionID
przyznam w tym momencie, że nie zauważyłem drugiej zmiennej aż do odpowiedzi Mariana. W ramach zadania podnoszę 2 zdarzenia informacyjne, dzięki czemu mogę zapisać wartości. Powinno to zostać zarejestrowane zarówno w jawnej tabeli (dbo.sysssislog), jak i w „darmowym” logowaniu (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;
}
Wdróż i wykonaj
Następnie wdrożyłem mój projekt na serwerze i wykonałem go.
Otworzyłem raport operacyjny i kliknąłem w SCR Fire info
szczegóły zadania.
Czerwony zakreślony element pokazuje, że przeglądamy szczegóły operacji 8, zgodnie z oczekiwaniami. Podświetlone linie to OnInformation
zdarzenia, które wywołały bąbelki wartości tych dwóch zmiennych systemowych. Również zgodnie z oczekiwaniami wartość System::ServerExecutionID
dopasowana do tego, co było w raporcie. Wartość System::ExecutionInstanceGUID
jak zawsze była bez znaczenia, ale była obecna {3F515780-8062-40AA-B9EC-C320CBAC5EFD}.
Wiązanie wszystkiego razem
Miałem teraz dwa różne dzienniki, które chciałem związać.
zapytanie sysssislog
Uruchomienie tego zapytania spowodowało wycofanie odpowiednich wierszy ze starej tabeli rejestrowania.
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;
Wyniki wyglądały jak
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.
zapytanie catalog.operation_messages
Uruchomienie tego zapytania przed katalogu SSISDB wykazywały wszystkie wiadomości, które zostały w powyższym raporcie, a także potwierdzone mogę powiązać wartości w message
celu operation_id
jak również do ponaddbo.sysssislog.executionid
SELECT
OM.*
FROM
catalog.operation_messages AS OM
WHERE
OM.operation_id = 8;
Te wyniki były
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
Zakończyć
Gdy pakiet jest wykonywany poza kontekstem katalogu SSISDB (inaczej przez SSDT-BI lub wiersz poleceń do .ispac), wartość System::ServerExecutionID
będzie wynosić 0. To ma sens, ale przyszli czytelnicy albo używają POŁĄCZENIA ZEWNĘTRZNEGO podczas łączenia sysssislog do catalog.operation_messages, jeśli chcesz przechwycić wszystkie wykonania pakietu.
Kapelusz, moje serdeczne podziękowania i podziękowania należą się Marianowi za postawienie mnie na właściwej drodze. Biorąc pod uwagę wybór między przechowywaniem GUID (16 bajtów) a bigintem (8 bajtów) w mojej skróconej tabeli rejestrowania, nie jest to dla mnie żadnym problemem: monotonicznie zwiększaj dużą liczbę całkowitą, proszę.