随机 SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED

Posted

技术标签:

【中文标题】随机 SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED【英文标题】:Random SSIS Error Code DTS_E_PRIMEOUTPUTFAILED 【发布时间】:2014-05-22 15:19:17 【问题描述】:

我看过很多关于这个错误的帖子,不同的是我有时会遇到这个错误,有时会,有时不会,我无法与任何东西建立关系。如果我在错误发生后立即重新运行 SSIS 包,它通常可以正常工作。

我已经更改了 sql 驱动程序,正如我在许多与此错误相关的帖子中看到的那样,但它不起作用。

所以...情况就是这样:每次 SSIS 包失败时,我都会收到 2 条错误消息

Error1:-1073450952:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。组件“XXXX”(30) 上的 PrimeOutput 方法返回错误代码 0xC0202009。管道时组件返回失败代码 引擎称为 PrimeOutput()。故障码的含义是 由组件定义,但错误是致命的,并且管道 停止执行。在此之前可能会发布错误消息 提供有关失败的更多信息。

Error2:-1071636471:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。 OLE DB 记录是 可用的。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“TDS 流中的协议错误”。一个 OLE DB 记录可用。资料来源:“Microsoft SQL Server Native 客户端 10.0" Hresult:0x80004005 描述:"通信链接 失败”。一个 OLE DB 记录可用。来源:“Microsoft SQL 服务器 Native Client 10.0" Hresult: 0x80004005 描述: "TCP 提供者:一个现有的连接被远程强行关闭 主持人。 ”。

一个 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“通信链路故障”。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“TCP Provider:现有连接被远程主机强行关闭。 ”。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“通信链路故障”。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0” Hresult:0x80004005 描述:“TCP Provider:现有连接被远程主机强行关闭。 ”。

提前感谢您的时间和帮助!

【问题讨论】:

可能是硬件相关问题 - 例如。 blogs.msdn.com/b/sql_protocols/archive/2008/04/08/… 当我得到它时,它表明目标磁盘空间不足。 【参考方案1】:

这类问题相当普遍,几乎无法追踪和消除。

我将从 SQL Server 代理作业启动 SSIS 包。在作业步骤定义中,我会将其设置为重试,例如3 次,延迟 5 分钟。

【讨论】:

谢谢迈克;这很奇怪,但在大多数情况下作业失败,我收到带有错误代码的电子邮件,但在作业活动监视器中它正在运行(相信我,我已经刷新了屏幕:))所以,重试选项是不在这里工作。几天前我这样做了,由于作业似乎正在运行,服务器永远不会重试 我会检查作业历史记录窗口 - 在那里您可以查看正在运行的作业是否失败并正在重试。 仅作记录……迈克,您的解决方案在大多数情况下都能正常工作。有时,SQL Server 会错过“作业失败”的情况,并在代理上将作业保持为“正在运行”。这就是工作不会重新开始的地方。在其他情况下,它会起作用......所以......部分解决了。谢谢 此 SQL 2012 是否使用包目录架构?【参考方案2】:

这可能是一个并发问题。我有一个包,我从源表中读取,然后从目标表中读取,然后进行一些转换,最后幸存者在目标表中得到更新。根据中间步骤的多少、逻辑的复杂程度以及当天的网络流量情况,该过程可能会在锁定之前的不同日期到达不同的检查点。

我从活动监视器中发现我的写入正在等待其余的行。它没有告诉我的是,我的读取被写入时的表锁阻塞了。我通过在读取和写入之间插入客户端排序来强制执行阻塞操作。其他可能的解决方案包括写入临时表;关闭目标写入上的table-lock重做逻辑,这样你就不需要目的地了;或将它们拆分为不同的数据流任务并使用优先箭头强制执行顺序。

如果您正在执行“upsert”(插入或更新)操作,请尝试使用类似于此处描述的模式:http://www.sqlservercentral.com/articles/Integration+Services+%28SSIS%29/62063/

【讨论】:

【参考方案3】:

我的包裹也有类似的问题。我的来源是 mysql 数据库,所以我使用的是 .Net 提供程序。 MySql 提供程序。在导入大约 30 k 条记录后,我的源代码块中有错误:

错误 1:-1073450952:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。组件“XXXX”(30) 上的 PrimeOutput 方法返回错误代码 0xC0202009。当管道引擎调用 PrimeOutput() 时,组件返回了失败代码。失败代码的含义由组件定义,但是错误是致命的并且管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

我通过更改该连接管理器(MySql 提供程序)的高级选项来修复它:

我将value = 10 设置为keep alive,并增加了连接超时值。

【讨论】:

【参考方案4】:

与源的连接已损坏。我们也遇到过这种情况。在我们的例子中,源是一个日志传送服务器,当包试图与服务器建立连接时,它会强制关闭连接,因为它正处于备份/恢复操作的中间。所以我们改变了连接服务器的时间来避免这个失败。出现此问题的另一个案例与网络问题有关,主要是通过连接到管理团队解决了问题。

【讨论】:

以上是关于随机 SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED的主要内容,如果未能解决你的问题,请参考以下文章

奇怪的 SSIS 错误(进程退出代码 255)

[Excel 源 [37]] 错误:SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER

SSIS错误汇总

SSIS部署:SQL Server部署中的SSIS包运行时错误

SSIS 错误:尝试向数据流任务缓冲区添加行失败,错误代码为 0xC0047020

SSIS FTP 任务错误