Я создал проект служб SSIS, используя модель развертывания 2012 года, состоящую из одного пакета. В этом пакете я добавил диспетчер соединений OLE DB, указал его на базу данных tempdb и бросил задачу Script на холст. Я также включил явное ведение журнала с помощью этого диспетчера подключений OLE DB и записал OnInformation
событие.
SCR Пожарная информация
Я сконфигурировал задачу скрипта для получения двух параметров: System::ExecutionInstanceGUID
и System::ServerExecutionID
я признаю, что в этот момент я не заметил вторую переменную до ответа Мариан. Внутри задачи я вызываю 2 информационных события, чтобы получить записанные значения. Это должно быть зарегистрировано как в явной таблице (dbo.sysssislog), так и в «свободной» записи (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;
}
Развернуть и выполнить
Затем я развернул свой проект на сервере и выполнил его.
Я открыл отчет об операциях и нажал на SCR Fire info
детали задачи.
Пункт в красном кружке показывает, что мы просматриваем детали для операции 8, как и ожидалось. Выделенные строки - это OnInformation
события, которые запутали значения этих двух системных переменных. Также, как и ожидалось, значение System::ServerExecutionID
соответствовало тому, что было в отчете. Значение System::ExecutionInstanceGUID
как всегда было бессмысленным, но оно присутствовало {3F515780-8062-40AA-B9EC-C320CBAC5EFD}.
Связывая все это вместе
Теперь у меня было два разных журнала, которые я хотел связать.
запрос sysssislog
Выполнение этого запроса извлекло соответствующие строки из таблицы журналов старой школы.
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;
Результаты были похожи
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
Выполнение этого запроса к каталогу SSISDB показало все сообщения, которые были в приведенном выше отчете, а также подтвердило, что я могу связать значение как message
с, operation_id
так и сdbo.sysssislog.executionid
SELECT
OM.*
FROM
catalog.operation_messages AS OM
WHERE
OM.operation_id = 8;
Эти результаты были
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
Заворачивать
Когда пакет выполняется вне контекста каталога SSISDB (он же через SSDT-BI или командную строку для .ispac), значение System::ServerExecutionID
будет равно 0. Это имеет смысл, но будущие читатели либо используют LEFT OUTER JOIN при связывании sysssislog с catalog.operation_messages, если вы хотите перехватить все выполнения пакета.
Шляпный отзыв, мое искреннее спасибо и благодарность за ответ отправляемся к Мариан за то, что поставили меня на правильный путь. Учитывая выбор между хранением GUID (16 байт) и bigint (8 байт) в моей обобщенной таблице журналирования, для меня нет ничего сложного: монотонно увеличивать большое целое, пожалуйста.