Oracle Online Redefinition 详解
Oracle Online Redefinition 详解
适用版本:Oracle Database 9i+ / 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Online Redefinition 在线重定义表[1]:
详细见:Oracle 在线重定义 DBMS_REDEFINITION。
2. 优势
2.1 零停机
- 业务不停
- 表重定义
- 透明
2.2 变更
- 结构
- 存储
- 分区
- 压缩
3. 流程
3.1 检查
BEGIN
DBMS_REDEFINITION.CAN_REDEF_TABLE(
uname => 'SCOTT',
tname => 'EMP',
options_flag => DBMS_REDEFINITION.CONS_USE_PK
);
END;
/
3.2 创建临时表
CREATE TABLE emp_int
PARTITION BY HASH (id) PARTITIONS 4
AS SELECT * FROM emp WHERE 1=0;
3.3 开始重定义
BEGIN
DBMS_REDEFINITION.START_REDEF_TABLE(
uname => 'SCOTT',
orig_table => 'EMP',
int_table => 'EMP_INT',
options_flag => DBMS_REDEFINITION.CONS_USE_PK
);
END;
/
3.4 同步
BEGIN
DBMS_REDEFINITION.SYNC_INTERIM_TABLE(
uname => 'SCOTT',
orig_table => 'EMP',
int_table => 'EMP_INT'
);
END;
/
3.5 依赖对象
DECLARE
v_num PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(
uname => 'SCOTT',
orig_table => 'EMP',
int_table => 'EMP_INT',
num_errors => v_num
);
END;
/
3.6 完成
BEGIN
DBMS_REDEFINITION.FINISH_REDEF_TABLE(
uname => 'SCOTT',
orig_table => 'EMP',
int_table => 'EMP_INT'
);
END;
/
3.7 清理
DROP TABLE emp_int;
4. 中止
BEGIN
DBMS_REDEFINITION.ABORT_REDEF_TABLE(
uname => 'SCOTT',
orig_table => 'EMP',
int_table => 'EMP_INT'
);
END;
/
5. 应用场景
5.1 分区
- 非分区转分区
- 在线
- 零停机
5.2 结构变更
- 列变更
- 类型
- 在线
5.3 存储
- 表空间迁移
- 压缩
- 在线
5.4 压缩
- OLTP 压缩
- 在线
- 节省空间
6. 限制
6.1 主键
- 需要主键
- 或 ROWID
- CONS_USE_PK / CONS_USE_ROWID
6.2 物化视图
- 物化视图限制
- 检查
6.3 资源
- 临时表空间
- Undo
- 监控
7. 物化视图日志
7.1 自动
- 重定义期间
- 自动创建
- 同步
7.2 清理
- 完成后自动
- 或手动
8. 监控
8.1 视图
SELECT * FROM dba_redefinition_errors;
SELECT * FROM dba_redefinition_objects;
8.2 进度
SELECT * FROM v$session_longops
WHERE opname LIKE '%REDEFINITION%';
9. 性能
9.1 影响
- DML 性能
- 物化视图日志
- 监控
9.2 同步
- SYNC_INTERIM_TABLE
- 定期
- 减少完成时间
9.3 并行
- 并行
- 大表
- 加速
10. 常见问题
10.1 ORA-12091
- 物化视图存在
- 删除
- 重试
10.2 ORA-23539
- 已在重定义
- 检查
10.3 依赖错误
- COPY_TABLE_DEPENDENTS
- num_errors
- 检查
11. 最佳实践
- 测试:演练
- 备份:前
- 主键:必须
- 同步:定期
- 依赖:复制
- 监控:进度
- 低峰:执行
- 并行:大表
- 文档:流程
- 演练:定期
12. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Online Redefinition” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/