SonarQube 8.9.0启动失败提示无法启动数据库,H2文件损坏求修复方案
SonarQube 8.9.x H2数据库损坏修复方案
首先明确前提:H2是SonarQube默认提供的嵌入式开发测试数据库,官方不推荐生产环境使用,本次修复完成后建议尽快迁移至外置生产级数据库。
前置操作
- 先停止所有SonarQube相关进程,避免二次写入加重文件损坏
- 完整备份当前
sonarqube/data目录下的所有文件,尤其是h2子目录,避免修复操作导致数据彻底丢失 - 确认使用的H2工具版本与SonarQube 8.9内置版本一致:SonarQube 8.9内置H2版本为1.4.199,和错误码后缀的-199完全对应,不要使用其他版本的H2工具操作数据库文件
方案1:H2自带修复工具修复(优先尝试)
操作步骤:
- 下载对应版本的
h2-1.4.199.jar包,存放到SonarQube的data/h2目录下 - 执行数据导出命令:
java -cp h2-1.4.199.jar org.h2.tools.Recover
- 执行完成后会生成
sonar.h2.sql文件,为当前可恢复的全量数据 - 重命名原有损坏的数据库文件:
mv sonar.h2.db sonar.h2.db.bak [ -f sonar.trace.db ] && mv sonar.trace.db sonar.trace.db.bak
- 用导出的SQL重建数据库:
java -cp h2-1.4.199.jar org.h2.tools.RunScript -url jdbc:h2:./sonar -script sonar.h2.sql -user sonar -password sonar
注意:SonarQube默认H2数据库的用户名、密码均为
sonar,如果你修改过对应配置请替换为实际值
- 启动SonarQube,验证服务运行状态、历史扫描数据和配置是否完整
方案2:备份回滚/重新初始化(方案1失败时尝试)
- 如果你有定时备份SonarQube的
data目录、配置文件,直接回滚到最近的可用备份即可 - 无备份且方案1修复失败时,只能删除损坏文件重新初始化,历史数据会丢失:
- 删除
sonarqube/data/h2目录下的所有文件 - 启动SonarQube,系统会自动初始化全新的H2数据库
- 重新配置规则、集成项目即可
- 删除
修复后优化建议
- 生产环境务必替换H2为外置生产级数据库,SonarQube 8.9支持PostgreSQL、MySQL、Oracle、SQL Server,迁移可通过平台自带的导入导出功能完成
- 配置定时任务备份SonarQube的数据库、配置文件、数据目录,避免故障时丢失数据
- 避免SonarQube运行过程中强制断电、强制杀进程,这类操作会大幅提升嵌入式数据库损坏概率
内容的提问来源于stack exchange,提问作者Anil Kumar Gupta
相关产品推荐
相关产品推荐

