【问题标题】:H2 db 'Chunk no longer exists' errorH2 db'块不再存在'错误
【发布时间】:2015-01-10 20:39:05
【问题描述】:

当我尝试向 db "INSERT INTOowned_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 的开发人员,发现他们将在下一个版本中修复该错误。 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 ...”运行此脚本。

【问题讨论】:

标签: java database h2 h2db


【解决方案1】:

在版本 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。

【讨论】:

  • @PierAlexandreBouchard 没有人,这种解决方法对我不起作用。它会创建新数据库,但我需要旧数据库。
  • @PierAlexandreBouchard 有没有可能克服这个问题?
  • 您无法将旧数据库中的行复制到新数据库中?
  • @PierAlexandreBouchard 它适合我,怎么做?
  • 在此处阅读 SCRIPT 语句:h2database.com/html/grammar.html#script
猜你喜欢
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 2020-05-15
  • 2017-08-16
  • 2016-01-28
  • 1970-01-01
相关资源
最近更新 更多