legacy-knowledge-base
公開されました Jul. 2, 2025

Knowledge BaseプラグインでPortal 6.2からDXP 7.1へのアップグレードに失敗することがある。

written-by

Michael Warren Young

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • 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が停止し、誰もインデックスにアクセスしていないことが確認できたとき、このインデックス を落としても安全なはずです。
did-this-article-resolve-your-issue

legacy-knowledge-base