我正在使用hibernate 3和spring.My Hibernate配置如下:
hibernate.dialect=org.hibernate.dialect.Oracle8iDialect
hibernate.connection.release_mode=on_close
但是在启动应用程序之后,即使只有一个用户访问它,我也会收到此异常:
ORA-00020: maximum number of processes (550) exceeded
这是堆栈跟踪:
Caused by: java.sql.SQLException: ORA-00020: maximum number of processes (550) exceeded
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:799)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1038)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:839)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1133)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1953)
at org.hibernate.loader.Loader.doQuery(Loader.java:802)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.loadEntity(Loader.java:2037)
我保持连接池超时= 5000.我也试图找到原因并获得该释放模式可能会影响关闭数据库资源的机制。但我无法找到确切的解决方案。 请帮忙.. 提前谢谢..
答案 0 :(得分:0)
这是数据库错误,而不是应用程序错误,因此您需要转到数据库来解决它。 550个过程比听起来要多得多,所以要么有人疯了,要么你有很多不活跃的进程在运行。
查找最佳方法是查询v$session
视图或Gv$session
如果您使用的是RAC,请查看STATUS
列。
不要注意所有这些会议的来源; OSUSER
,TERMINAL
和PROGRAM
可能是最有用的。可能几乎值得创建一个包含此信息的临时表 - 证明和事后记录。然后在检查您不会破坏任何内容之后,如果您有任何内容,请与您的DBA一起,杀死所有非活动会话simultaneously或one at a time。
那将删除错误,但如果它再次发生就会发生,所以你需要解决它。之一:
无论你是什么原因,你需要追踪它并纠正它。我将从具有最多进程数的v$session
的程序或终端开始。