版本7的SonarQube更新数据库失败

版本7的SonarQube更新数据库失败,sonarqube,sonarqube-ops,Sonarqube,Sonarqube Ops,我们正在运行安装程序,将SonarQube更新为7.0版-出现数据库故障,请参阅下面的堆栈跟踪 你知道我们怎样才能渡过难关吗 2018.02.07 07:16:47 INFO web[][o.s.s.p.d.m.DatabaseMigrationImpl] Starting DB Migration and container restart 2018.02.07 07:16:47 INFO web[][DbMigrations] Executing DB migrations... 201

我们正在运行安装程序,将SonarQube更新为7.0版-出现数据库故障,请参阅下面的堆栈跟踪

你知道我们怎样才能渡过难关吗

2018.02.07 07:16:47 INFO  web[][o.s.s.p.d.m.DatabaseMigrationImpl] Starting DB Migration and container restart
2018.02.07 07:16:47 INFO  web[][DbMigrations] Executing DB migrations...
2018.02.07 07:16:47 INFO  web[][DbMigrations] #1907 'Populate table live_measures'...
2018.02.07 07:16:48 ERROR web[][DbMigrations] #1907 'Populate table live_measures': failure | time=788ms
2018.02.07 07:16:48 ERROR web[][DbMigrations] Executed DB migrations: failure | time=790ms
2018.02.07 07:16:48 ERROR web[][o.s.s.p.d.m.DatabaseMigrationImpl] DB migration failed | time=902ms
2018.02.07 07:16:48 ERROR web[][o.s.s.p.d.m.DatabaseMigrationImpl] DB migration ended with an exception
org.sonar.server.platform.db.migration.step.MigrationStepExecutionException: Execution of migration step #1907 'Populate table live_measures' failed
       at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:79)
       at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:67)
       at java.util.Iterator.forEachRemaining(Iterator.java:116)
       at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
       at java.util.stream.ReferencePipeline$Head.forEachOrdered(ReferencePipeline.java:590)
       at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:52)
       at org.sonar.server.platform.db.migration.engine.MigrationEngineImpl.execute(MigrationEngineImpl.java:50)
       at org.sonar.server.platform.db.migration.DatabaseMigrationImpl.doUpgradeDb(DatabaseMigrationImpl.java:105)
       at org.sonar.server.platform.db.migration.DatabaseMigrationImpl.doDatabaseMigration(DatabaseMigrationImpl.java:80)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
       at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: Error during processing of row: [uuid=eea5cd4b-3c1c-4001-bf83-85c1062a1b7c,project_uuid=3dabb938-1a4a-4c82-b0a7-0b20cc419be9,metric_id=10019,value=1,text_value=null,variation_value_1=0,measure_data=null]
       at org.sonar.server.platform.db.migration.step.SelectImpl.newExceptionWithRowDetails(SelectImpl.java:89)
       at org.sonar.server.platform.db.migration.step.SelectImpl.scroll(SelectImpl.java:81)
       at org.sonar.server.platform.db.migration.step.MassUpdate.execute(MassUpdate.java:91)
       at org.sonar.server.platform.db.migration.version.v70.PopulateLiveMeasures.execute(PopulateLiveMeasures.java:57)
       at org.sonar.server.platform.db.migration.step.DataChange.execute(DataChange.java:44)
       at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:75)
       ... 11 common frames omitted
Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (SONARQUBE_IDM.LIVE_MEASURES_COMPONENT) violated
       at oracle.jdbc.driver.OraclePreparedStatement.executeLargeBatch(OraclePreparedStatement.java:10032)
       at oracle.jdbc.driver.T4CPreparedStatement.executeLargeBatch(T4CPreparedStatement.java:1364)
       at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9839)
       at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:234)
       at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
       at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
       at org.sonar.server.platform.db.migration.step.UpsertImpl.addBatch(UpsertImpl.java:42)
       at org.sonar.server.platform.db.migration.step.MassUpdate.callSingleHandler(MassUpdate.java:118)
       at org.sonar.server.platform.db.migration.step.MassUpdate.lambda$execute$0(MassUpdate.java:91)
       at org.sonar.server.platform.db.migration.step.SelectImpl.scroll(SelectImpl.java:78)
       ... 15 common frames omitted
