2013-07-25 57 views
1

我正在Powershell中使用DTEXEC运行一系列SSIS包。这些软件包驻留在SSISDB中。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 /服务器localhost

我想WaitForExit()应该使脚本等到DTEXEC完成。

任何想法? DTEXEC是否将工作从栅栏扔到ICS然后退出?我做错了什么?

感谢

回答

1

尝试传递Synchronized flag到DTEXEC

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

+0

感谢 - 这工作。我还在http://msdn.microsoft.com/en-us/library/hh231187.aspx#parameter –

+0

上找到了一些信息,很高兴听到它并欢迎来到SO。如果您发现有用的问题或答案,请随时点击向上箭头。如果这解决了您的问题,您可以点击绿色复选标记将其设置为已解决 – billinkc