SQL Server代理作业运行含Execute Process任务的SSIS包报错0xC0029151咨询
SSIS作业调用Execute Process执行Fastload报错解决方案
你遇到的0xC0029151是SSIS Execute Process任务的执行失败报错,对应的进程退出码-1073740791转换为十六进制为0xC0000409,结合你数据实际加载成功的现象,优先排查以下配置项:
- 校验Fastload退出码规则
Teradata Fastload执行成功但存在合规警告(比如无新增数据、重复记录被过滤、表结构校验提示等)时,会返回0以外的非错误类退出码(常见为2),而SSIS Execute Process任务默认仅将退出码0判定为成功,只要返回值不匹配就会标记任务失败。你可以在批处理文件末尾增加如下代码,捕获SQL Agent作业执行时的实际退出码:
确认退出码为非错误类值后,打开Execute Process任务属性面板,将「SuccessValue」参数从默认的0修改为你捕获到的合法值即可;如果存在多个合法退出码,可在任务的前置/后置约束中增加判断逻辑,只要退出码不属于错误区间(通常大于等于4才是真错误)就标记为成功,继续执行后续任务。echo %date% %time% 进程退出码:%errorlevel% >> C:\temp\fastload_exit.log exit %errorlevel% - 排查系统环境变量差异
手动执行包、直接跑批处理时使用的是当前登录用户的环境变量,而SQL Agent作业执行时默认读取系统级环境变量,若Teradata客户端、Fastload依赖的路径只配置在当前用户的PATH变量中,作业执行时就会出现偶发的调用异常。你可以在批处理开头加入set >> C:\temp\env_compare.log,分别手动执行和作业执行各一次,对比两个日志的环境变量差异,将缺失的Teradata驱动、Fastload安装路径等配置添加到系统环境变量中,配置完成后重启SQL Agent服务生效。 - 关闭不必要的控制台输出
若Fastload执行过程中产生大量日志打印,作业执行时没有对应的控制台窗口接收输出,会导致输出缓冲区溢出,触发你遇到的0xC0000409报错。你可以在Execute Process任务配置中开启StandardOutput、StandardError的日志重定向,将输出写入到本地文件,或者在调用Fastload的命令后增加>nul 2>&1屏蔽控制台输出,即可解决缓冲区溢出问题。
内容的提问来源于stack exchange,提问作者HarryS
相关产品推荐
相关产品推荐

