【Oracle】在线重定义表

简介: Oracle从9i版本开始提供了在线重定义表功能,通过调用DBMS_REDEFINITION包,可以在修改表结构的同时允许DML操作。在线重定义表具有以下功能:1 修改表的存储参数2 可以将表转移到其他表空间3 增加并行查询选项4 增加或删除分区5 ...
Oracle从9i版本开始提供了在线重定义表功能,通过调用DBMS_REDEFINITION包,可以在修改表结构的同时允许DML操作。
在线重定义表具有以下功能:
1 修改表的存储参数
2 可以将表转移到其他表空间
3 增加并行查询选项
4 增加或删除分区
5 重建表以减少碎片
6 将堆表改为索引组织表或相反的操作
7 增加或删除一个列
调用DBMS_REDEFINITION包需要EXECUTE_CATALOG_ROLE角色和以下权限:
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
LOCK ANY TABLE
SELECT ANY TABLE

1.在线重定义的方法
方法一:基于主键。要求原表和重定义后的表有相同的主键列。这是默认方法!
方法二:基于ROWID。该方法不能用于索引组织表(IOT),并且在重定义的表中会添加隐藏列(M_ROW$$),建议将该列标记为unused或删除。
ALTER TABLE TABLE_NAME SET UNUSED (M_ROW$$);
ALTER TABLE TABLE_NAME DROP UNUSED COLUMNS;
2 使用dbms_redefinition.can_redef_table(),检查原表是否支持进行在线重定义。
如果表中没有主键,则检查失败!
YANG@yangdb> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'T1', DBMS_REDEFINITION.CONS_USE_PK);
BEGIN DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'T1', DBMS_REDEFINITION.CONS_USE_PK); END;
*
ERROR at line 1:
ORA-12089: cannot online redefine table "YANG"."T1" with no primary key
ORA-06512: at "SYS.DBMS_REDEFINITION", line 139
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1782
ORA-06512: at line 1

YANG@yangdb> alter table t1 add primary key(id); 
Table altered.
YANG@yangdb> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'T1', DBMS_REDEFINITION.CONS_USE_PK);
PL/SQL procedure successfully completed.
创建测试表rbol
YANG@yangdb> create table rbol (id number primary key,time date);
Table created.
YANG@yangdb> insert into rbol select rownum ,created from dba_objects;
73987 rows created.
YANG@yangdb> commit;
Commit complete.
3 检查是否可以进行在线重定义!
YANG@yangdb> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'RBOL', DBMS_REDEFINITION.CONS_USE_PK);
PL/SQL procedure successfully completed.
4 根据重定义后你期望得到的结构建立中间表。比如:采用分区表,删除或者增加字段等,创建中间表!
20:22:14 yang(45)@yangdb> create table rbol_tmp (id number primary key,time date,val varchar2(10));
Table created.
20:22:36 yang(45)@yangdb> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'RBOL', DBMS_REDEFINITION.CONS_USE_PK);
PL/SQL procedure successfully completed.
20:22:53 yang(45)@yangdb> exec dbms_redefinition.start_redef_table(user,'RBOL','RBOL_TMP');
PL/SQL procedure successfully completed.
5 在重定义过程中对原表rbol进行dml操作
20:24:39 yang(32)@yangdb> delete from rbol where rownum
9 rows deleted.
20:24:44 yang(32)@yangdb> select count(1) from rbol;
  COUNT(1)
----------
     73479
1 row selected.
Elapsed: 00:00:00.00
20:24:49 yang(32)@yangdb> select count(1) from rbol_tmp;
  COUNT(1)
----------
     73488
1 row selected.
20:25:43 yang(32)@yangdb> commit;
Commit complete.
6 如果在执行DBMS_REDEFINITION.START_REDEF_TABLE()过程和执行DBMS_REDEFINITION.FINISH_REDEF_TABLE()过程直接在重定义表上执行了大量的DML操作,那么可以选择执行一次或多次的SYNC_INTERIM_TABLE()过程,以减少最后一步执行FINISH_REDEF_TABLE()过程时的锁定时间。
20:25:55 yang(32)@yangdb> exec dbms_redefinition.sync_interim_table(user,'RBOL','RBOL_TMP');
PL/SQL procedure successfully completed.
20:26:06 yang(32)@yangdb> select count(1) from rbol_tmp;
  COUNT(1)
----------
     73479
1 row selected.
20:26:13 yang(32)@yangdb> select count(1) from rbol;    
  COUNT(1)
----------
     73479
1 row selected.
7 结束重定义步骤!
20:25:25 yang(45)@yangdb> exec dbms_redefinition.finish_redef_table(user,'RBOL','RBOL_TMP');
PL/SQL procedure successfully completed.
20:26:43 yang(32)@yangdb> desc rbol
 Name   Null?   Type
 ------ ------- --------
 ID    NOT NULL NUMBER
 TIME           DATE
 VAL            VARCHAR2(10)
目录
相关文章
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
595 214
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
833 61
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1230 157
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
236 138
|
7天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
516 109