Hibernate - получение исключения: превышено максимальное количество процессов (550) - PullRequest
0 голосов
/ 22 марта 2012

Я использую hibernate 3 вместе с spring. Мои конфигурации 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. Я также попытался найти причину и понял, что режим освобождения может повлиять на механизм закрытия БДРесурсы.Но я не мог найти точное решение для этого.Пожалуйста, помогите .. Заранее спасибо ..

1 Ответ

0 голосов
/ 22 марта 2012

Это ошибка базы данных , а не ошибка приложения, поэтому вам нужно обратиться к базе данных, чтобы решить ее.550 процессов - это намного больше, чем кажется, поэтому либо кто-то сошел с ума, либо у вас запущено много неактивных процессов.

Лучший способ выяснить это - запросить v$sessionпросмотреть или Gv$session, если вы используете RAC, посмотрите на столбец STATUS.

Остерегайтесь не от того, откуда происходят все эти сеансы;OSUSER, TERMINAL и PROGRAM, вероятно, будут наиболее полезными.Возможно, стоило бы создать временную таблицу с этой информацией - доказательство и запись впоследствии.Затем, проверив, что вы ничего не сломаете, и с вашими администраторами баз данных, если они у вас есть, убейте все неактивные сеансы одновременно или по одному .

Это устранит ошибку, но если она возникла один раз, она может возникнуть снова, поэтому вам нужно ее устранить.Либо:

  • У вас есть много людей, использующих базу данных.
  • Где-то есть приложение / программа, которая не закрывает свои сессии после завершения.
  • Кто-то подключается в середине цикла.

По какой-то причине вам нужно отследить и исправить это.Я бы начал с программы или терминала с v$session, который имел наибольшее количество процессов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...