首批通过分布式安全可靠测评,为关键业务系统打造
集群合并中删除列遇到 ERROR 4179 报错
更新时间:2026-05-21 01:56
适用版本
OceanBase 数据库 V2.x、V3.x 版本
问题现象
集群正在合并中,普通租户尝试删除一张表的某个列,遇到报错。
obclient [test]> alter table t1 drop column col1;
ERROR 4179 (HY000): alter column when major freeze is not finished not allowed
问题原因
目前 OceanBase 数据库 V3.x 及以前版本不允许合并过程中删列,原因是可能会出现如下问题。
- 发起一次合并,合并选择的快照点是 100,此时合并需要的行数据包含即将要删除的列。
- 删列。
- 转储,转储跨了合并快照点,假如转储了 [80,120) 范围内的数据,因为 OceanBase 数据库中使用的是最新版本的 Schema 来转储数据的,此时转储下来的数据将不包含已删除的列。
- 开始执行快照点 100 的合并,使用转储 [80,120) 范围内的数据,发现列已经被删除。
解决方法
- 如果是 OceanBase 数据库 V3.x 及以前的版本,通过查询
__all_zone表,如果merge_status不是 IDLE,则该报错符合预期,需要等合并完全结束才能继续执行删除列的操作。 - 该问题在 OceanBase 数据库 V4.0 版本已修复,OceanBase 数据库 V4.x 版本删除列,和合并之间就没有依赖关系了。