【发布时间】:2016-03-08 17:03:52
【问题描述】:
我有一个 SSIS 包,它从 Oracle 表中读取数据并将其放入 Netezza 表中。由于某种原因,SSIS 无法读取特定列值(2% 的记录),如此处的屏幕截图所示。
Oracle 中的列类型是 NUMBER(3),而在我的 Netezza 表中,它是 SMALLINT。知道为什么会发生这种情况吗?
错误栏也不给我任何信息。
到目前为止我所尝试的:
- 尝试使用此MSDN article 获得更好的错误描述。
- 将批量大小从默认的 1000 减少到 100。
提前感谢您的帮助。
编辑
我让它失败了,这是我收到的错误消息。我的笔记本电脑上有 4 GB 内存。这可能是个问题吗?
[DESTINATION_TABLE 2] 错误:出现打开数据库连接 (ODBC) 错误。 SQLExecute 在插入第 35244 行时返回错误
[DESTINATION_TABLE 2] 错误:出现打开数据库连接 (ODBC) 错误。状态:'HY008'。本机错误代码:51。操作已取消
[DESTINATION_TABLE 2] 错误:出现打开数据库连接 (ODBC) 错误。状态:'01000'。本机错误代码:1.无法写入nzlog/bad文件
[DESTINATION_TABLE 2] 错误:出现打开数据库连接 (ODBC) 错误。状态:'01000'。本机错误代码:1.无法写入nzlog/bad文件
[DESTINATION_TABLE 2] 错误:出现打开数据库连接 (ODBC) 错误。状态:'HY000'。本机错误代码:46。错误:外部表:错误输入行数达到最大错误限制
[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“ODBC 目标输入”(13) 时,组件“DESTINATION_TABLE”(2) 上的 ProcessInput 方法失败,错误代码为 0x80004005。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
[SOURCE_TABLE [63]] 错误:无法将行添加到输出缓冲区。
[SOURCE_TABLE [63]] 错误:出现打开数据库连接 (ODBC) 错误。
[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。 SOURCE_TABLE 上的 PrimeOutput 方法返回错误代码 0x80004005。当管道引擎调用 PrimeOutput() 时,组件返回了失败代码。失败代码的含义由组件定义,但是错误是致命的并且管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
【问题讨论】:
-
您是否尝试过仅从 oracle 提取到平面文件而不使用 NZ(用于故障排除)。需要弄清楚是导致问题的提取物还是负载...
-
您应该尝试设置 Netezza 目标的日志目录属性。您至少可以看到 nzlog/nzbad 输出文件,以便从目的地获得更多信息。
-
@NWest - 这是一个很棒的建议。我这样做了,还必须使用 MaxBufferSize 属性并将提交大小从 1000 更改为 500。它工作但需要 2 小时(停机时),但加载 646 MB 数据需要 2 小时。解决这个奇怪问题的方法是使用 Netezza 的 OLEDB 驱动程序并按照 Mehtat_90 所说的进行操作。
标签: sql-server oracle ssis netezza