日期:2014-05-16 浏览次数:20425 次
为了方便,使用 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这样成熟的东西才行。
?