H2 数据库的 IOExceptions

IOExceptions with H2 database

最近,我从使用 H2 数据库的 Play 应用程序中收到 IOExceptions。像这样:

Caused by: java.io.IOException: Block not found in id [1, -68, 2, 2] [1.4.187/50]
  at org.h2.mvstore.StreamStore$Stream.read(StreamStore.java:466) ~[com.h2database.h2-1.4.187.jar:1.4.187]
  at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) ~[na:1.8.0_40]
  at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) ~[na:1.8.0_40]
  at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) ~[na:1.8.0_40]
  at java.io.InputStreamReader.read(InputStreamReader.java:184) ~[na:1.8.0_40]
  at java.io.BufferedReader.fill(BufferedReader.java:161) ~[na:1.8.0_40]
  at java.io.BufferedReader.read1(BufferedReader.java:212) ~[na:1.8.0_40]
  at java.io.BufferedReader.read(BufferedReader.java:286) ~[na:1.8.0_40]
  at org.hibernate.type.descriptor.java.DataHelper.extractString(DataHelper.java:88) ~[org.hibernate.hibernate-core-4.3.11.Final.jar:4.3.11.Final]

这可能是他们在 https://groups.google.com/forum/#!topic/h2-database/myX5RH6cV-8 or https://groups.google.com/forum/#!topic/h2-database/Gv5Nu2subzM 中讨论的问题。这里有人写道“1.4.186、1.4.187 和 1.4.188 是易受攻击的版本。”。在我的 Play 版本 (2.4.3) 中,使用的是 H2 版本 1.4.187。

它似乎偶尔发生,到目前为止我找不到任何原因。

我想知道为什么在 Internet 上找不到更多关于此问题的信息。一个不稳定的数据库似乎相当重要。我只是将版本设置为最新的1.4.191,并将密切关注它。有没有人对H2和Play有过类似的体验?

回答原问题。是的,我最近在使用 build .187 时有过这种经历。

我有以下异常:

org.h2.jdbc.JdbcSQLException:IO 异常:"java.io.IOException: Block not found in id [1, -109, 3, 1] [1.4.187/50]"; "lob: null table: -3 id: 7"[90031-187]

...与您的堆栈跟踪相似。

一旦我开始构建 .192,问题就完全消失了。根据更改日志,该问题在版本 1.4.189 Beta (2015-09-13) 中被列为已修复:

http://www.h2database.com/html/changelog.html

所以,我们向上移动到 .192 并闭上我们的手指,这样的事情不会再次发生!!!