☰
SonarQube 8.9 → 9.9 升级过程:出现「SonarQube is under maintenance」维护页面完整解决方案
2026/10/13 2:49:57 网站建设 项目流程

#问题来源#

综合了所有的现实系统考虑后,最后决定使用9.98版本,来满足现在的需求,结果又卡壳了。。。。一波三折

背景:

将8.9版本的数据从PG10导出后,直接导入9.9对应的PG14A版本,,使用pg_dumall,导出的sql,导入后,启动服务一直停留在维护页面,停留了一夜

一、页面含义

这个页面代表 SonarQube 正在执行数据库迁移升级,属于版本跨代升级必经流程: 8.9(LTS)升级至 9.9(LTS)会自动触发数据库结构变更,服务会进入维护锁状态,禁止用户访问,迁移完成后页面自动恢复。

二、分场景排查处理

场景 1:刚启动升级,页面刚出现(正常等待阶段)

  1. 不要刷新、不要重启服务,等待后台执行数据库迁移;
  2. 查看 SonarQube 日志目录sonarqube/logs/sonar.log,观察日志关键词:
    • Executing migration step:正在执行表结构、索引、数据迁移
    • Migration completed:迁移完成,页面会自动退出维护模式
  3. 迁移耗时取决于数据库数据量:
    • 小项目(十万行代码内):5–30 分钟
    • 大量历史项目、千万级扫描记录:1–4 小时都正常

场景 2:长时间停留在维护页,日志报错(卡死 / 迁移失败)

1)前置校验:升级前置条件是否满足(8.9→9.9 硬性要求)
  1. 数据库版本
    • PostgreSQL ≥9.6(推荐 13+);MySQL/Oracle 部分旧版本不再支持 若使用 MySQL,9.9 已大幅限制兼容,推荐切换 PostgreSQL
  2. Java 运行环境SonarQube 9.9 必须使用 Java 17,不能沿用 8.9 的 Java11,否则迁移直接崩溃
  3. 磁盘空间数据库磁盘预留至少原库 30% 空闲空间,迁移会生成临时表 / 备份数据
  4. 插件兼容8.9 旧插件大多不兼容 9.9,升级前全部移除extensions/plugins目录下第三方插件,升级完成后再安装适配 9.9 的新版插件
2)常见报错与修复
报错 1:数据库权限不足

日志出现permission denied for table解决:给 SonarQube 数据库账号授予ALTER, CREATE, DROP, INDEX, REFERENCES全部权限。

报错 2:内存不足迁移中断

日志OutOfMemoryError修改sonarqube/conf/sonar.properties调整 JVM 参数:

# 迁移阶段调高内存 sonar.web.javaOpts=-Xmx4G -Xms2G sonar.ce.javaOpts=-Xmx4G -Xms2G sonar.search.javaOpts=-Xmx2G -Xms1G

修改后重启 SonarQube,会继续上次未完成的迁移。

报错 3:8.9 旧数据库结构脏数据 / 约束冲突
  1. 先停止 SonarQube 服务;
  2. 备份完整数据库;
  3. 进入数据库执行脏数据清理(根据日志报错表删除无效外键 / 重复索引);
  4. 重启服务重新触发迁移。

场景 3:管理员误操作,想跳过 / 重置维护锁(不推荐优先用)

只有确认数据库迁移完全失败且回滚备份后才能执行:

  1. 停止 SonarQube;
  2. 连接数据库,执行 SQL 清空维护标记:
UPDATE properties SET text_value='' WHERE kee='sonar.core.maintenance.lock';
  1. 重启服务,会重新发起完整迁移。

警告:迁移中途执行此操作会直接损坏数据库,仅回滚备份后使用!

三、标准 8.9→9.9 升级完整步骤(避免卡死维护页)

  1. 全量备份
    • SonarQube 安装目录完整备份
    • PostgreSQL/MySQL 数据库全量备份
  2. 停止旧 8.9 服务
  3. 替换为 9.9 安装包,保留conf/sonar.properties数据库配置
  4. 删除旧插件目录所有第三方插件
  5. 配置 Java17 环境变量,修改 JVM 内存参数
  6. 启动 9.9 服务,只查看日志,不访问页面
  7. 日志输出Migration completed successfully后,刷新页面登录
  8. 登录后安装适配 9.9 的新版代码语言插件

四、补充提示页面两段文字说明

  1. install SonarLint in your IDE维护等待期间可提前在本地 IDE 安装 SonarLint,本地实时扫描替代等待服务恢复。
  2. read the upgrade guide官方升级文档:专门说明跨 LTS 版本(8.9→9.9)数据库迁移、兼容性、回滚方案,出现异常优先查阅官方升级指南。

综合定位是数据库库的权限没有给足,很奇怪,原来的导出的脚本中有sonarqube用户的授权等信息,解决后问题还是没有解决,接着继续定位

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询