在日志中看到 SegmentNotFound 异常。

问题

在日志中看到 SegmentNotFound 异常。例如:

[1]
*ERROR* [FelixStartLevel] org.apache.sling.event [org.apache.sling.event.impl.jobs.queues.QueueManager(1431)] 此激活方法引发异常 (org.apache.jackrabbit.oak.plugins.segment.SegmentNotFoundException: 未找到区段 da5bcb95-d00a-4c04-a9d9-0f10f2b14e5e)

[2] 
*ERROR* [pool-6-thread-3] 执行 org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate@1dc173f9 作业时引发 org.apache.sling.commons.scheduler.impl.QuartzScheduler 异常 : 未找到区段 e669f30b-e886-4b7a-b161-56432601ec6b
org.apache.jackrabbit.oak.plugins.segment.SegmentNotFoundException: 未找到区段 e669f30b-e886-4b7a-b161-56432601ec6b

环境

AEM 6.0、AEM 6.1、AEM 6.2

原因

由于 Oak 中一些较早的问题或存储库中的某些不一致,区段可能会丢失,而且存储库可能会不一致。

解决方案

在存储库中运行一致性检查,并找到最后一个有效的修订版本 [正常状态] 并还原到此修订版本。请执行以下操作:

  1. https://mvnrepository.com/artifact/org.apache.jackrabbit/oak-run 下载与您的 oak 核心版本匹配的 oak-run 版本

    注意:

    对于 AEM 6.0 实例,请使用具有新检查运行模式 https://github.com/apache/jackrabbit-oak/blob/trunk/oak-run/README.md#check 的 oak-run 版本(oak-run-1.1.7.jar 或更高版本)
    这可以帮助检查区段节点存储是否存在不一致。

  2. 要将损坏的区段存储还原到最新的有效状态,请更改到 CQ 的工作目录(包含 crx-quickstartfolder 的目录)并备份 ./crx-quickstart/repository/segmentstore/ 中的所有文件。

  3. 运行一致性检查
    java -Xmx6000m -jar oak-run-*.jar check -d1 -p /path/to/crx-quickstart/repository/segmentstore

    这会向后搜索各个修订版,直到找到一致的修订版:
    查找如下消息:
    [main] INFO o.a.j.o.p.s.f.t.ConsistencyChecker - 找到最新的有效修订版 afdb922d-ba53-4a1b-aa1b-1cb044b535cf:234880

  4. 通过编辑 ./crx-quickstart/repository/segmentstore/journal.log 并删除包含最新的有效修订版行后的所有行,将存储库还原到此版本。

  5. 删除所有 ./crx-quickstart/repository/segmentstore/*.bak 文件。

  6. 运行检查点清理以删除孤立的检查点:

    java -Xmx6000m -jar oak-run-*.jar checkpoints /path/to/crx-quickstart/repository/segmentstore rm-unreferenced

  7. 最后压缩存储库:

    java Xmx6000m -jar oak-run-*.jar compact /path/to/crx-quickstart/repository/segmentstore/

本产品经 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 许可  Twitter™ 与 Facebook 中的内容不在 Creative Commons 的条款约束之下。

法律声明   |   在线隐私策略