2014-11-13 33 views
11

当我尝试添加一个新行到数据库“INSERT INTO invited_users VALUES(‘身份证’,USER_NAME')”H2 DB“组块不再存在”错误

我得到这个错误:

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

也许这是数据库的一些问题,因为当我试图添加同一行到一个新的数据库 - 错误消失了。

更新二零一四年十一月二十零日

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

更新2014年12月6日

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

但是,如果你需要旧的分贝,这个技巧将无法工作。它会创建新的数据库,扩展名为.h2.db而不是.mv.db

要解决此问题您需要创建旧数据库“.mv.db”的SQL脚本(使用恢复工具),然后使用“runscript ...”运行这个脚本。

+0

可能有趣:https://www.mail-archive.com/[email protected]/msg16976.html和https://groups.google.com/forum/#!topic/h2 - 数据库/ i1YwSTG8CS8 –

+0

@JimGarrison是的,谢谢。我已阅读 – klvtsov

+0

给出[最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。 – philipxy

回答

5

在版本1.4.182中,可能检测到块不再被引用的机制有问题。目前,这是reference counting垃圾收集:通过点击直播 页面和直播空间。如果达到零,则可以在45秒后覆盖块。

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

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

By default, the MV_STORE option is enabled, so it is using the new MVStore storage. The MVCC setting is by default set to the same values as the MV_STORE setting, so it is also enabled by default. For testing, both settings can be disabled by appending ";MV_STORE=FALSE" and/or ";MVCC=FALSE" to the database URL.

+0

@PierAlexandreBouchard没有人,这个解决方法不适合我。它创建新的数据库,但我需要旧的数据库。 – klvtsov

+0

@PierAlexandreBouchard可以克服这个问题吗? – klvtsov

+0

您不可能复制从旧数据库到新数据库的行? –