1

我正在 Powershell 中使用 DTEXEC 运行一系列 SSIS 包。这些包驻留在 SSISDB 中。

我运行包没有问题,但是一旦包完成,我就遇到了确定实际结果状态的问题。从 SSISDB 运行包时,即使包失败(例如,在任务验证期间找不到文件),DTEXEC 也会返回零返回码。

一旦 DTEXEC 完成(或者我认为它已经完成),我试图查询 SSISDB(catalog.executions)以检查状态。我可以恢复状态 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 然后退出?我做错了什么?

谢谢

4

1 回答 1

1

尝试将同步标志传递给 dtexec

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

于 2013-07-25T19:28:44.530 回答