Java H2 db';区块不再存在';错误
当我尝试向db添加新行时,“插入受邀请的用户值('id',user\u name')” 我得到了这个错误:Java H2 db';区块不再存在';错误,java,database,h2,h2db,Java,Database,H2,H2db,当我尝试向db添加新行时,“插入受邀请的用户值('id',user\u name')” 我得到了这个错误: General error: "java.lang.IllegalStateException: Chunk 2089 no longer exists [1.4.181/9]" 可能是db的一些问题,因为当我尝试将同一行添加到新的db时,错误消失了 2014年11月20日更新 好消息!我联系了H2DB的开发人员,发现他们将在下一个版本中修复这个bug。 2014年12月6日更新 一个
General error: "java.lang.IllegalStateException: Chunk 2089 no longer exists [1.4.181/9]"
可能是db的一些问题,因为当我尝试将同一行添加到新的db时,错误消失了
2014年11月20日更新
好消息!我联系了H2DB的开发人员,发现他们将在下一个版本中修复这个bug。
2014年12月6日更新
一个简单的解决方法是通过在数据库URL中附加“mv_store=false”来禁用MVStore
但是如果您需要旧的db,这个技巧将不起作用。它创建新的数据库,扩展名为.h2.db,而不是.mv.db
要克服此问题,您需要为旧数据库“.mv.db”(使用恢复工具)创建SQL脚本,然后使用“runscript…”运行此脚本。在版本1.4.182中,检测块何时不再被引用的机制可能有问题。目前,这是
引用计数
垃圾收集:通过计算活动
页面和活动空间。如果该值为零,则块可以在45秒后被覆盖
一个简单的解决方法是使用page store
存储机制,而不是mv_store
,方法是将数据库连接更改为使用mv_store=false
作为缓解措施
MV_存储选项自版本起自动启用
默认情况下,MV_存储选项处于启用状态,因此它使用新的
MVStore存储。默认情况下,MVCC设置设置为相同的值
作为MV_存储设置,因此默认情况下也会启用。对于
在测试中,可以通过附加“MV_STORE=FALSE”来禁用这两个设置
和/或“MVCC=FALSE”添加到数据库URL
可能很有趣:还有@JimGarrison是的,谢谢。我已经读过了,就这些。这是一个完整的示例,我只是尝试将行添加到H2 db“INSERT INTO invested_users VALUES('id','user_name')”。我觉得通过web界面这样做听起来像是数据库问题,而不是应用程序问题。你使用的是哪个版本的h2db?@PierAlexandreBouchard不,这个解决方案对我不起作用。它会创建新数据库,但我需要旧数据库。@PierAlexandreBouchard有可能克服这个问题吗?您不可能将旧数据库中的行复制到新数据库中?@PierAlexandreBouchard它适合我,如何做到这一点?请阅读此处的脚本语句: