2011-09-19 106 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