尝试分配X内存时,sqlplus进程内存

时间:2016-10-25 02:38:21

标签: oracle sqlplus

我们正在使用sqlplus在oql上使用sqlplus卸载数据,该表包含500多列,每天大约1500万条记录。 查询失败,因为oracle无法为结果集分配所需的内存。 微调oracle数据库服务器以增加内存分配被排除,因为它跨团队使用并且是至关重要的。 这是一个简单的选择,在列上有一个过滤器。 我有什么选择让它起作用?

1)将我的查询分解为多个块并以夜间批处理模式运行。 如果是这样,如何分解选择查询 2)在大型表上使用sqlplus进行选择查询时,是否可以使用任何优化技术? 3)任何基于java / ojdbc的解决方案,它可以将select分解为块并减少db server上的负载?

任何指针都受到高度赞赏。

这是抛出的错误消息: ORA-04030:尝试分配169040字节时的进程内存(pga堆,kgh堆栈) ORA-04030:尝试分配16328字节时的进程外内存(koh-kghu sessi,pl / sql vc2)

2 个答案:

答案 0 :(得分:1)

ORA-4030表示进程需要更多内存(SGA / PGA中的UGA,具体取决于服务器体系结构)才能执行作业。

这可能是由于RAM(专用服务器模式环境)不足,PGA规模较小,或者可能是操作系统设置以限制足够RAM的分配造成的。

此MOS注释描述了如何诊断和解决ORA-04030错误。

诊断和解决ORA-4030错误(文档ID 233869.1)

答案 1 :(得分:0)

您的选项1似乎在您的控制范围内。分解查询将需要查询/数据的知识。数据中的列可能有效;即。

query1: select ... where col1 <= <value>
query2: select ... where col1 > <value>

......或者......你可能需要围绕这个问题构建更多代码。

思考:查询涉及排序/分组吗?你可以没有它吗?这些操作会占用更多内存。