SSIS目标插入错误

时间:2017-02-20 15:25:09

标签: sql-server visual-studio ssis etl

包装说明:我使用来自一个数据库的来源进行查找以获取代理地理位置密钥然后另一个用于检查客户是否存在,如果不是则插入行,如果这样更新行...

问题:我无法插入大约700,000行。

问题说明:我已经看了很长时间了,现在使用数据查看器,输出到平面文件,找不到问题的原因。

从下面的错误,通过SSIS进行研究和检查我得出了一个空白。

  

错误:DimCustomer的0xC0209029,Dw_DimCustomer [2]:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 " Dw_DimCustomer.Inputs [OLE DB目的地输入]"失败,因为错误代码0xC020907B发生,错误行处置" Dw_DimCustomer.Inputs [OLE DB目的地输入]"指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

     

错误:DimCustomer的0xC0047022,SSIS.Pipeline:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件上的ProcessInput方法" Dw_DimCustomer" (2)在处理输入" OLE DB目的地输入"时失败,错误代码为0xC0209029。 (15)。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

     

错误:DimCustomer上的0xC02020C4,SQL_Customer [154]:尝试向数据流任务缓冲区添加行失败,错误代码为0xC0047020。

     

错误:DimCustomer上的0xC0047038,SSIS.Pipeline:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。 SQL_Customer上的PrimeOutput方法返回错误代码0xC02020C4。当管道引擎调用PrimeOutput()时,组件返回失败代码。失败代码的含义由组件定义,但错误是致命的,管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

SSIS Package

工作完成:

我检查了所有格式匹配,并且不会发生截断。 检查所有查找是否正常工作。 丢弃了我的目标数据库(我在测试环境中不用担心)并重新创建它。 我已检查所有正确的列是否在任务之间以正确的格式显示正确的数据。 我检查过唯一的错误来自最终的OLE DB目标输出(它是)。

我不确定去哪里,答案是StackOverflow。

任何指针,想法或帮助都会受到欢迎。

3 个答案:

答案 0 :(得分:1)

从您附加的图片中我认为您使用的是SSIS 2012或更高版本,搜索后有很多问题会导致此问题。

您可以测试以下内容:

<强>第一

如果您的服务器操作系统是64位尝试在64位运行时运行您的ssis包。您可以按照此link了解详细信息。

<强>第二

尝试将OLEDB Destination替换为SQL server Destination,并将TIME OUT设置为更高的值(例如:500)

<强> Thrird

在您身上OLEDB Destination尝试取消选中Check Constraints复选框(错误可能由约束引起

<强>参考

第一个解决方法

第二种解决方法

其他信息

我认为这是主要的错误消息,您可以搜索它(如果没有从您的软件包收到错误消息),如果我的答案没有&#39解决了它:

  

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

希望有所帮助

答案 1 :(得分:0)

转到DimCustomer属性:

enter image description here

  

使BufferMaxRows为100.这可能会增加程序包的执行时间,因为在该实例中使用较少的RAM一次只能传输100行。

如果这不起作用:

您可以为For-loop创建go。每次运行时,在For-loop中添加相同的100行。您可以通过将总计数除以100来找到循环执行。这肯定会对您有所帮助!

答案 2 :(得分:0)

在数据到达数据流目的地之前损坏数据时会发生此错误。数据流意外地发现了空值,空值,空白值或空值,您应该使用正常备份来重新创建源数据库。