SonarQube发布质量门禁结果时出现dbo.ce_activity表重复键插入报错
SonarQube 8.8 SQL Server pk_ce_activity主键冲突修复方案
该报错为SonarQube 8.x版本对接SQL Server数据库的已知问题,根因是生成主键的数据库序列值异常回退,导致新生成的主键和ce_activity表中已存在的记录重复。
临时修复(快速恢复流水线)
- 先停止所有SonarQube服务节点,避免操作过程中有新数据写入
- 提前全量备份SonarQube对应的SQL Server数据库,防止操作失误导致数据丢失
- 执行SQL查询获取ce_activity表当前最大主键值:
SELECT MAX(CAST(uuid AS BIGINT)) AS max_id FROM dbo.ce_activity;
- 执行SQL查询获取当前主键序列的下一个生成值:
SELECT NEXT VALUE FOR dbo.ce_activity_uuid_seq AS current_seq_val;
- 确认current_seq_val小于max_id后,重置序列起始值为max_id+100(预留缓冲避免短时间内再次冲突):
-- 把<>中的值替换为实际计算出的数值 ALTER SEQUENCE dbo.ce_activity_uuid_seq RESTART WITH <max_id + 100>;
- 重启SonarQube服务,重新运行失败的Azure DevOps构建任务即可恢复
永久规避方案
- 优先升级SonarQube至9.9 LTS及以上版本,该版本已彻底修复SQL Server序列同步异常导致主键冲突的问题
- 若暂时无法升级,修改序列配置禁用缓存,避免SonarQube实例异常重启后序列值回退:
ALTER SEQUENCE dbo.ce_activity_uuid_seq NO CACHE;
- 每季度例行检查序列值与ce_activity表最大主键的差值,差值小于50时手动重置序列预留缓冲
内容的提问来源于stack exchange,提问作者tcochran
相关产品推荐
相关产品推荐

