2011-09-19 1475 views
2

對於我們的多線程應用程序,我們在日誌中看到 以下錯誤立即堆空間錯誤以下:使用H2數據庫堆空間錯誤和H2數據庫損壞

java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space ........ org.h2.jdbc.JdbcSQLException: File corrupted while reading record: "[17806] stream data key:1922 pos:11 remaining:0". Possible solution: use the recovery tool; SQL statement: update keys set taken=false where taken=true [90030-155] at org.h2.message.DbException.getJdbcSQLException(DbException.java: 327) at org.h2.message.DbException.get(DbException.java:167) at org.h2.message.DbException.get(DbException.java:144) at org.h2.index.PageDataIndex.getPage(PageDataIndex.java:230) at org.h2.index.PageDataNode.getNextPage(PageDataNode.java:226) at org.h2.index.PageDataLeaf.getNextPage(PageDataLeaf.java:391) at org.h2.index.PageDataCursor.nextRow(PageDataCursor.java:90) at org.h2.index.PageDataCursor.next(PageDataCursor.java:49) at org.h2.index.IndexCursor.next(IndexCursor.java:235) at org.h2.table.TableFilter.next(TableFilter.java:352) at org.h2.command.dml.Update.update(Update.java:89) at org.h2.command.CommandContainer.update(CommandContainer.java:71) at org.h2.command.Command.executeUpdate(Command.java:212) at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java: 125) at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) ... 6 more

這是一個已知的問題與H2?

另外,當我試圖使用恢復工具從損壞的數據庫中恢復數據時,我只有 只能恢復10%。原始數據庫大小爲1.6 GB,而 恢復的數據庫大小僅爲81 MB。我使用恢復工具將損壞的數據庫中的所有數據導出到.sql文件,然後通過針對H2數據庫運行此腳本,從中重新創建數據庫。還有什麼我失蹤的?

回答

0

這意味着您的數據庫已損壞。至於爲什麼它被破壞了,這很難說。

恢復工具將盡其所能,但是當數據庫嚴重損壞時,並不總是能夠做到。

的恢復工具

文檔是在這裏: http://h2database.com/html/advanced.html#using_recover_tool

+0

什麼和在哪裏是完全恢復工具?謝謝 – linuxatico