Oracle 进程外内存问题,出现以下错误

Oracle 进程外内存问题,出现以下错误,oracle,oracle12c,Oracle,Oracle12c,之前,我是得到PGA_聚合_限制超过问题。因此,我将PGA_AGGRIGATE_LIMIT更改为0(无限制) 我们有47GB内存。我们已将PGA\u聚合\u限制设置为0。PGA_目标=10GB。仍然存在“进程外内存问题”,如有任何建议,将不胜感激 以下是错误: java.sql.SQLException: ORA-04030: out of process memory when trying to allocate 107096 bytes (kolarsCreateCt,qmemNextBu

之前,我是得到PGA_聚合_限制超过问题。因此,我将PGA_AGGRIGATE_LIMIT更改为0(无限制)

我们有47GB内存。我们已将PGA\u聚合\u限制设置为0。PGA_目标=10GB。仍然存在“进程外内存问题”,如有任何建议,将不胜感激

以下是错误:

java.sql.SQLException: ORA-04030: out of process memory when trying to allocate 107096 bytes (kolarsCreateCt,qmemNextBuf:Large Alloc)
ORA-06512: at "SYS.XMLTYPE", line 138.

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225)
    at oracle.jdbc.driver.T4CPreparedStatement.fetch(T4CPreparedStatement.java:1066)
    at oracle.jdbc.driver.OracleStatement.fetchMoreRows(OracleStatement.java:3716)

可能会影响这种情况并导致此错误的因素很多,包括PGA_聚合_限制、操作系统和内核配置、oracle用户(Linux上)的ulimit设置等。如果您有足够的物理RAM,然后我怀疑ulimit值可能是您的问题——人为地限制操作系统可以分配的内存量。有关其他疑难解答提示,请参见以下链接:


我假设这个问题与相关,并且您正在加载占用所有内存的大型XML文件。像pmdba建议的那样调整内存设置是一个好主意,但只有在单个文件非常大的情况下,它才能帮助您实现这一点

应用程序通常不会从数据库表中读取1GB的文件。通常,通过批处理命令和一次处理多个项目,应用程序性能会得到提高。对于如此大的文件,批处理会很快耗尽内存,因此您应该尝试调整设置,尽可能逐行处理。禁用此查询的预回迁。如果这不起作用,请尝试执行多个查询,每个查询只返回一行

或者,您可以更改XML在数据库中的存储方式,并创建XML索引以提高查询性能。我没有使用这些功能,但Oracle提供了不同的存储和索引XML的方法,我敢打赌,其中一种方法允许您读取XML,而无需将整个内容加载到内存中。有关更多信息,请参阅