AEM/AEM Forms的因應措施和修正索引損毀
如果有人在AEM/AEM表單中遇到索引損毀的問題,本文會說明如何刪除存放庫中包含的索引資料,並重新索引損毀的索引,以協助您解決問題。
說明 description
環境
Experience Manager Forms
問題/症狀
發生索引損毀是很罕見的情況。 但如果發生此情況,您將會看到類似以下的記錄專案:17.01.2019 17:55:47.374 *WARN* [ pool-118-thread-4] org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate [ async] The index update failed
org.apache.jackrabbit.oak.api.CommitFailedException: OakMerge0001: OakMerge0001: Failed to merge changes to the underlying store (retries 5, 5169 ms)
at org.apache.jackrabbit.oak.spi.state.AbstractNodeStoreBranch.merge0(AbstractNodeStoreBranch.java:345)
at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.merge(DocumentNodeStoreBranch.java:156)
at org.apache.jackrabbit.oak.plugins.document.DocumentRootBuilder.merge(DocumentRootBuilder.java:160)
at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.merge(DocumentNodeStore.java:1588)
at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.mergeWithConcurrencyCheck(AsyncIndexUpdate.java:581)
at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.updateIndex(AsyncIndexUpdate.java:525)
at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.runWhenPermitted(AsyncIndexUpdate.java:431)
at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.run(AsyncIndexUpdate.java:323)
at org.apache.sling.commons.scheduler.impl.QuartzJobExecutor.execute(QuartzJobExecutor.java:115)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1164)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:634)
解決方法 resolution
如果有人遇到這種情況,解決此問題的最快方式可能是刪除存放庫中包含的索引資料,並重新索引損壞的索引。
注意:對於這些我們將使用索引的範例而言,重新索引是耗時的耗資源動作 "workflowDataLucene"
刪除索引資料:
索引資料位於下列存放庫中 /oak:index/workflowDataLucene
作為隱藏節點,因此要刪除損壞的索引,您需要:
- 將索引定義(僅限)複製到新位置。
- 刪除全部
/oak:index/workflowDataLucene
節點結構。 - 重新建立
/oak:index/workflowDataLucene
和Tirgger重新索引。
因應措施:
作為因應措施,您可以停用索引並使用相同的定義建立新索引,而不是刪除索引:
- 建立與損毀索引定義相同的新索引
- 觸發新索引上的重新索引
- 將type屬性變更為「disabled」,停用損毀的索引
完成此變更後,每個查詢都將移至新索引
從RDB刪除資料:
作為最後的手段,如果您執行 RDBmk
,您可以使用類似下列的as查詢來分析,以直接從資料庫中刪除索引資料:
DELETE
FROM
NODES
WHERE
ID =
'2:/oak:index/workflowDataLucene'
OR
ID
LIKE
'3:/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'4:/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'5:/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'6:/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'7:/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'8:/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'9:/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'10:/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'5:p/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'6:p/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'7:p/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'8:p/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'9:p/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'10:p/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'11:p/oak:index/workflowDataLucene/%'
OR
ID
LIKE
'12:p/oak:index/workflowDataLucene/%'
OR
如果您決定採用此路徑,請務必在執行查詢之前先驗證查詢,因為此查詢可能需要一些變更
注意: AEM必須關機,且本機持續快取和索引檔案(<
crx-quickstart>
/repository/cache和 <
crx-quickstart>
/repository/index)已刪除,接著才啟動AEM。