Сколько времени занимает 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

Другие вопросы по тегам