-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Low
-
None
-
Affects Version/s: 12.1.2
-
Component/s: Database (Oracle)
-
None
-
1
-
Severity 3 - Minor
-
1
Issue Summary
Starting up a fresh Bamboo instance connected to Oracle 19c initially works using a database username with double quotes (e.g., "bambo-user"), but on subsequent restarts, the application fails to start and throws:
Caused by: java.sql.SQLSyntaxErrorException: ORA-00955: name is already used by an existing object
Using a hyphen ( - ) in an Oracle 19c username requires the username to be enclosed in double quotes (e.g., "bamboo-user") because the hyphen is not a standard identifier character. Without quotes, it will interpret it as a subtraction operator, causing errors.
Steps to Reproduce
- Create a Oracle database to connect with Bamboo.
- For the username, use double quotes to enclose special characters. For example, "bamboo-user".
- Install Bamboo and connect to the Oracle database by setting the database username as "bamboo-user".
- Restart Bamboo. The startup will fail, and the errors will be present in the atlassian-bamboo.log file.
- Bamboo tries to re-create the database schema since it can't see it, but Oracle throws ORA-02275 and ORA-00955 because those tables and constraints already exist.
Expected Results
Either Bamboo should be able to work with double quotes in the database username and correctly query the database to see its own tables and schema, or we should restrict the interface to prevent users from using double quotes for usernames.
Actual Results
ORA-00955 is thrown in the atlassian-bamboo.log file:
2026-02-27 10:48:58,173 INFO [main] [BambooHibernateUtils] Query log session 1 | end Updating schema 2026-02-27 10:48:58,173 WARN [main] [BambooSchemaHelper] org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table ACCESS_TOKEN (ACCESS_TOKEN_ID number(19,0) not null, CREATED_DATE timestamp not null, DAYS_UNTIL_EXPIRY number(10,0), HASHED_TOKEN varchar2(255 char) not null, NAME varchar2(255 char) not null, PERMISSIONS_MASK number(10,0) default 0 not null, TOKEN_ID varchar2(255 char) not null, USER_NAME varchar2(255 char) not null, primary key (ACCESS_TOKEN_ID))" via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:581) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:526) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:293) at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:74) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:220) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:123) at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:94) at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:63) at com.atlassian.bamboo.hibernate.BambooSchemaHelper.lambda$updateSchemaIfNeeded$0(BambooSchemaHelper.java:44) at com.atlassian.bamboo.util.BambooHibernateUtils.lambda$withSqlLogged$0(BambooHibernateUtils.java:82) at com.atlassian.bamboo.util.BambooHibernateUtils.withSqlLogged(BambooHibernateUtils.java:69) at com.atlassian.bamboo.util.BambooHibernateUtils.withSqlLogged(BambooHibernateUtils.java:81) at com.atlassian.bamboo.hibernate.BambooSchemaHelper.updateSchemaIfNeeded(BambooSchemaHelper.java:44) at com.atlassian.bamboo.upgrade.UpgradeLauncher.lambda$upgradeAndStartBamboo$0(UpgradeLauncher.java:133) at com.atlassian.bamboo.beehive.ServiceWideExclusiveLock.withExclusiveClusterLock(ServiceWideExclusiveLock.java:31) at com.atlassian.bamboo.upgrade.UpgradeLauncher.upgradeAndStartBamboo(UpgradeLauncher.java:133) at com.atlassian.bamboo.upgrade.UpgradeLauncher.contextInitialized(UpgradeLauncher.java:56) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4032) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4462) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1201) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1191) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:770) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1201) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1191) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:201) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:410) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:868) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.startup.Catalina.start(Catalina.java:758) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473) Caused by: java.sql.SQLSyntaxErrorException: ORA-00955: name is already used by an existing object at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:526) at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:462) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1104) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:553) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:269) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:655) at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:229) at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:41) at oracle.jdbc.driver.T4CStatement.executeForRows(T4CStatement.java:928) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1213) at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1831) at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1786) at oracle.jdbc.driver.OracleStatementWrapper.execute(OracleStatementWrapper.java:303) at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 45 more Caused by: oracle.jdbc.OracleDatabaseException: ORA-00955: name is already used by an existing object at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:530) ... 60 more
Also ORA-02275
2026-02-27 10:48:58,210 WARN [main] [BambooSchemaHelper] org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "alter table ACL_ENTRY add constraint FK_4rfb2hf1mgefbvivqlb3uhc1o foreign key (ACL_OBJECT_IDENTITY) references ACL_OBJECT_IDENTITY on delete cascade" via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:581) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:526) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyForeignKeys(AbstractSchemaMigrator.java:452) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:263) at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:123) at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:94) at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:63) at com.atlassian.bamboo.hibernate.BambooSchemaHelper.lambda$updateSchemaIfNeeded$0(BambooSchemaHelper.java:44) at com.atlassian.bamboo.util.BambooHibernateUtils.lambda$withSqlLogged$0(BambooHibernateUtils.java:82) at com.atlassian.bamboo.util.BambooHibernateUtils.withSqlLogged(BambooHibernateUtils.java:69) at com.atlassian.bamboo.util.BambooHibernateUtils.withSqlLogged(BambooHibernateUtils.java:81) at com.atlassian.bamboo.hibernate.BambooSchemaHelper.updateSchemaIfNeeded(BambooSchemaHelper.java:44) at com.atlassian.bamboo.upgrade.UpgradeLauncher.lambda$upgradeAndStartBamboo$0(UpgradeLauncher.java:133) at com.atlassian.bamboo.beehive.ServiceWideExclusiveLock.withExclusiveClusterLock(ServiceWideExclusiveLock.java:31) at com.atlassian.bamboo.upgrade.UpgradeLauncher.upgradeAndStartBamboo(UpgradeLauncher.java:133) at com.atlassian.bamboo.upgrade.UpgradeLauncher.contextInitialized(UpgradeLauncher.java:56) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4032) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4462) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1201) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1191) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:770) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1201) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1191) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:747) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:201) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:410) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:868) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) at org.apache.catalina.startup.Catalina.start(Catalina.java:758) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473) Caused by: java.sql.SQLSyntaxErrorException: ORA-02275: such a referential constraint already exists in the table
Workaround
Don't use a database username with quotations. For Oracle, use underscore _ instead of hyphen -, or an even simpler name such as bamboodbuser.