我一直在使用SSIS包,它表现出一些奇怪的行为。目前,我们通过Task Scheduler运行此程序包,该程序调用程序调用引用该程序包的.bat文件。此程序包经常失败,但如果重新运行足够多次,它将始终成功运行(结果0x0)。我们将此过程的任务计划程序任务设置为在返回不是0x0的结果时自动重新运行。通常它在前3次尝试中运行,通常在第一次尝试中运行。自从几个月前我进行了更新以来,它在一些情况下花费了比往常更长的时间,比往常更频繁地失败。
不幸的是,重新运行实际上只是一种权宜之计,并不是我们问题的长期解决方案。但是,考虑到我们处于当前周期的情况,对此包的彻底检查是不可行的。有关更多背景信息,此程序包将执行ETL过程。
前几天,我通过SSMS Integration Services运行了包,以了解包失败的原因以及原因。我收到了以下错误:
错误:SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80040E21。 OLE DB记录可用。资料来源:" ASEOLEDB" Hresult:0x00000000描述:" [本机代码:30071] [ASEOLEDB]不支持的参数类型"。
错误:获取参数化行集时发生OLE DB错误。检查SQLCommand和SqlCommandParam属性。
错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件上的ProcessInput方法" Lookup 1" (70326)在处理输入"查找输入"时失败,错误代码为0xC0208253。 (70327)。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
错误:尝试向数据流任务缓冲区添加行失败,错误代码为0xC0047020。
错误:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。组件上的PrimeOutput方法" DIST数据" (1660)返回错误代码0xC02020C4。当管道引擎调用PrimeOutput()时,组件返回失败代码。失败代码的含义由组件定义,但错误是致命的,管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
DTS_E_PRIMEOUTPUTFAILED错误以及上一行发生了10个不同的组件,但我不认为将它们全部列出是有帮助的,因为它是相同的错误。
我已经完成了一些阅读,根据我的理解,此错误可能与缓冲区大小有关。我不明白为什么有时会出现这种错误而不是其他错误。关于不支持的参数类型的第一个错误是我无法找到的东西,但同样适用:为什么它有时会失败并且有时会工作?
我真的希望有人能够解释为什么有时会发生这些错误,但并非总是如此,如果有可能的快速解决方案我可以调查一下,以便更快地成功运行包。
非常感谢任何见解。
答案 0 :(得分:0)
SSIS错误消息往往并不总是反映真相。您看到的问题更可能是由于数据库连接问题。事实上,错误是随机的,这使得这种可能性更加强烈。
当再次出现错误时,尝试运行您在OleDb阶段中通过Management Studio或命令行显示错误的相同查询,以及激活SQL Server日志以检查数据库的连接是否在某处丢失方式。这是我要解决的第一件事,而不是查看ssis包,因为如果它工作一次,那么它应该始终有效,因为所有外部因素都不会改变,在这种情况下不可能是真的。