首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库 V4.x 版本中日志归档进度回退或者卡在 STOPPING
更新时间:2026-05-12 09:06
问题现象
在 OceanBase 数据库中,业务使用 NFS(对象存储一般不会发生)作为归档目的端的场景中,旧 RS Leader 所在的 OBServer 中的归档线程因 NFS 故障而发生线程 hang(ROUND_ID = A),运维通过切换 RS Leader 至其他 OBServer 后,未重启旧 RS Leader 所在的 OBServer。随后一次或多次关闭并重新开启归档,ROUND_ID 更新为 B(B > A),ROUND_ID = A 时使用的 NFS 故障恢复后,业务观察到归档进度回退或者关闭归档卡在 STOPPING 状态。
关键诊断信息
触发条件
业务使用 NFS(对象存储一般不会发生)作为归档目的端,旧 RS Leader 所在的 OBServer 中的归档线程因 NFS 故障而发生线程 hang(ROUND_ID = A),运维通过切换 RS Leader 至其他 OBServer 后,未重启旧 RS Leader 所在的 OBServer,随后一次或多次关闭并重新开启归档后,ROUND_ID = A 时使用的 NFS 故障恢复了。
事前巡检
可以通过如下的 SQL,查询集群中是否有归档线程 hang,以及线程所在的 OBServer 地址。
SELECT
A.SVR_IP AS SVR_IP,
A.SVR_PORT AS SVR_PORT,
A.TENANT_ID AS TENANT_ID,
ROLE,
TID,
TNAME,
LOOP_TS
FROM
(
SELECT *
FROM __ALL_VIRTUAL_THREAD
WHERE TNAME LIKE '%ArchiveSv%'
) AS A
LEFT JOIN
(
SELECT *
FROM CDB_OB_LS_LOCATIONS
WHERE LS_ID = 1
) AS B
ON A.TENANT_ID = B.TENANT_ID
AND A.SVR_IP = B.SVR_IP
AND A.SVR_PORT = B.SVR_PORT
WHERE A.TENANT_ID IN
(
SELECT TENANT_ID
FROM __ALL_VIRTUAL_THREAD
WHERE TNAME LIKE '%ArchiveSv%'
GROUP BY TENANT_ID
HAVING TIMESTAMPDIFF(MINUTE, MIN(LOOP_TS), MAX(LOOP_TS)) > 10
);

上图的结果表明:xxx.xxx.xxx.51:6000 的 OBServer 中的归档线程长时间不活跃,且是 FOLLOWER,当前 LEADER 的归档线程是活跃,可以确认 hang 了,然后重启这个 OBServer 即可。
事后诊断
如果设置了新路径,
CDB_OB_ARCHIVE_DEST中的路径和CDB_OB_ARCHIVELOG中的归档路径不一致,CDB_OB_ARCHIVELOG中的路径是旧路径。SELECT * FROM CDB_OB_ARCHIVE_DEST WHERE TENANT_ID=1002; SELECT * FROM CDB_OB_ARCHIVELOG WHERE TENANT_ID=1002;
CDB_OB_ARCHIVELOG_SUMMARY中有 2 个相同ROUND_ID的记录,其中一个状态是STOP,另一个是DOING或者STOPPING。SELECT * FROM CDB_OB_ARCHIVELOG_SUMMARY WHERE TENANT_ID=1002 ORDER BY ROUND_ID DESC;
CDB_OB_ARCHIVELOG_PIECE_FILES中最大的ROUND_ID比CDB_OB_ARCHIVELOG中的ROUND_ID大。SELECT TENANT_ID, DEST_ID, ROUND_ID, MIN(PIECE_ID) AS MIN_PIECE_ID, MAX(PIECE_ID) AS MAX_PIECE_ID, PATH FROM CDB_OB_ARCHIVELOG_PIECE_FILES WHERE TENANT_ID = 1002 GROUP BY DEST_ID, PATH, ROUND_ID; SELECT * FROM CDB_OB_ARCHIVELOG WHERE TENANT_ID=1002;
问题原因
旧 RS Leader 所在的 OBServer 中的被 hang 住归档线程持有了旧的归档状态上下文,线程复活后,旧状态被更新到系统表中,导致归档的元数据错误。
问题的风险及影响
归档功能无法正常使用,系统表中记录的归档元数据错误。线程复活后,归档进度回退到线程 hang 时的旧状态。若此时再发起过关闭归档,归档也会卡在 STOPPING。
影响租户
影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户,对于 SYS 租户无影响。
影响版本
OceanBase 数据库企业版 V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722)及之后版本、V4.2.5 GA(oceanbase-4.2.5.0-100000082024102022)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V4.2.1 BP11 Hotfix7(oceanbase-4.2.1.11-111070032025081120)版本、V4.2.1 BP11 Hotfix8(oceanbase-4.2.1.11-111080012025082014)版本、V4.2.1 BP11 Hotfix9(oceanbase-4.2.1.11-111090012025091215)版本、V4.2.1 BP11 Hotfix10(oceanbase-4.2.1.11-111100012025092309)版本、V4.2.1 BP11 Hotfix11(oceanbase-4.2.1.11-111110012025101314)版本、V4.2.1 BP11 Hotfix12(oceanbase-4.2.1.11-111120022025110311)版本、V4.2.5 BP1(oceanbase-4.2.5.1-101000182024120722)及之后版本。
对于已经遇到该问题的用户,可以联系 OceanBase 数据库技术支持团队参与协助运维。
规避方式
遇到 NFS hang 问题时,一定要重启对应的 OBServer,可以避免触发该问题。