問題
- Liferay Portal 6.2 から Liferay DXP 7.1 へのアップグレードの一環として Knowledge Base プラグインをアップグレードしようとすると、以下のようなエラーが表示される場合があります:
upgrade:execute com.liferay.knowledge.base.service
INFO - Upgrading com.liferay.knowledge.base.internal.upgrade.v2_0_2.UpgradeKBArticle
INFO - Failed upgrade process com.liferay.knowledge.base.internal.upgrade.v2_0_2.UpgradeKBArticle in 6 ms
. . .
ERROR [main][com_liferay_portal_upgrade_impl:97] Invocation to listener threw exception
com.liferay.portal.kernel.upgrade.UpgradeException: java.sql.SQLException: ORA-01408: such column list already indexed_ [Sanitized]
環境
- Liferay Portal 6.2 EE、Knowledge Baseプラグインを導入。
- Liferay DXP 7.1
解決策
- Knowledge Baseプラグインでは、 _renameConflictingKBArticleFriendlyURLs() と _renameConflictingKBFolderFriendlyURLs() が、それぞれKBArticlesとKBFoldersのユニークなURLタイトル値を見つけるために、アップグレード処理によって一時インデックスを作成する。
- その処理が終了すると、このステートメントによってインデックスが削除されます:
protected void doUpgrade() throws Exception {
runSQL(
"create index IX_TEMP on KBArticle (groupId, kbFolderId, " +
"urlTitle[$COLUMN_LENGTH:75$])");
try {
boolean changed = true;
while (changed) {
changed = _renameConflictingKBArticleFriendlyURLs();
}
changed = true;
while (changed) {
changed = _renameConflictingKBFolderFriendlyURLs();
}
}
finally {
runSQL("drop index IX_TEMP on KBArticle");
}
}
- このインデックスはアップグレードプロセスの一部であり、Portal 6.2でもDXP 7.1でもLiferayは使用しないので、最善の方法は、このインデックスを単に削除することです。
- 変更する前に、必ずデータベースのバックアップをとってください。
- 次に、 KbArticle テーブルに対して、インデックス "IX_TEMP" が存在することを確認します。
- もしそうなら、Liferayが停止し、誰もインデックスにアクセスしていないことが確認できたとき、このインデックス を落としても安全なはずです。