Creé un proyecto SSIS utilizando el Modelo de implementación 2012 que consta de un solo paquete. En ese paquete, agregué un Administrador de conexión OLE DB, lo apunté a tempdb y solté una Tarea de script en el lienzo. También activé el registro explícito usando ese Administrador de conexión OLE DB y capturé el OnInformation
evento.
SCR Fire info
He configurado mi tarea secuencia de comandos para agarrar dos parámetros: System::ExecutionInstanceGUID
y System::ServerExecutionID
tengo que admitir en este punto, que había no notado la segunda variable hasta que la respuesta de Marian. Dentro de la tarea, levanto 2 eventos de información para poder registrar los valores. Esto debe registrarse tanto en la tabla explícita (dbo.sysssislog) como en el registro "libre" (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;
}
Implementar y ejecutar
Luego desplegué mi proyecto en un servidor y lo ejecuté.
Abrí el Informe de operaciones e hice clic en los SCR Fire info
detalles de la tarea.
El elemento con un círculo rojo muestra que estamos viendo detalles para la Operación 8, como se esperaba. Las líneas resaltadas son los OnInformation
eventos que aumentaron los valores de esas dos variables del sistema. También como se esperaba, el valor de System::ServerExecutionID
coincide con lo que estaba en el informe. El valor de no System::ExecutionInstanceGUID
tenía sentido como siempre, pero estaba presente {3F515780-8062-40AA-B9EC-C320CBAC5EFD}.
Atar todo junto
Ahora tenía dos registros diferentes que quería unir.
consulta sysssislog
La ejecución de esta consulta retiró las filas relevantes de la tabla de registro de la vieja escuela.
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;
Los resultados parecían
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.
consulta catalog.operation_messages
La ejecución de esta consulta en el catálogo de SSISDB mostró todos los mensajes que estaban en el informe anterior y también confirmó que pudiera vincular el valor de message
a operation_id
, así como adbo.sysssislog.executionid
SELECT
OM.*
FROM
catalog.operation_messages AS OM
WHERE
OM.operation_id = 8;
Esos resultados fueron
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
Envolver
Cuando el paquete se ejecuta fuera del contexto del catálogo SSISDB (también conocido a través de SSDT-BI o la línea de comando a un .ispac), el valor de the System::ServerExecutionID
será 0. Tiene sentido, pero los futuros lectores usan una IZQUIERDA EXTERIOR IZQUIERDA al vincular sysssislog a catalog.operation_messages si desea capturar todas las ejecuciones del paquete.
Un consejo, mi sincero agradecimiento y el crédito de respuesta a Marian por ponerme en el camino correcto. Dada la opción entre almacenar un GUID (16 bytes) y un bigint (8 bytes) en mi tabla de registro resumida, no es una obviedad para mí: un número entero grande y monótonamente creciente, por favor.