如何在 Oracle 中解决此内存错误

Posted

技术标签:

【中文标题】如何在 Oracle 中解决此内存错误【英文标题】:How to solve this memory errors in Oracle 【发布时间】:2020-08-28 14:40:35 【问题描述】:

我有一个详细说明 XML 文档的包。该软件包每天运行,但几周后,现在每天都会出现以下错误:

ORA-04030: out of process memory when trying to allocate 4032 bytes (qmxdGetDocElem,qmemNextBuf:alloc)
ORA-04030: out of process memory when trying to allocate 1032 bytes (qmxlu subheap,qmemNextBuf:alloc)
ORA-04030: out of process memory when trying to allocate 40 bytes (kxs-heap-f,frame segment)

我从来没有遇到过这样的错误。 如果我尝试在其他时刻手动执行该程序包,它会正常工作并定期终止。 有人可以给我一些建议吗?这种类型的错误怎么办?我在 Oracle 10g 上工作

提前致谢!

标记

【问题讨论】:

您是如何处理 XML 的?邮政编码!如果您正在使用 DBMS_XMLGEN,请不要忘记致电DBMS_XMLGEN.CLOSECONTEXT DBA 添加了更多内存,但错误一直存在 在我的包中我多次使用本机函数 DBMS_XMLDOM.newDOMDocument 但我从未使用过 DBMS_XMLDOM.freeDocument 可以解决问题吗? 是的。这可能是您的问题之一。尝试在您的流程一次迭代的开始和结束时为您的SID 转储v$temporary_lobs 的内容。不应该有任何你没有从你的代码中期待的东西。如果有,请将呼叫添加到 freeDocument,重复测试,看看是否能全部完成。 我通过插入语句 DBMS_XMLDOM.freeDocument 解决了这个问题 太棒了!我添加了一个答案,这样如果您接受它,这个问题就不会显示为未回答/未回答。 【参考方案1】:

您正在使用DBMS_XMLDOM 创建文档。这将分配在您完成访问文档后必须释放的内存。最后调用DBMS_XMLDOM.freeDocument可以释放内存。

【讨论】:

以上是关于如何在 Oracle 中解决此内存错误的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 安装错误 - 无法在节点xx上执行物理内存检查 的解决

为啥安装oracle11g的时候总是应用程序错误

Oracle的SQL语句是如何工作的?

Oracle 错误代码详解及解决方式--ORA

如何解决最大内存超出错误

Oracle是如何工作的?实例是如何响应用户请求?一条SQL的执行过程~