3

我有一个简单的数据流任务,它将 1M 记录从源传输到目标。Source 表和 Destination 表都是 Oracle 表。源数据由两列 Id 和 Name 组成,如下所示 -

create table SrcEmployeeData
(
   Id   int
  ,Name varchar(50) 
);

其中的值是 (1,'Test') , (2,'Test') 等等,直到百万。目标表是源表的镜像,但“名称”列是非空列。在源头,我已将 10 个随机行的名称列更新为 NULL。为了捕获这些错误,我创建了 4 个具有正确错误重定向的目的地。

前三个是目标表。第一个将每批行数/最大插入提交大小设置为 50,000。第二个具有相同的值设置为 10,000。第三个具有相同的值设置为 1。最终的 DFT 用于捕获实际的错误记录。所有三个 DFT 的数据访问模式都设置为“表或视图 - 快速加载”。

看起来像这样 -

在此处输入图像描述

随着包开始执行,直到最后一个表的错误记录的传播按预期进行。除了最后一条记录,第一个 50,000 条记录集作为批次的 DFT 失败。当我查看目标 EmployeeData 表时,令人惊讶的是,我什至没有找到一条记录。这里出了什么问题?

这是我得到的两个错误-

[OLE_DST - 加载数据(50,000 行)[69]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0xFFFFFFFF。

[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“OLE DB 目标输入”(82) 时,组件“OLE_DST - 加载数据 (50,000 行)”(69) 上的 ProcessInput 方法失败,错误代码为 0xC0202009。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

这是具有 NULL 值的随机行 -

在此处输入图像描述

我正在使用适用于 OLE DB 的最新 Oracle 提供程序,并从此处链接下载适用于 Oracle 的最新 Oracle 数据组件。


编辑- 只是为了让这更奇怪。我捕获错误行的最后一个 DFT 包含所有不正确的数据,如下所示(正在使用 SQL Server 目标表)。到目前为止,我已经运行了三次此测试,并且一直遇到同样的问题。有什么帮助吗?

在此处输入图像描述

4

1 回答 1

3

按照 Troy Witthoeft 链接的帖子,我所要做的就是将三个 Oracle OLE DB 目标的数据访问模式模式更改为“表或视图”,即 OpenRowSet。然后数据被正确传输,错误也被准确地捕捉到。

于 2017-08-17T04:08:40.227 回答