You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

H2数据库TBL_TRANSACTION表损坏求助:查询及Recover工具报错

解决H2数据库TBL_TRANSACTION表损坏导致的BufferUnderflowException问题

嘿,我之前也踩过H2数据库表损坏的坑,尤其是碰到java.nio.BufferUnderflowException这种错误,给你分享几个亲测有效的解决步骤:

第一步:先做好备份!

不管用什么方法修复,一定要先把你的H2数据库文件(包括.h2.db、.trace.db这些)复制到安全的地方,万一操作失误,还能回滚到原始状态。

第二步:尝试自动修复表

先停止所有连接到这个H2数据库的应用,确保没有进程在读写数据库文件,然后执行以下修复命令:

java -cp h2-1.4.190.jar org.h2.tools.RunScript -url jdbc:h2:file:/path/to/your/database -user your_username -password your_password -script recovery.sql -options RECOVER

这个命令会自动扫描并修复损坏的表结构,生成一个recovery.sql脚本文件,你可以用这个脚本重新创建数据库并恢复数据。

第三步:针对单个表手动提取数据

如果自动修复失败,试试单独对TBL_TRANSACTION表执行Recover工具:

java -cp h2-1.4.190.jar org.h2.tools.Recover -db /path/to/your/database -table TBL_TRANSACTION

要是还是报错,那就用H2的低级修复模式启动控制台:

java -cp h2-1.4.190.jar org.h2.tools.Server -web -webAllowOthers -url jdbc:h2:file:/path/to/your/database;FIXED=true

连接上之后,先尝试只查询表的部分列(比如SELECT id, create_time FROM TBL_TRANSACTION),看看能不能提取出未损坏的数据,再把这些数据导出到新表或者CSV文件里。

第四步:升级H2版本避免复发

你用的1.4.190版本确实比较老了,后续版本修复了很多文件损坏相关的bug。如果数据恢复成功,建议尽快升级到最新的稳定版(注意2.x系列和1.x有兼容性差异,升级前要仔细核对版本兼容说明)。

最后提醒

如果以上方法都救不了,那可能是表的核心数据页已经严重损坏了。这时候可以查看.trace.db日志文件,定位具体损坏的页,尝试手动修复(但这个难度较高,适合有经验的开发者)。

内容的提问来源于stack exchange,提问作者Dom Cimafranca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:07:55