请帮帮忙,我很无助。
我使用Spark和ojdbc 8 -12.2.0.1驱动程序从Oracle读取数据。
将提取大小设置为5000。一切都运行良好,直到最后一刻,以获得最后一批5000记录和过程只是挂起。
我还尝试使用Scala和ojdbc 11:23.2.0.0库实现简单的阅读器。
同样的事情。无论我设置了什么样的提取大小,一切都很好,直到最后一段数据,Oracle DB根本没有响应。
例如:我查询一个包含499条记录的数据子集,我将获取大小设置为100,我收到了前400条记录,但最后99条记录的请求挂起而没有响应。
我尝试在Scala代码中使用Connection. setNetworkServer来中断连接,如果Oracle在过去10秒内没有响应。事实上,Oracle没有对最后一个请求做出回应。
可能是什么原因呢?
1条答案
按热度按时间gajydyqb1#
我无法解释客户端驱动程序库的奇怪行为,但我知道问题的原因:
Oracle DB表SampleTable,列batch_id VARCHAR2(10)。
当发送带有使用数值的过滤器的查询时,问题再次出现。例如:
假设有25条记录,我们的提取大小是10,我们将收到20条记录,然后进程挂起。
如果我们将request改为使用正确的条件类型string而不是number,那么问题就消失了:
现在我们可以毫无问题地获取所有25条记录。
以下是Scala示例代码:
使用Maven dependecy构建: