日期:2014-05-16  浏览次数:20389 次

h2 database 的修复

为了方便,使用 h2 做为嵌入式数据库,没想到随着数据量增加,居然开始崩溃了。

几张表加起来才一百万多条记录,访问量也不大,不知道什么情况造成了某张表不可

查询,一查询就报 ArrayIndexOutOfBoundsException ,在h2的网站和issue

里面都查了一下,不知道是什么情况。

?

幸亏这个不是生产系统,不过生产系统也不可能用h2。里面的数据丢失一些也无所谓,

因此,只好把数据导出,然后再想办法导入。h2提供了一些工具,导出比较简单,bat文件:

?

java -Xms256m -Xmx1024m -XX:MaxPermSize=32m -cp "lib/h2-1.3.163.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Recover %*

?

运行 recover.bat -dir data\db -db dbname 就会生成一个 dbname.h2.sql 这样一个文件。

然后把老的数据库文件移到别的地方,再打开h2的console,在console里面运行?

?

runscript from 'dbname.h2.sql'

?

就OK了,至于丢了哪些数据,现在还不知道,不过不是重要的数据,也不去追究了。

但是这样给我一个很沉重的打击,本来我还是很喜欢h2的,没想到有这么致命的问题,

而且这已经是第二次了,看来以后这种嵌入的数据库,要开始考虑sqlite这样成熟的东西才行。

?