11

当我尝试向 db "INSERT INTOmitted_users VALUES('id', user_name')" 添加新行时

我收到此错误:

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

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

2014 年 11 月 20 日更新

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

2014 年 12 月 6 日更新

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

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

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

4

1 回答 1

5

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

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

MV_STORE 选项从1.4.177 Beta版本开始自动启用。

默认情况下,启用 MV_STORE 选项,因此它使用新的 MVStore 存储。MVCC 设置默认设置为与 MV_STORE 设置相同的值,因此它也默认启用。为了进行测试,可以通过将“;MV_STORE=FALSE”和/或“;MVCC=FALSE”附加到数据库 URL 来禁用这两个设置。

于 2014-11-21T23:03:57.150 回答