我有一个简单的数据流任务,它将 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 目标表)。到目前为止,我已经运行了三次此测试,并且一直遇到同样的问题。有什么帮助吗?