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


java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:
Java堆空间
........
org.h2.jdbc.JdbcSQLException:读取记录时文件损坏:
“ [[17806]流数据密钥:1922位置:11剩余:: 0”。可能的解决方案:
使用恢复工具; SQL语句:
更新密钥集taken = false,taken = true [90030-155]
在org.h2.message.DbException.getJdbcSQLException(DbException.java:
327)
在org.h2.message.DbException.get(DbException.java:167)
在org.h2.message.DbException.get(DbException.java:144)
在org.h2.index.PageDataIndex.getPage(PageDataIndex.java:230)
在org.h2.index.PageDataNode.getNextPage(PageDataNode.java:226)
在org.h2.index.PageDataLeaf.getNextPage(PageDataLeaf.java:391)
在org.h2.index.PageDataCursor.nextRow(PageDataCursor.java:90)
在org.h2.index.PageDataCursor.next(PageDataCursor.java:49)
在org.h2.index.IndexCursor.next(IndexCursor.java:235)
在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%。原始DB大小为1.6 GB,而
恢复的数据库大小仅为81 MB。我使用恢复工具将所有数据从损坏的数据库导出到.sql文件,然后通过对H2数据库运行此脚本从数据库中重新创建数据库。还有其他我想念的东西吗?

最佳答案

这意味着您的数据库已损坏。至于它为什么被损坏的确切原因,这很难说。

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

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

关于java - 堆空间错误和H2数据库损坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7474563/

10-13 07:28