问题现象
触发场景
以下几种场景均可能导致该问题:
在发起停止归档命令后,归档还未进入 stop 状态之前,重启了 OBServer 或者扩容 OBServer。
归档进入 interrupt 状态后,重启 OBServer 或扩容 OBServer。
在归档介质不可访问时,三次及以上开启关闭归档。
某台 OBServer 网络和 RS 隔离一段时间(此间 RS 切过 piece)。
问题表现
sys 租户的归档状态卡在 beginning,用户租户的归档状态可能是 beginning,也可能是 stopping。
RS 的日志中通常会有如下报错日志:
[2023-05-24 14:27:06.406058] INFO [RS] ob_log_archive_scheduler.cpp:1209 [51559][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=9] [dc=0] finish do log archive schedule(ret=-4016, cost_ts=26650, last_update_tenant_ts_=1684909626383780, sys_info={status:{tenant_id:1, copy_id:0, start_ts:1684484247886734, checkpoint_ts:1684625245739492, status:4, incarnation:1, round:3, status_str:"STOPPING", is_mark_deleted:false, is_mount_file_created:false, compatible:1, backup_piece_id:3, start_piece_id:2}, backup_dest:"file:///data3/nfs_obbackup"})
重启的 OBServer 上通常有如下报错:

其中 cur_piece_id 为 0。
对于触发场景 4,cur_piece_id 不为0,且小于 (rs_piece_id - 1)。
关键诊断信息
触发条件
在发起停止归档命令后,归档还未进入 stop 状态之前,重启了 OBServer 或者扩容 OBServer。
归档进入 interrupt 状态后,重启 OBServer 或扩容 OBServer。
在归档介质不可访问时,三次及以上开启关闭归档。
某台 OBServer 网络和 RS 隔离一段时间(此间 RS 切过 piece)。
问题原因
在停止归档期间,重启的 OBServer 会走 force_stop 流程。在 force_stop 的时候未正确设置 piece 值,导致汇报给 RS 的归档中的 piece_id 是默认的 0。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户
问题风险及影响
该问题会导致日志归档无法停止。
影响版本
OceanBase 数据库企业版 V2.2.77 GA(oceanbase-2.2.77-20210508211731)及之后版本、V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本。
OceanBase 数据库社区版 V3.1.4 BP2(oceanbase-ce-3.1.4-102000012022120715)及之前版本。
解决办法及规避方式
解决方法
升级到已修复版本。目前已修复版本如下:
OceanBase 数据库企业版 V2.2.77 BP13(oceanbase-2.2.77-113000052022082622)、V3.1.2 BP10(oceanbase-3.1.2-110000022022092714)、V3.2.3 BP5(oceanbase-3.2.3.2-105000062022090916)版本。
OceanBase 数据库社区版 V3.1.4 BP3(oceanbase-ce-3.1.4-103000102023020719)版本。
规避方式
停止归档过程中尽量不要重启 OBServer。