首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库 V4.x 的 Offline DDL 及注意事项
更新时间:2026-05-21 09:16
本文简述 Offline DDL 及执行前注意事项。
Offline DDL 即执行时不允许 DML 同时对对象进行修改的 DDL 操作。
在 OceanBase 数据库 V4.2 版本,Offline DDL 列表如下。
| 分类 | 操作 | 耗时 | 备注 | |
|---|---|---|---|---|
| 列操作 | 中间加列(before/after/first) | 和数据量有关,需要重整数据 | Oracle 模式不支持 | |
| 列操作 | 重排列(before/after/first) | 和数据量有关,需要重整数据 | Oracle 模式不支持 | |
| 列操作 | 添加自增列 | 和数据量有关,需要重整数据 | ||
| 列操作 | 修改为自增列 | 和数据量有关,需要查询数据 | ||
| 列操作 | 修改列类型 | 和数据量有关,需要重整数据 | Oracle 模式不支持 | |
| 列操作 | 修改列为主键 | 和数据量有关,需要重整数据 | ||
| 列操作 | 添加/删除 stored 生成列 | 和数据量有关,需要重整数据 | ||
| 列操作 | 删列 | 和数据量有关,需要重整数据 | ||
| 列操作 | 混合列操作 | 和数据量有关,需要重整数据 | Oracle 模式支持 | |
| 主键操作 | 加/删主键 | 和数据量有关,需要重整数据 | ||
| 表操作 | truncate 表 | 和是否有活跃事务有关 | ||
| 表操作 | 转换字符集 | 和数据量有关,需要重整数据 | Oracle 模式不支持 | |
| 表操作 | 删表 | 和是否有活跃事务有关 | ||
| 分区操作 | 修改分区规则 | 和数据量有关,需要重整数据 | ||
| 分区操作 | 删除分区 | 和是否有活跃事务有关 | 锁分区 | |
| 分区操作 | truncate 分区 | 和是否有活跃事务有关 | 锁分区 | |
关于 Offline DDL 的注意事项:
- Offline DDL 在执行时,会走两表双写逻辑,即将老表的数据用新的 DDL schema 来重写到新表,会导致表空间的放大(2 倍)。因此在执行 Offline DDL 时,需要 DBA 判断集群资源是否支持和业务影响是否接受。
- DML 执行时会加表级锁,与 Offline DDL 发生冲突。因此需要等待事务结束后才能执行 Offline DDL。
适用版本
OceanBase 数据库 4.x 版本。