在线 DDL 导致复制表分裂

OceanBase 中有一张复制表(DUPLICATE TABLE)dim_product,用于存放商品维表,每个 OBServer 节点都有全量副本。某日 DBA 执行在线 DDL 增加列 spec_detail VARCHAR(1024),由于该表巨大(2 亿行),DDL 执行过程中出现短暂失败,导致部分节点上的副本数据与其他节点不一致,部分查询出现错误 duplicate key或数据为空。此时业务必须继续读写该表,不能锁表重建, 在不停止业务读写的情况下,通过 OceanBase 的副本修复机制(如触发副本重建或使用 ALTER TABLE … FORCE REPLICA REBUILD)将异常节点上的复制表副本修复为一致状态, 重新正确执行该加列 DDL,但采用渐进式策略(如PAUSE和 RESUME控制)并设置 DDL_LOCK_TIMEOUT,确保不会再次出现副本不一致

2 个赞

先确认哪些节点副本状态异常, 使用 OceanBase ALTER TABLE FORCE REPLICA REBUILD副本重建机制, 在业务租户执行,设置渐进式 DDL+锁超时, 针对2 亿行大表,必须用渐进式 DDL,分阶段执行,随时可暂停,绝对不会导致副本不一致,先用FORCE REPLICA REBUILD修复异常节点副本,配置DDL_LOCK_TIMEOUT+ INCREMENTAL_DDL 保障 DDL 安全,用渐进式加列 DDL(PAUSE/RESUME)完成加列,全程不锁表、不停止业务,最终所有副本结构 / 数据完全一致。

2 个赞

66666

66