当前位置:  开发笔记 > 数据库 > 正文

获取java.sql.SQLException:ORA-04031:

如何解决《获取java.sql.SQLException:ORA-04031:》经验,为你挑选了1个好方法。

当通过Web应用程序执行查询时,我得到了以下内容

java.sql.SQLException: ORA-04031:
java.sql.SQLException: ORA-04031: unable to allocate 48784 bytes of shared memory ("shared pool","SELECT   emplid levempid, '2...","Typecheck","qry_text : qcpisqt")

但是同样的查询正在通过TOAD正确执行.



1> Rob van Wijk..:

您的Java代码没有使用绑定变量的可能性非常高.在这种情况下,每个SQL语句都是唯一的,不会被重用,从而破坏共享池.它将变得支离破碎,最终导致ORA-04031.

重新启动数据库只会暂时起作用,但最终会遇到同样的问题.增加共享池大小并定期重新启动数据库并不是一个真正的解决方案.唯一真正的解决方案是重写SQL以使用绑定变量.

这是一个体验类似东西的AskTom线程:http://asktom.oracle.com/pls/apex/f?p = 100:11:0 :::: P11_QUESTION_ID:528893984337

一个很好的小程序来跟踪哪些SQL语句没有使用绑定变量可以在这个帖子中找到:http://asktom.oracle.com/pls/apex/f?p = 100:11:0 ::: :P11_QUESTION_ID:1163635055580

希望这可以帮助.

问候,Rob.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有