H2 db'Chunk不再存在'错误

时间:2014-11-13 16:11:20

标签: java database h2 h2db

当我尝试向db" INSERT INTO invite_users VALUES(' id',user_name')""

添加新行时

我收到此错误:

General error: "java.lang.IllegalStateException: Chunk 2089 no longer exists [1.4.181/9]"

可能是db的一些问题,因为当我尝试将同一行添加到新的db时 - 错误消失了。

2014年11月20日更新

好消息!我联系了H2 db的开发人员并发现他们将在下一个版本中修复该bug。 https://groups.google.com/forum/#!topic/h2-database/i_GHXExjotc

2014年12月6日更新

一个简单的解决方法是通过附加"; mv_store = false"来禁用MVStore。到数据库URL。

但是,如果你需要旧的数据库,这个技巧将不起作用。它创建了新的数据库,扩展名为.h2.db而不是.mv.db

要克服这个,您需要创建旧数据库的SQL脚本" .mv.db" (使用“恢复”工具),然后使用" runscript ..."。

运行此脚本

1 个答案:

答案 0 :(得分:5)

在1.4.182版本中,检测何时不再引用块的机制可能存在问题。目前,这是reference counting垃圾收集:通过实时计数 页面和生活空间。如果达到零,则可以在45秒后覆盖一个块。

一个简单的解决方法是使用page store存储机制而不是mv_store,方法是更改​​数据库连接以使用mv_store=false作为缓解。

自版本1.4.177 Beta以来自动启用MV_STORE选项。

  

默认情况下,MV_STORE选项已启用,因此它正在使用new   MVStore存储。默认情况下,MVCC设置设置为相同的值   作为MV_STORE设置,默认情况下也会启用它。对于   测试,可以通过附加“; MV_STORE = FALSE”来禁用这两个设置   和/或“; MVCC = FALSE”到数据库URL。