数据流在最后一条错误记录中失败 - Oracle Destination
Data Flow failing at last error record - Oracle Destination
我有一个简单的数据流任务,它正在将 1M 条记录从源传输到目标。 Source table 和 Destination table 都是 Oracle table。 source处的数据由两列Id和Name组成,如下所示-
create table SrcEmployeeData
(
Id int
,Name varchar(50)
);
里面的值是(1,'Test'),(2,'Test')等等直到百万。目标 table 是源 table 的镜像,除了 'Name' 列不是空列。在源头上,我已将 10 个随机行的 Name 列更新为 NULL。为了捕获这些错误,我创建了 4 个具有正确错误重定向的目的地。
前三个属于目标table。第一个将每批行数/最大插入提交大小设置为 50,000。第二个具有相同的值设置为 10,000。第三个具有相同的值设置为 1。最终的 DFT 用于捕获实际的错误记录。所有三个 DFT 的数据访问模式都设置为 'Table or view - fast load'。
看起来是这样的-
当程序包开始执行时,错误记录的传播直到最后一个 table 按预期进行。除了最后一条记录外,第一个50,000条记录为批次的DFT失败。当我查看目标 EmployeeData table 时,令人惊讶的是我什至没有找到一条记录。这里出了什么问题?
这是我得到的两个错误 -
[OLE_DST - Load Data (50,000 rows) [69]] Error: SSIS Error Code
DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code:
0xFFFFFFFF.
[SSIS.Pipeline] Error: SSIS Error Code
DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component
"OLE_DST - Load Data (50,000 rows)" (69) failed with error code
0xC0202009 while processing input "OLE DB Destination Input" (82). The
identified component returned an error from the ProcessInput method.
The error is specific to the component, but the error is fatal and
will cause the Data Flow task to stop running. There may be error
messages posted before this with more information about the failure.
这是具有 NULL 值的随机行 -
我正在使用最新的 Oracle Provider for OLE DB,并从这里下载了最新的 Oracle Data Components for Oracle- link。
编辑 - 只是为了让这更奇怪。我捕获错误行的最后一个 DFT 具有所有不正确的数据,如下所示(正在使用 SQL 服务器目标 table)。到目前为止,我已经进行了 运行 三次此测试,并且一直遇到同样的问题。有帮助吗?
按照 Troy Witthoeft 链接的 post,我所要做的就是将三个 Oracle OLE DB 目标的数据访问模式更改为 'Table or view',即 OpenRowSet。然后数据被正确传输,错误也被完全按照需要捕获。
我有一个简单的数据流任务,它正在将 1M 条记录从源传输到目标。 Source table 和 Destination table 都是 Oracle table。 source处的数据由两列Id和Name组成,如下所示-
create table SrcEmployeeData
(
Id int
,Name varchar(50)
);
里面的值是(1,'Test'),(2,'Test')等等直到百万。目标 table 是源 table 的镜像,除了 'Name' 列不是空列。在源头上,我已将 10 个随机行的 Name 列更新为 NULL。为了捕获这些错误,我创建了 4 个具有正确错误重定向的目的地。
前三个属于目标table。第一个将每批行数/最大插入提交大小设置为 50,000。第二个具有相同的值设置为 10,000。第三个具有相同的值设置为 1。最终的 DFT 用于捕获实际的错误记录。所有三个 DFT 的数据访问模式都设置为 'Table or view - fast load'。
看起来是这样的-
当程序包开始执行时,错误记录的传播直到最后一个 table 按预期进行。除了最后一条记录外,第一个50,000条记录为批次的DFT失败。当我查看目标 EmployeeData table 时,令人惊讶的是我什至没有找到一条记录。这里出了什么问题?
这是我得到的两个错误 -
[OLE_DST - Load Data (50,000 rows) [69]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0xFFFFFFFF.
[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "OLE_DST - Load Data (50,000 rows)" (69) failed with error code 0xC0202009 while processing input "OLE DB Destination Input" (82). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.
这是具有 NULL 值的随机行 -
我正在使用最新的 Oracle Provider for OLE DB,并从这里下载了最新的 Oracle Data Components for Oracle- link。
编辑 - 只是为了让这更奇怪。我捕获错误行的最后一个 DFT 具有所有不正确的数据,如下所示(正在使用 SQL 服务器目标 table)。到目前为止,我已经进行了 运行 三次此测试,并且一直遇到同样的问题。有帮助吗?
按照 Troy Witthoeft 链接的 post,我所要做的就是将三个 Oracle OLE DB 目标的数据访问模式更改为 'Table or view',即 OpenRowSet。然后数据被正确传输,错误也被完全按照需要捕获。