SSISDB记录包执行状态需要多长时间?

时间:2013-07-25 18:31:07

标签: ssis dtexec

我在Powershell中使用DTEXEC运行一系列SSIS包。这些包位于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 个答案:

答案 0 :(得分:1)

尝试将Synchronized flag传递给dtexec

/Par "$ServerOption::SYNCHRONIZED(Boolean)";True