Сколько времени занимает SSISDB для записи статуса выполнения пакета?
Я запускаю серию пакетов служб SSIS, используя DTEXEC в Powershell. Пакеты находятся в SSISDB.
У меня нет проблем с запуском пакета, но у меня возникают проблемы с определением фактического состояния результата после завершения пакета. Когда пакет запускается из SSISDB, DTEXEC возвращает код возврата ZERO даже в случае сбоя пакета (например, файл не найден во время проверки задачи).
Я попытался запросить SSISDB (catalog.executions), чтобы проверить состояние после завершения DTEXEC (или я думаю, что он завершен). Я могу вернуть статус 2 ("работает"). Это даже происходит, когда я добавляю 5-10 секундное ожидание.
Я подозреваю, что код, который я использую для запуска DTEXEC, может быть виновником. Это функция, которую я использую:
function run_pkg ($DTExecArgs) {
$rc = -1
# Run DTExec
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.Filename = "C:\Program Files\Microsoft SQL Server\110\DTS\Binn\DTExec.exe"
write-host "Starting... " $DTExecArgs
# The next few lines are required to make sure the process waits for
# the package execution to finish
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = $DTExecArgs
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$output = $p.StandardOutput.ReadToEnd()
$p.WaitForExit()
$rc = $p.ExitCode
# DTExec Finished
return $rc
}
Аргумент функции выглядит так:
/ isserver \ SSISDB \ IPTS-DW \ ETL \ ETL_SYSTYPE_T_PKG.dtsx / server localhost
Я думаю, что WaitForExit() должен заставить скрипт ждать завершения DTEXEC.
Есть идеи? DTEXEC бросает работу через забор в ICS и затем выходит? Я что-то не так делаю?
Спасибо
1 ответ
Попробуйте передать синхронизированный флаг в dtexec
/Par "$ServerOption::SYNCHRONIZED(Boolean)";True