对于使用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数据库运行此脚本来重新创建数据库。还有其他我不想要的东西吗?
答案 0 :(得分:0)
这意味着您的数据库已损坏。至于为什么它被腐蚀了,那就更难说了。
恢复工具将尽其所能,但是当数据库严重损坏时,它并不总是可以做到的。
恢复工具的文档在这里: http://h2database.com/html/advanced.html#using_recover_tool