Ho creato un progetto SSIS utilizzando il modello di distribuzione 2012 costituito da un singolo pacchetto. In quel pacchetto, ho aggiunto una Gestione connessione OLE DB, l'ho puntato su tempdb e ho lasciato un'attività Script sulla tela. Ho anche attivato la registrazione esplicita utilizzando quella Gestione connessione OLE DB e acquisito l' OnInformation
evento.
Informazioni sul fuoco SCR
Ho configurato il mio compito script per afferrare due parametri: System::ExecutionInstanceGUID
e System::ServerExecutionID
devo ammettere, a questo punto, avevo non notato la seconda variabile fino risposta di Marian. All'interno dell'attività, raccolgo 2 eventi informativi in modo da poter registrare i valori. Questo dovrebbe essere registrato sia nella tabella esplicita (dbo.sysssislog) sia nella registrazione "libera" (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;
}
Distribuire ed eseguire
Ho quindi distribuito il mio progetto su un server ed eseguito.
Ho aperto il Rapporto operazioni e fatto clic sui SCR Fire info
dettagli dell'attività.
L'elemento cerchiato in rosso mostra che stiamo visualizzando i dettagli dell'operazione 8, come previsto. Le linee evidenziate sono gli OnInformation
eventi che hanno fatto gorgogliare i valori di quelle due variabili di sistema. Inoltre, come previsto, il valore di System::ServerExecutionID
corrisponde a ciò che era nel rapporto. Il valore di System::ExecutionInstanceGUID
era insignificante come sempre ma era presente {3F515780-8062-40AA-B9EC-C320CBAC5EFD}.
Legare tutto insieme
Ora avevo due diversi tronchi che volevo legare insieme.
query sysssislog
L'esecuzione di questa query ha recuperato le righe pertinenti dalla tabella di registrazione della vecchia scuola.
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;
I risultati sembravano
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.
query catalog.operation_messages
L'esecuzione di questa query sul catalogo SSISDB ha mostrato tutti i messaggi presenti nel rapporto precedente e ha anche confermato che potevo collegare il valore message
a operation_id
oltre che adbo.sysssislog.executionid
SELECT
OM.*
FROM
catalog.operation_messages AS OM
WHERE
OM.operation_id = 8;
Quei risultati furono
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
Incartare
Quando il pacchetto viene eseguito al di fuori del contesto del catalogo SSISDB (ovvero tramite SSDT-BI o la riga di comando in un .ispac) il valore di System::ServerExecutionID
sarà 0. Ha senso, ma i lettori futuri utilizzano un LEFT OUTER JOIN quando si collega sysssislog a catalog.operation_messages se si desidera catturare tutte le esecuzioni del pacchetto.
Suggerimento per il cappello, i miei sinceri ringraziamenti e il merito della risposta vanno a Marian per avermi messo sulla strada giusta. Data la scelta tra la memorizzazione di un GUID (16 byte) e un bigint (8 byte) nella mia tabella di riepilogo riepilogativa, per me è un gioco da ragazzi: aumentare il numero intero grande monotonicamente, per favore.