此问题与JDBC连接池有关,这是所有使用JDBC连接池的应用程序服务器(不仅仅是Tomcat)遇到的问题。连接池将使池中的多个连接保持打开状态,以准备下一个请求。如果连接引用了PL
/ SQL程序包并对其进行了重新编译,则对该程序包的下一次调用将引发ORA-06508错误。这将影响调用堆栈中任何地方的包,而不仅仅是您直接调用的包。
为了解决这个问题,某些应用服务器(例如Weblogic)具有定期调用的测试方法。如果测试失败,则将连接从池中删除或以某种方式刷新。我不确定Tomcat有什么机制。
解决该问题的另一种方法是将dbms_session.reset_package作为JDBC调用中的第一个方法调用。这样可以清除会话中的程序包状态。不建议使用这种方法,因为它会产生性能开销,并且会重设所有程序包作用域的变量,因此需要再次调用程序包初始化块,这是另一个性能问题。
如果遇到问题,并且没有办法删除不良连接,则需要重置整个连接池,因为池中的任何连接都会遭受相同的异常。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)