2010-02-17 75 views
0

[從ServerFault交叉發佈]的Oracle 9i的會話斷開連接

我在開發環境中,我們的測試的Oracle 9i的服務器已被現在失常了幾天。會發生什麼是在幾次成功的連接之後,我們的JDBC連接斷開連接。

我們得到了我們的IT部門設置的這個盒子,並交給了。這是'我們的問題',所以像'問你DBA'這樣的選項不會幫助我。 :(

我們的服務器設置了3個普通數據庫(一個是主開發數據庫,​​另一個是'實驗'開發數據庫)我們使用Oracle 10 ojdbc14.jar精簡JDBC驅動程序(因爲有一些錯誤在驅動程序的版本9中)我們使用Hibernate與數據庫進行通信

我可以看到的唯一變化就是我們現在有更多的用戶連接到服務器,而不是一個開發人員,我們現在有3使用Hibernate的連接池,我在想,也許我們會打一些限制?

任何人有任何想法,這是怎麼回事?

以下是客戶端上的堆棧跟蹤:

Caused by: org.hibernate.exception.GenericJDBCException: could not execute query 
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) [hibernate3.jar:na] 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) [hibernate3.jar:na] 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.doList(Loader.java:2235) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.list(Loader.java:2124) [hibernate3.jar:na] 
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401) [hibernate3.jar:na] 
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363) [hibernate3.jar:na] 
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) [hibernate3.jar:na] 
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1149) [hibernate3.jar:na] 
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) [hibernate3.jar:na] 
... 
Caused by: java.sql.SQLException: Io exception: Connection reset 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:829) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1049) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:854) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1154) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3415) [ojdbc14.jar:Oracle JDBC Driver version - "10.2.0.4.0"] 
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.getResultSet(Loader.java:1812) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.doQuery(Loader.java:697) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) [hibernate3.jar:na] 
at org.hibernate.loader.Loader.doList(Loader.java:2232) [hibernate3.jar:na] 

回答

0

您對Java使用哪種JDK? ojdbc14適用於JDK 1.4及更早版本。這個版本的數據庫可能存在一個錯誤,但是如果您使用的是JDK 5或6,我建議您爲JDK找到一個JDBC驅動程序版本。 JAR名稱將以某種方式指示JDK 5或6。

來自Oracle論壇的Google搜索出現了this thread。看一下Oracle日誌,看看是否有類似於該線程中引用的消息。

+0

我同意。如果堆棧跟蹤中沒有ORA-或TNS-oracle消息,只是連接重置,則服務器進程可能無法在USER_DUMP_DEST中的數據庫服務器上留下跟蹤文件。您必須讓您的DBA在出現錯誤時找到跟蹤文件(假設它仍在此處),以幫助診斷問題。 – 2010-02-18 08:00:17

+0

我已經使用了最新最亮的驅動程序ojdbc6.jar,問題沒有改變......只是堆棧跟蹤有幾個不同的異常類型。 – malaverdiere 2010-02-18 09:02:56

+0

你能用簡單的代碼重現這種行爲嗎? – duffymo 2010-02-18 10:49:00

0

我和Oracle及其他數據庫有類似的問題。它發生在db服務器關閉連接時(例如超時)。您可以輕鬆處理連接池的情況(例如c3p0)。另見herehere

以防萬一,我c3p0.properties文件看起來像:

c3p0.preferredTestQuery=SELECT 1 from dual 
c3p0.maxConnectionAge=3600 
c3p0.testConnectionOnCheckout=true 
c3p0.acquireRetryDelay=1000 
c3p0.acquireRetryAttempts=30 
c3p0.breakAfterAcquireFailure=false