【发布时间】:2021-02-05 11:11:10
【问题描述】:
我正在运行一个 SSIS 包,它使用 OLEDB 连接从 Oracle 10.2.0.5.0 数据库中获取数据并将其插入 SQLServer 2012 (11.0.6260)
我收到以下错误。
Time: 2021-02-05 01:13:55 AM
Task: Data Flow Task
Error Description: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
紧随其后
Time: 2021-02-05 01:13:55 AM
Task: Data Flow Task
Error Description: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on OLE DB Source returned error code 0xC0202009. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.
目标表上没有键或约束。
两个数据流任务都将CommandTimeout 设置为0。
具有相同源数据库和目标数据库的所有其他包都可以正常运行。
编辑 2
这个特定的包在我们的测试/开发环境中运行良好。
我已经多次运行这个包,发现源查询返回了大约 4500 条记录,但只有大约 500 条记录被插入到目标数据库中。
结束编辑 2
还有什么我可以检查的吗?
编辑 1
错误消息与服务管理器中显示的一样。
错误前的日志文件如下。
源查询与运行查询相当。大约需要 9 分钟。
结束编辑 1
【问题讨论】:
-
您是否尝试删除目标表、向数据流添加派生列并在该流上启用数据查看器?可能会给出从源查询返回哪些数据的想法。无论如何,可能是源和目标之间的数据类型不匹配 - 并非所有 oracle 类型都可以 1:1 插入 SQL Server 表中
-
错误信息在第一行被截断。棘手,因为您无法在 dev 中重新创建它。如果您可以通过 ssis 目录运行它并检查 Reports > All Executions > All Messages,您应该会获得这些消息的下半部分以及更多详细信息。
-
@vhoang。该错误也在“所有消息”中被切断。请参阅上面的编辑 1。
-
@Tyron78 我会尝试添加一个派生列。所有列都是
datetime、number或nvarchar,所以没什么太复杂的。生产环境和开发环境中的源表和目标表完全相同。 -
既然您确定它在开发中是同一个数据集。考虑将包属性 MaxConcurrentExecutables 从 -1 设置为 1。类似但不完全相同 issue here。
标签: sql-server ssis oledb