【发布时间】:2011-11-20 10:24:39
【问题描述】:
对于我们使用 H2 数据库的多线程应用程序,我们看到 在发生堆空间错误后,我们的日志中立即出现以下错误:
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java 堆空间 ........... org.h2.jdbc.JdbcSQLException:读取记录时文件损坏: “[17806] 流数据键:1922 位置:11 剩余:0”。可能的解决方案: 使用恢复工具; SQL 语句: 更新密钥集 take=false wheretake=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%。原始数据库大小为 1.6 GB,而 恢复的数据库大小仅为 81 MB。我使用恢复工具将损坏数据库中的所有数据导出到 .sql 文件中,然后通过针对 H2 数据库运行此脚本来重新创建数据库。我还有什么遗漏的吗?
【问题讨论】: