堆空间错误和H2数据库损坏

时间:2011-09-19 16:59:01

标签: java h2

对于使用H2数据库的多线程应用程序,我们看到了 在堆空间错误后立即跟踪我们的日志中的错误:

  

java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:   Java堆空间   ........   org.h2.jdbc.JdbcSQLException:读取记录时文件已损坏:   “[17806]流数据密钥:1922 pos:11剩余:0”。可能的方法:   使用恢复工具; SQL语句:   update keys set taken = false where where = true [90030-155]   在org.h2.message.DbException.getJdbcSQLException(DbException.java:   327)           at org.h2.message.DbException.get(DbException.java:167)           在org.h2.message.DbException.get(DbException.java:144)           at org.h2.index.PageDataIndex.getPage(PageDataIndex.java:230)           在org.h2.index.PageDataNode.getNextPage(PageDataNode.java:226)           at org.h2.index.PageDataLeaf.getNextPage(PageDataLeaf.java:391)           在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)           在org.h2.command.dml.Update.update(Update.java:89)           在org.h2.command.CommandContainer.update(CommandContainer.java:71)           在org.h2.command.Command.executeUpdate(Command.java:212)           在org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:   125)           在org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110)           ......还有6个

这是H2的已知问题吗?

当我尝试使用腐败数据库中的恢复工具恢复数据时,我也是 只能恢复10%。原始数据库大小为1.6 GB 恢复的数据库大小只有81 MB。我使用恢复工具将损坏的数据库中的所有数据导出到.sql文件,然后通过对H2数据库运行此脚本来重新创建数据库。还有其他我不想要的东西吗?

1 个答案:

答案 0 :(得分:0)

这意味着您的数据库已损坏。至于为什么它被腐蚀了,那就更难说了。

恢复工具将尽其所能,但是当数据库严重损坏时,它并不总是可以做到的。

恢复工具的文档在这里: http://h2database.com/html/advanced.html#using_recover_tool