Sonar is excited to announce the release of the SonarQube Server 2025 Release 6.
This version introduces Slack notifications, Jira Cloud integration, analysis of Shell files, support for Swift 6.1 and Python 3.14, new rules for Go, Ruby and Apex. Enjoy these and many other exciting features in this release.
As a reminder, running SonarQube Server with Java 17 is deprecated and in the next version using Java 21 or above will be required. Using Java 17 for SonarQube scanners on the machine running the analysis is now also deprecated, the auto-provisioned JRE has changed to Java 21, please find more information here.
we got an error after upgrading to 2025.6 during the database upgrade process. To resolve the issue, we have to manually downgrade the jdbc driver from 13.2.1 to 13.2.0. We use an Azure SQL database as source and run the official docker image.
We download the old driver, renamed it with the new version filename and load the file with docker compose
After the manual downgrade, the database update works without any problems and the server runs without any problems.
Log Files:
sonarqube | 2025.12.15 07:29:19 ERROR web[][DbMigrations] 1/10 #202506016 'Add index based on 'resource_id' and 'resource_type' to 'jira_work_items_resources' table': failure | time=56ms
sonarqube | 2025.12.15 07:29:19 ERROR web[][DbMigrations] Executed 0/10 DB migrations: failure | time=58ms
sonarqube | 2025.12.15 07:29:19 ERROR web[][o.s.s.p.d.m.DatabaseMigrationImpl] DB migration failed | time=101ms
sonarqube | 2025.12.15 07:29:19 ERROR web[][o.s.s.p.d.m.DatabaseMigrationImpl] DB migration ended with an exception
sonarqube | org.sonar.server.platform.db.migration.step.MigrationStepExecutionException: Execution of migration step #202506016 'Add index based on 'resource_id' and 'resource_type' to 'jira_work_items_resources' table' failed
sonarqube | org.sonar.server.platform.db.migration.step.MigrationStepExecutionException: Execution of migration step #202506016 'Add index based on 'resource_id' and 'resource_type' to 'jira_work_items_resources' table' failed
sonarqube | at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:105)
sonarqube | at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:89)
sonarqube | at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:66)
sonarqube | at org.sonar.server.platform.db.migration.engine.MigrationEngineImpl.execute(MigrationEngineImpl.java:55)
sonarqube | at org.sonar.server.platform.db.migration.DatabaseMigrationImpl.doUpgradeDb(DatabaseMigrationImpl.java:106)
sonarqube | at org.sonar.server.platform.db.migration.DatabaseMigrationImpl.doDatabaseMigration(DatabaseMigrationImpl.java:81)
sonarqube | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
sonarqube | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
sonarqube | at java.base/java.lang.Thread.run(Unknown Source)
sonarqube | Caused by: java.lang.IllegalStateException: Can not check that table jira_work_items_resources exists
sonarqube | at org.sonar.db.DatabaseUtils.wrapSqlException(DatabaseUtils.java:471)
sonarqube | at org.sonar.db.DatabaseUtils.getIndex(DatabaseUtils.java:374)
sonarqube | at org.sonar.db.DatabaseUtils.findIndex(DatabaseUtils.java:361)
sonarqube | at org.sonar.db.DatabaseUtils.findIndex(DatabaseUtils.java:347)
sonarqube | at org.sonar.db.DatabaseUtils.doIndexExistsIgnoreIndexCase(DatabaseUtils.java:326)
sonarqube | at org.sonar.db.DatabaseUtils.indexExistsIgnoreCase(DatabaseUtils.java:320)
sonarqube | at org.sonar.server.platform.db.migration.step.CreateNonUniqueIndexOnColumns.execute(CreateNonUniqueIndexOnColumns.java:44)
sonarqube | at org.sonar.server.platform.db.migration.step.DdlChange.execute(DdlChange.java:45)
sonarqube | at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:101)
sonarqube | ... 8 common frames omitted
sonarqube | Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot resolve collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "SQL_Latin1_General_CP1_CS_AS" in UNION ALL operator occurring in ORDER BY statement column 3.
sonarqube | at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:278)
sonarqube | at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1788)
sonarqube | at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:688)
sonarqube | at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:607)
sonarqube | at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7825)
sonarqube | at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:4828)
sonarqube | at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:321)
sonarqube | at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:253)
sonarqube | at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:521)
sonarqube | at com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData.getIndexInfo(SQLServerDatabaseMetaData.java:1292)
sonarqube | at com.zaxxer.hikari.pool.ProxyDatabaseMetaData.getIndexInfo(ProxyDatabaseMetaData.java:229)
sonarqube | at com.zaxxer.hikari.pool.HikariProxyDatabaseMetaData.getIndexInfo(HikariProxyDatabaseMetaData.java)
sonarqube | at org.sonar.db.DatabaseUtils.getIndex(DatabaseUtils.java:365)
sonarqube | ... 15 common frames omitted
We utilize an Oracle DB and had the database upgrade from 2025.5 to 2025.6 fail on us because of invalid Oracle SQL Syntax. SonarQube logs repeated the following error on each retry:
WARN web[][c.z.h.p.ProxyConnection] HikariPool-1 - Connection oracle.jdbc.driver.T4CConnection@6920126b marked as broken because of SQLSTATE(0A000), ErrorCode(3048)
java.sql.SQLException: ORA-03048: SQL reserved word ';' is not syntactically valid following '...from issue_stats_by_rule_key'
https://docs.oracle.com/error-help/db/ora-03048/
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:715)
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:615)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1372)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:972)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:237)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:524)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:298)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1510)
at oracle.jdbc.driver.OracleStatement.executeSQLStatement(OracleStatement.java:2020)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1633)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3973)
at oracle.jdbc.driver.OraclePreparedStatement.doExecute(OraclePreparedStatement.java:4447)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:4433)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1032)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java)
at org.sonar.server.platform.db.migration.step.UpsertImpl.execute(UpsertImpl.java:66)
at org.sonar.server.platform.db.migration.version.v202506.PopulateIssueStatsByRuleKey.execute(PopulateIssueStatsByRuleKey.java:78)
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:101)
at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:89)
at org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl.execute(MigrationStepsExecutorImpl.java:66)
at org.sonar.server.platform.db.migration.engine.MigrationEngineImpl.execute(MigrationEngineImpl.java:55)
at org.sonar.server.platform.db.migration.DatabaseMigrationImpl.doUpgradeDb(DatabaseMigrationImpl.java:106)
at org.sonar.server.platform.db.migration.DatabaseMigrationImpl.doDatabaseMigration(DatabaseMigrationImpl.java:81)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: oracle.jdbc.OracleDatabaseException: ORA-03048: SQL reserved word ';' is not syntactically valid following '...from issue_stats_by_rule_key'
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:723)
... 27 common frames omitted
2025.12.15 16:19:09 DEBUG web[][c.z.h.pool.PoolBase] HikariPool-1 - Closing connection oracle.jdbc.driver.T4CConnection@6fa54748: (connection is broken)
This left the database partially upgraded. It occured while using the latest Oracle JDBC 17 driver as downloaded from JDBC and UCP Downloads page
Your documented pre-migration scripts for Oracle also include invalid syntax by adding a semi-colon to the end of line one of a two-line SQL Query (reproduced below), so this seems to be a trend.
SELECT 'ALTER TABLE ' || OBJECT_NAME || ' MOVE';
FROM DBA_OBJECTS WHERE OBJECT_TYPE = 'TABLE' AND OWNER = 'SONARQUBE';
we also use Docker and implement the workaround via the Docker Compose file. We load the old driver there with the name of the new one and overwrite it. See also the excerpt from my compose file above.