Я створив проект SSIS, використовуючи модель розгортання 2012 року, що складається з одного пакету. У цьому пакеті я додав OLE DB Connection Manager, вказав на tempdb і скинув завдання на сценарій на полотно. Я також увімкнув явну реєстрацію за допомогою цього OLE DB Connection Manager і захопив 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 на каталог.operation_messages, якщо ви хочете зафіксувати всі виконання пакету.
Наконечник капелюха, мої щирі подяки та заслуга відповіді відмовляються від Мар'яна за те, що він поставив мене на правильний шлях. З огляду на вибір між збереженням GUID (16 байт) та bigint (8 байтів) у моїй узагальненій таблиці реєстрації, для мене це не є монітором: монотонно збільшуючи велике ціле число, будь ласка.