Согласно MSDN,
Метод Stop выдает запрос остановки на службу Integration Services, , но это не останавливает пакеты немедленно. Может существовать задержка между запросом на остановку и временем, которое пакеты фактически останавливаются.
Это безопасный подход (я могу попытаться объяснить, почему/как, если хотите), но если вы действительно должны убить выполнение пакета тогда и там, вам нужно убить процесс, который его выполняет. Дайте мне знать, если вам тоже нужна помощь.
Однако я рекомендую, чтобы ваш центр управления использовал несколько потоков с обратным вызовом для достижения того, что вы пытаетесь сделать. Центр управления может выдавать запрос на остановку запущенных пакетов в отдельном потоке. Ваш отдельный поток также может отвечать за уведомление основного потока вашего центра управления делать то, что вы пытаетесь сделать, как только пакеты перестали работать. Или, если для вас работает синхронный подход, то отлично.
EDIT: Объясняя «безопасный подход» и как выполнить «небезопасный подход»
Из того, что я понимаю, пакеты SSIS проверить только для запросов остановки между ними задачами. Тем не менее, если пакет находится в середине выполнения длинной задачи потока данных, вы должны дождаться завершения задачи потока данных. Это необходимо для сохранения целостности данных и предотвращения несогласованных состояний.
Итак, что вы можете сделать, чтобы остановить пакет, когда он находится в середине выполнения длинной задачи потока данных? Как я сказал ранее, вам придется убить процесс, выполняющий пакет (с пониманием того, что это может привести к повреждению данных и другим негативным вещам).
using System.Diagnostic;
...
void StopAllPackages() {
// Get all processes executing an SSIS package on the database server.
// If you run this on the database server itself, remove the second parameter
// from GetProcessesByName.
foreach(Process p in Process.GetProcessesByName("dtexec.exe","databaseServerMachine") {
try { p.Kill(); }
catch(Win32Exception w32e) {
// process was already terminating or can't be terminated
}
catch(InvalidOperationException ioe) {
// process has already exited
}
}
}
Другой способ сделать это, чтобы выяснить идентификатор процесса на SQL Server (то есть, если вы просмотра Activity Monitor) и выдает запрос, чтобы убить процесс сервера SQL, связанный с выполнением пакета.
Он запускается внутри другого (основного) пакета SSIS, который действует как центр управления для управления другими потоковыми пакетами.Это дает вам больше подсказок? – Bank 2010-11-25 15:50:53
У меня есть ключ. Все ли пакеты по-прежнему работают после остановки или только последний, для которого вы вызвали остановку? В документации MSDN говорится, что запрос на блокировку выдается службе интеграции. Поскольку служба интеграции находится в режиме отладки, запрос не может быть обработан своевременно. – 2010-11-25 17:30:32