基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
备份恢复问题
更新时间:2026-08-25 02:41
问题现象
触发场景
公有云客户发起按表恢复(Table-Level Restore),在恢复到辅助租户(AUX Tenant)阶段时,恢复任务卡在 RESTORE_TO_CONSISTENT_SCN 状态。待恢复的数据量约为 100GB,但恢复任务已持续 12 小时仍未完成。
具体表现
- 恢复任务状态卡在
WAIT_TENANT_RESTORE_FINISH。 - 辅助租户(
tenant_id=1010)的状态为RESTORING。 RESTORE_PROGRESS显示为 0.00%,FINISH_BYTES为 0。- Root Service(RS)日志中出现
-4002(OB_INVALID_ARGUMENT)错误。 - Clog 日志中出现
-4008(piece id out of round range upper bound)错误。
影响范围
- 在曾进行过 AK/SK 非标轮转操作的集群上发起恢复时,此问题必然出现。
- 初步统计有 63 个集群 存在类似风险,只是当前业务尚未发起恢复,影响被滞后。
- 该问题的 SLA 紧急程度已从 MEDIUM 升级为 HIGH,影响程度从 S3 升级为 S2。
问题原因
根因分析
直接原因
恢复过程中,Clog 模块在拉取远程日志时,于 Round 1 中查找 piece 717。然而,piece 717 实际属于 Round 2。由于 Round 1 的 max_piece_id 为 692,piece 717 超出了 Round 1 的范围上限,从而触发 -4008 错误(piece id out of round range upper bound)。
根本原因
根本原因在于 2026-05-28 通过非标手段进行了 AK/SK 轮转操作,导致 Clog 归档出现了两个 Round。
轮转后的归档状态如下表所示:
| Round | 状态(内部表) | Piece 范围 | 起始时间 |
|---|---|---|---|
| Round 1 | STOP | 22 ~ 692 | 2024-07-05 |
| Round 2 | DOING | 693 ~ 721+ | 2026-05-28 |
Round 切换失败的根因
- 内部表判断标准:
CDB_OB_ARCHIVELOG_SUMMARY视图中显示 Round 1 的状态为STOP。 - 备份介质判断标准:恢复侧访问备份介质时,通过检查是否存在
round_d1001r1_end.obarc文件来判断 Round 1 是否已STOP。 - 状态不一致:非标 AK/SK 轮转操作未在备份介质上生成
round_d1001r1_end.obarc文件,导致恢复侧认为 Round 1 仍处于ACTIVE状态。 - 最终结果:恢复侧在 Round 1 中查找本属于 Round 2 的 piece 717,触发
-4008错误,导致 Round 无法正常切换,恢复任务卡住。
技术原理说明
- Clog 归档以 Round 为单位管理日志分片(piece),每个 Round 包含一组连续的 piece。
- 恢复时需要按照 Round 顺序依次拉取日志。当 Round 1 的日志拉取完成后,需要切换到 Round 2。
- Round 切换的前提是确认 Round 1 已结束(
STOP),其判断依据是备份介质上存在round_end文件。 - 非标 AK/SK 轮转操作破坏了 Round 结束标记的完整性,导致 Round 切换逻辑失效。
是否为已知问题
是产品设计缺陷。内部表和备份介质对 Round 状态的判断标准不一致,此逻辑可优化。
关键信息
CLOG 日志(-4008 错误,核心问题日志)
[2026-06-25 03:46:04.767220] WDIAG [CLOG] get_piece_meta_info_ (ob_log_archive_piece_mgr.cpp:985)
[errcode=-4008] piece id out of round range upper bound
(piece_id=717, round_context:{round_id:1, min_piece_id:22, max_piece_id:692},
min_round_id:1, max_round_id:2)
[2026-06-25 03:46:04.767236] WDIAG [CLOG] get_cur_piece_info_ (ob_log_archive_piece_mgr.cpp:937)
[errcode=-4008] get piece meta info failed(piece_id=717)
[2026-06-25 03:46:04.767239] WDIAG [CLOG] get_piece_ (ob_log_archive_piece_mgr.cpp:543)
[errcode=-4008] switch piece if need
[2026-06-25 03:46:04.768329] WDIAG [CLOG] fetch_log_from_location_ (ob_remote_data_generator.cpp:412)
[errcode=-4008] get precise file and offset failed
诊断要点
-4008错误表示piece_id超出了当前 round 的 piece 范围。- 日志中
round_id:1, max_piece_id:692说明系统正在 Round 1 中查找 piece 717。 min_round_id:1, max_round_id:2说明系统已知存在 2 个 round,但未能正确切换。
问题的风险及影响
NA
适用版本
客户版本为 OBServer 4.2.1 BP8 hf1 及其他版本。此问题与具体版本无关,与是否执行过 AK/SK 非标轮转操作有关。
解决方法
补齐 Round End 文件
在备份介质上为 Round 1 补齐 round_d1001r1_end.obarc 文件。此操作将使恢复侧能够正确识别 Round 1 已结束,从而顺利切换到 Round 2 继续恢复。
规避方式
预防措施
- 避免非标 AK/SK 轮转:AK/SK 轮转应通过标准流程(例如管控台或 OMS)进行,避免直接修改备份配置导致归档 Round 状态不一致。
- 轮转后验证:执行 AK/SK 轮转后,应检查备份介质上的 Round 结束标记文件是否正常生成。