Cannot Upgrade Confluence on Oracle if the Database is Shared
プラットフォームについて: Data Center - この記事は、Data Center プラットフォームのアトラシアン製品に適用されます。
このナレッジベース記事は製品の Data Center バージョン用に作成されています。Data Center 固有ではない機能の Data Center ナレッジベースは、製品のサーバー バージョンでも動作する可能性はありますが、テストは行われていません。サーバー*製品のサポートは 2024 年 2 月 15 日に終了しました。サーバー製品を利用している場合は、アトラシアンのサーバー製品のサポート終了のお知らせページにて移行オプションをご確認ください。
*Fisheye および Crucible は除く
症状
Upgrading Confluence fails with one of the below exceptions -
2008-12-29 08:20:18,257 ERROR [Thread-1] [hibernate.tool.hbm2ddl.SchemaUpdate] execute Unsuccessful: alter table <example table name> add <example column name> number(19,0)
2008-12-29 08:20:18,257 ERROR [Thread-1] [hibernate.tool.hbm2ddl.SchemaUpdate] execute ORA-01430: column being added already exists in table
2008-12-29 08:20:18,257 ERROR [Thread-1] [hibernate.tool.hbm2ddl.SchemaUpdate] execute could not complete schema update
java.sql.SQLException: ORA-01430: column being added already exists in table
2008-12-29 08:20:18,257 ERROR [Thread-1] [hibernate.tool.hbm2ddl.SchemaUpdate] execute Unsuccessful: alter table <example table name> add <example column name> number(19,0)
2008-12-29 08:20:18,257 ERROR [Thread-1] [hibernate.tool.hbm2ddl.SchemaUpdate] execute ORA-01430: column being added already exists in table
2008-12-29 08:20:18,257 ERROR [Thread-1] [hibernate.tool.hbm2ddl.SchemaUpdate] execute could not complete schema update
java.sql.SQLException: ORA-01430: column being added already exists in table
原因
A table with the same name exists in both Confluence and another applications database schemas, Confluence only picks up the first table found.
The root cause is due to this Hibernate bug.
ソリューション
Ensure that Confluence schema only has permissions to objects in its own schema, like revoking 'select any table' and 'dba' permissions. Confluence must have the permissions described in Database Setup for Oracle, and no more. Ensure you follow the entirety of Step 3 in that document to fix the database permissions, including creating the local 'all_objects' view to ensure that the user cannot see objects from other databases.
There are several other approaches to fixing this issue, as documented in CONF-3613 - however fixing the permissions as above is the recommended way to resolve this issue.