問題
7.0から2023.Q3へのアップグレードを実行していますが、以下の警告が表示されます:
2024-02-02 08:28:57.379 INFO [main][UpgradeProcess:119] Upgrading com.liferay.portal.upgrade.v7_4_x.UpgradeListType
2024-02-02 08:28:57.492 WARN [main][UpgradeListType:55] Unable to add list type
com.liferay.portal.kernel.log.LogSanitizerException: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (LIFERAY_OWN.SYS_C008532) violated__https://docs.oracle.com/error-help/db/ora-00001/ [Sanitized] at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:702) ~[ojdbc8.jar:23.3.0.23.09] at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:608) ~[ojdbc8.jar:23.3.0.23.09] [...stack fragment ommited...]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[hikaricp.jar:?]
at com.liferay.portal.upgrade.v7_4_x.UpgradeListType._addListType(UpgradeListType.java:51) ~[portal-impl.jar:?] at com.liferay.portal.upgrade.v7_4_x.UpgradeListType.doUpgrade(UpgradeListType.java:26) ~[portal-impl.jar:?] at com.liferay.portal.kernel.upgrade.UpgradeProcess.lambda$upgrade$0(UpgradeProcess.java:122) ~[portal-kernel.jar:?] [...stack fragment ommited...] at com.liferay.portal.tools.db.upgrade.client.DBUpgraderLauncher.main(DBUpgraderLauncher.java:45) [com.liferay.portal.tools.db.upgrade.client.jar:?] 原因:com.liferay.portal.kernel.log.LogSanitizerException:エラー : 1, 位置 : 0, SQL = insert into ListType (listTypeId, name, type_) values (:1 , :2 , :3 ), オリジナル SQL = insert into ListType (listTypeId, name, type_) values (?, ?, ?), エラーメッセージ = ORA-00001: 一意制約(LIFERAY_OWN.SYS_CYSTEM)。), エラーメッセージ = ORA-00001: 一意制約 (LIFERAY_OWN.SYS_C008532) violated_ [サニタイズ] at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:710) ~[ojdbc8.jar:23.3.0.23.09] ...35 more
ListTypeテーブルにレコードを追加できないようです。テーブルの主キー(ListTypeIdカラム)に重複値エラーが発生します。
環境
- DXP 7.0からDXP 7.4、2023.Q3、2023.Q4以降へのアップグレード
解像度
カウンタテーブルの「com.liferay.portal.kernel.model.ListType」カウンタの値が既存のListType IDよりも小さいため、アップグレードでListTypeテーブルにエントリを追加できません。
この不一致は、テーブル内に既に存在するListTypeId値を使用してレコードを作成しようとするため、一意制約違反(ORA-00001)を引き起こします。
この問題を解決するには、アップグレードプロセスを実行する前に、DXP 7.0で以下の手順を実行する必要があります:
- サーバーを停止する。
- 以下のSQLを実行して、カウンタ値を修正します:
UPDATE COUNTER SET CURRENTID = ((SELECT MAX(LISTTYPEID) FROM LISTTYPE) + 1) WHERE NAME = 'com.liferay.portal.kernel.model.ListType'. - DXP 7.0サーバーを起動します。
- このGroovyスクリプトを実行して、カウンタ値をチェックする:
println com.liferay.counter.kernel.service.CounterLocalServiceUtil.getCounter("com.liferay.portal.kernel.model.ListType"). - 新しいカウンタ値が
SELECT max(LISTTYPEID) FROM LISTTYPEより大きいことを確認する。
これは、カウンタが既存のエントリよりも高いIDを生成し、衝突を防ぐことを保証する。
これらの手順が完了したら、2023.Q3 バージョンへのアップグレードを実行してください。