我们有同样的问题

执行迁移步骤1907“填充表live_measures” 失败;[…]错误:重复的键值违反了唯一约束 带电测量组件

我检查了数据库中导致此查询出现问题的条目。我们使用PostgreSQL,因此您必须检查查询语法是否对Oracle仍然有效:

SELECT p.uuid, pm.metric_id, COUNT(1) FROM project_measures pm INNER JOIN projects p on p.uuid = pm.component_uuid INNER JOIN snapshots s on s.uuid = pm.analysis_uuid WHERE s.islast = TRUE and pm.person_id is null GROUP BY p.uuid, pm.metric_id HAVING COUNT(1) > 1;
超过3.500!具有相同uuid和metric_id的条目,因此没有机会手动调整某些表条目

由于我们没有足够的时间来进一步分析这一点,并且我们想要克服这一点,因此我们决定删除并重新创建索引live_measures_组件,而不使用表live_measures上的唯一键

以下语句也适用于您:对于大型数据库,应考虑这些语句的持续时间

DROP INDEX "live_measures_component";
CREATE INDEX live_measures_component ON live_measures (component_uuid,metric_id);
这种变通方法使我们能够完成数据库迁移。我不知道这个解决方案是否有副作用,也许sonarqube的人可以告诉我们,但是在DB中有超过3.500个有问题的条目,这是我们目前唯一的可能性

希望这能有所帮助。

我们也遇到了同样的问题

执行迁移步骤1907“填充表live_measures” 失败;[…]错误:重复的键值违反了唯一约束 带电测量组件

我检查了数据库中导致此查询出现问题的条目。我们使用PostgreSQL,因此您必须检查查询语法是否对Oracle仍然有效:

SELECT p.uuid, pm.metric_id, COUNT(1) FROM project_measures pm INNER JOIN projects p on p.uuid = pm.component_uuid INNER JOIN snapshots s on s.uuid = pm.analysis_uuid WHERE s.islast = TRUE and pm.person_id is null GROUP BY p.uuid, pm.metric_id HAVING COUNT(1) > 1;
超过3.500!具有相同uuid和metric_id的条目,因此没有机会手动调整某些表条目

由于我们没有足够的时间来进一步分析这一点,并且我们想要克服这一点,因此我们决定删除并重新创建索引live_measures_组件,而不使用表live_measures上的唯一键

以下语句也适用于您:对于大型数据库,应考虑这些语句的持续时间

DROP INDEX "live_measures_component";
CREATE INDEX live_measures_component ON live_measures (component_uuid,metric_id);
这种变通方法使我们能够完成数据库迁移。我不知道这个解决方案是否有副作用,也许sonarqube的人可以告诉我们,但是在DB中有超过3.500个有问题的条目,这是我们目前唯一的可能性


希望这有帮助。

无法迁移预期的度量值。您是否有自定义插件?能否提供以下SQL请求的结果?选择p.uuid、p.project\u uuid、pm.metric\u id、pm.value、pm.text\u value、pm.variation\u value\u 1,project_中的pm.measure_数据在p.uuid=pm.component_uuid=pm.analysis_uuid上测量pm内部连接项目p,其中s.islast=1,pm.person_id为null,pm.component_uuid='eea5cd4b-3c1c-4001-bf83-85c1062a1b7c'和pm.metric_id=10019a无法迁移预期度量。您是否有自定义插件?能否提供以下SQL请求的结果?选择p.uuid、p.project\u uuid、pm.metric\u id、pm.value、pm.text\u value、pm.variation\u value\u 1,project_中的pm.measure_数据在p.uuid=pm.component_uuid=pm.analysis_uuid上测量pm内部连接项目p,其中s.islast=1,pm.person_id为null,pm.component_uuid='eea5cd4b-3c1c-4001-bf83-85c1062a1b7c'和pm.metric_id=10019谢谢-删除并重新创建索引修复了问题,并我们能够完成更新我也希望SonarQube的人能读到这篇文章并解释副作用。上述解决方案在MySQL中对我有效。我只有88个条目。谢谢你-删除并重新创建索引修复了问题,我们能够完成更新。我还希望SonarQube的人阅读此内容并解释其副作用。上述解决方案在MySQL中对我有效。我只有88个条目。