OBServer 节点突发断电故障中,多个跨分区事务处于两阶段提交(2PC)的 PREPARE 状态,但 Coordinator 节点重启后,部分参与者的 Prepare 日志和 Commit 日志出现断档。导致恢复后部分分区处于未决状态(in-doubt),相关行被锁定,后续读写报错 transaction context does not exist或 row lock conflict。与此同时,某表的一个二级分区因为未决事务,出现了主副本和从副本数据不一致,但 OceanBase 自身未自动修复。需要找到因未决事务导致副本不一致的分区,通过 ALTER SYSTEM RECOVER REPLICA或强制触发副本重做,将异常副本恢复到一致状态,并通过 CHECKSUM TABLE校验主备数据一致
4 个赞
你这是节点断电 + 协调器重启,2PC 预提交状态产生未决事务,引发行锁、读写报错;部分二级分区主备副本数据不一致,集群未自动修复。解决方法就是查视图定位未决事务、异常分区 / 副本执行XA ROLLBACK+KILL SESSION,清理未决事务、释放锁,用ALTER SYSTEM RECOVER REPLICA或切换分区主副本,修复主备不一致,执行CHECKSUM TABLE校验数据一致,验证业务读写正常就可以
1 个赞
向大师学习,学习下您们的经验,实战经验,谢谢分享
看看看看
厉害