Причины сбоя задания SSIS с кодом завершения -1073741819? - PullRequest
1 голос
/ 11 февраля 2011

Я относительно новичок в SSIS.В среде, в которой я работаю, у меня есть доступ только к базе данных Dev.Я создаю и тестирую пакеты, а затем отправляю их администратору базы данных для выполнения в нашей среде UAT.Один из этих пакетов, который импортирует файлы XML, периодически завершается сбоем при запуске в качестве задания агента SQL Server.Это проблема, так как конечным решением является высоконадежная система.Тестовая загрузка составляет приблизительно 46000 файлов, и импорт по-разному завершается неудачей после импорта 1000-2000 файлов.

Очень информативное сообщение об ошибке показано ниже.Я провел небольшое исследование, и единственная информация, которую я могу найти об этой ошибке (которая в лучшем случае схематична), говорит о проблемах параллелизма.Итак, я сократил максимальное количество казней до 1 ... все та же проблема.

Executed as user: \. Microsoft (R) SQL Server Execute Package Utility Version 9.00.4035.00 for 32-bit Copyright (C) Microsoft Corp 1984-2005. All rights reserved. Started: 2:19:57 PM. The return value was unknown. The process exit code was -1073741819. The step failed.

Может кто-нибудь предложить причину или решение?Или даже метод получения дополнительной диагностической информации?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Настройка пакета для захвата событий с включенным журналом во время выполнения.
Нажмите на меню SSIS -> Регистрация Мне нравится использовать провайдер журналов для SQL Server, это создаст системный процесс с именем sp_ssis_addlogentry и таблицу с именем sysssislog. Это должно по крайней мере дать вам компонент в пакете, который выходит из строя.

Если бы мне пришлось предположить , в ScriptTask есть исключение, которое не обрабатывается, и задача не устанавливает DTS.TaskResult.

DTS.TaskResult = (int)ScriptResults.Failure

Попробуйте обернуть код ScriptTask примерно так (но удалите catch (Exception Ex), когда выясните, в чем проблема)

try
{
    bool fireAgain = false;
    // Some Code
    Dts.Events.FireInformation(0, "", "Some logable info: I Love Puppies", String.Empty, 0, ref fireAgain);
    Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception Ex)
{
    Dts.Events.FireError(1, "", "FAILURE: " + Ex.Message, "", 0);  // this will show up in the sysssislog table
    Dts.TaskResult = (int)ScriptResults.Failure;
}
1 голос
/ 15 февраля 2011

Ваш поток полностью последовательный, или у вас есть какие-то параллельные задачи?Если есть параллельные задачи, то это может быть проблемой с синхронизацией двух потоков (то есть один может получать доступ к данным, которые использует другой поток ... или, возможно, что-то, с чем SSIS не может справиться).

Вы можете попытаться установить для MaxConcurrentExecutables пакета значение 1 (т.е. принудительно использовать только 1 поток, который будет использоваться при запуске пакета).Вы можете увидеть / установить это свойство в конструкторе, когда открываете пакет и просматриваете окно Control Flow.Если для этого свойства установлено значение 1, это должно помочь вам определить, является ли это типом проблемы, с которой вы сталкиваетесь.Если это решит вашу проблему, то вы можете либо оставить его с этим параметром, либо поэкспериментировать со своим пакетом, чтобы попытаться устранить параллелизм, который вызывает исходную проблему.

Вот ссылка на флаг MaxConcurrentExecutables: http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.package.maxconcurrentexecutables(v=SQL.90).aspx

...