H2数据库: 异常断电或直接关机:导致数据库文件.db损坏-处理方案

环境:

h2数据库版本:h2-1.4.200.jar(使用的是h2数据库服务器类型)

注:h2数据库支持两种类型1.嵌入式的内存数据库约等于redis 2.服务器模式约等于mysql oracle

损坏原因:

服务器直接关机,没有关闭h2服务

异常信息:

java.lang.IllegalStateException: File corrupted in chunk 1546880 not found [1.4.200/9] [50000-200] HY000/50000 

(看提示内容应该是数据库文件某个块损坏了)

修复方案:

1.针对一般损坏,官方提供的Recover恢复工具(将损坏的数据库文件导出成.sql文件,将sql信息重新导入到新的数据库文件中)

1.1 运行Recover命令-生成.sql文件

java -cp h2-1.4.200.jar org.h2.tools.Recover -dir /usr/local/h2 -db dbfile -trace -transactionLog

#/usr/local/h2 为数据库文件所在的当前目录
#dbfile 为数据文件名如 dbfile.mv.db
#transactionLog 为打印具体输出

1.2运行RunScript进行数据库sql导入

java -cp h2-1.4.200.jar org.h2.tools.RunScript -url jdbc:h2:/usr/local/h2/ngg -user aaa -password bbb -script dbfile.h2.sql -continueOnError

# jdbc:h2:/usr/local/h2/ngg 为新数据库具体路径 ngg为新数据库名称
# aaa 新数据库用户名
# bbb 新数据库密码
# 1.1运行完生成的dbfile.h2.sql文件
# continueOnError 如果出现报错可以继续往下执行,根据个人情况判断是否添加

结果:按照官方给出的命令确实生成了.sql文件并且成功导入了,但是新数据库中并没有数据库。

后来结合相关资料,用之前版本的h2-1.4.194.jar恢复成功,大小会比修复的数据库要大。

后经测试用h2-1.4.196.jar h2-1.4.197.jar也可以修复但是运行起来后数据库文件会忽大忽小。所以最终还是选用了h2-1.4.194.jar。

(上述方案只是针对一般情况的数据库损坏,如果跟标题一样的check元数据损坏目前只能通过修改h2-1.4.194.jar源码下的Recover方法对损坏的数据库块进行跳过,需要修改源码,并要承担数据库数据丢失的风险。后续源码正在整理)

jar文件:

194:https://download.youkuaiyun.com/download/qq_33416416/91315784

197:https://download.youkuaiyun.com/download/qq_33416416/91315785?spm=1001.2014.3001.5503

200:https://download.youkuaiyun.com/download/qq_33416416/91315791

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值