簡體   English   中英

Java Derby DB錯誤“線程“ index-stat-thread”中的異常”和“無法獲取JDBC連接”錯誤

[英]Java Derby DB error 'Exception in thread “index-stat-thread”' and “Could not get JDBC Connection” error

我們有一個獨立的單用戶桌面應用程序,該應用程序具有Swing前端並使用嵌入式Derby數據庫(10.8.2.2 1181258)。 Spring(3.0.4)用作應用程序和數據庫之間的過渡。 使用JRE 1.7.0_21運行應用程序的客戶(在希伯來語/以色列語言環境iw_IL中)遇到了問題。 記錄了以下堆棧跟蹤:

ERROR [index-stat-thread] stderr - Exception in thread "index-stat-thread"    
ERROR [index-stat-thread] stderr - java.lang.ClassCastException: org.apache.derby.impl.store.access.btree.BranchControlRow cannot be cast to org.apache.derby.impl.store.access.btree.LeafControlRow    
ERROR [index-stat-thread] stderr -  at org.apache.derby.impl.store.access.btree.BTreeScan.positionAtNextPage(Unknown Source)  
ERROR [index-stat-thread] stderr -  at org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(Unknown Source)  
ERROR [index-stat-thread] stderr -  at org.apache.derby.impl.store.access.btree.BTreeScan.fetchNextGroup(Unknown Source)  
ERROR [index-stat-thread] stderr -  at org.apache.derby.impl.services.daemon.IndexStatisticsDaemonImpl$KeyComparator.fetchRows(Unknown Source)  
ERROR [index-stat-thread] stderr -  at org.apache.derby.impl.services.daemon.IndexStatisticsDaemonImpl.updateIndexStatsMinion(Unknown Source)  
ERROR [index-stat-thread] stderr -  at org.apache.derby.impl.services.daemon.IndexStatisticsDaemonImpl.generateStatistics(Unknown Source)  
ERROR [index-stat-thread] stderr -  at org.apache.derby.impl.services.daemon.IndexStatisticsDaemonImpl.processingLoop(Unknown Source)  
ERROR [index-stat-thread] stderr -  at org.apache.derby.impl.services.daemon.IndexStatisticsDaemonImpl.run(Unknown Source)  
ERROR [index-stat-thread] stderr -  at java.lang.Thread.run(Thread.java:722)  

知道什么可能導致這種錯誤嗎?

隨后,Spring記錄了以下內容:

org.springframework.jdbc.support.SQLErrorCodesFactory - Error while extracting database product name - falling back to empty error codes  
org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: No current connection.  
    at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:293)  
    at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:320)  
    at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:212)  
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:141)  
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:104)  
    at org.springframework.jdbc.support.JdbcAccessor.getExceptionTranslator(JdbcAccessor.java:99)  
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:602)  
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)  
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)  
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)  
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713)  
    at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:796)  
    at org.springframework.jdbc.core.simple.SimpleJdbcTemplate.queryForList(SimpleJdbcTemplate.java:235)  

假定該應用程序在與該應用程序相同的計算機和文件系統上使用嵌入式Derby數據庫,則JDBC連接錯誤令人困惑。 可能是第一個Derby錯誤導致的嗎?
接下來,這是Spring在為一個表加載條目時出現的另一個錯誤,該錯誤本質上似乎與Derby的第一個錯誤相同:

ERROR [main] org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [select * from XYZ where scresult_id=?]; SQL state [XJ001]; error code [0]; Java exception:   
'org.apache.derby.impl.store.access.btree.BranchControlRow cannot be cast to org.apache.derby.impl.store.access.btree.LeafControlRow: java.lang.ClassCastException'.;   nested exception is java.sql.SQLException: Java exception: 
'org.apache.derby.impl.store.access.btree.BranchControlRow cannot be cast to org.apache.derby.impl.store.access.btree.LeafControlRow: java.lang.ClassCastException'.

相同的應用程序已被其他客戶成功使用了幾個月。 這是客戶第一次遇到這些問題。

看來您的數據庫已損壞。 這些是您永遠都不會看到的內部消息。

以下是有關如何使用備份和日志來恢復數據庫的信息: http : //db.apache.org/derby/docs/10.10/adminguide/cadminhubbkup98797.html

在還原數據庫之前,應保留受損數據庫的副本,derby.log文件以及有關數據庫損壞情況的任何其他信息,因為它們可能會為您提供有關如何防止出現此問題的重要線索。未來。

通常,不可能像這樣破壞Derby數據庫。 因此,達到這種情況可能表明Derby本身存在錯誤。 但是可能還有其他可能的解釋,例如硬件損壞或配置錯誤。

我從您最初的問題假設,您不知道如何重現此問題? 在那種情況下,盡可能多地保留有關該事件以及損壞發生時發生的事件的信息(電源故障嗎?該計算機是否經過硬重啟?磁盤是否已滿?)是一種病毒-在計算機上運行的檢查程序嗎?可能有百萬個這樣的問題要問...)可能為您提供有關如何自己重現該問題的線索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM