Oracle DBMS_REDEFINITION(在线重定义)
DBMS_REDEFINITION是Oracle数据库提供的在线表重定义内置包,从Oracle 9.2.0.4版本开始支持,核心作用是在几乎不锁表、不中断业务DML操作的前提下,完成表结构的结构性变更,大幅降低停机维护窗口,提升系统高可用性。
核心适用场景
- 表结构调整
在线增删/修改列、重命名列、调整列数据类型,无需停机锁表。 - 分区改造
- 将普通堆表转为分区表,新增/拆分/合并分区,是Oracle 12c中最可靠的普通表转分区表方案,规避ALTER TABLE MODIFY PARTITION BY语法的大量限制。
- 重组优化
重建表消除存储碎片、迁移表空间、转换堆表与索引组织表,同时保障业务持续访问。 - 依赖对象同步
在线重建/调整索引、约束、触发器、权限等依赖对象,不中断业务运行。
关键使用限制
- 需预留至少2倍原表大小的表空间,用于存放原表和中间表数据。
- 仅支持普通用户表,SYS/SYSTEM用户下的表、临时表、外部表、物化视图日志表等不支持重定义。
- 推荐基于主键(CONS_USE_PK)模式重定义,无主键的表可使用ROWID模式,但性能会明显下降。
- 主键列不可修改,中间表新增列不能设置NOT NULL约束,且无法启用nologging模式。
