1 创建测试表

用sys用户创建测试表

SQL> CREATE TABLE HR.ST (ID NUMBER, TIME DATE);

Table created.

SQL> INSERT INTO HR.ST SELECT ROWNUM, CREATED FROM DBA_OBJECTS;

50416 rows created.

SQL> commit;

Commit complete.

2 授权

SQL> grant execute on DBMS_REDEFINITION to hr;

Grant succeeded.

SQL> grant CREATE ANY TABLE, ALTER ANY TABLE, DROP ANY TABLE, LOCK ANY TABLE, SELECT ANY TABLE to hr;

Grant succeeded.

3 新建中间表(分区的表结构)

SQL> create table mid_st(id number primary key, time date) partition by range(time)

2  (

3    partition p1 values less than(to_date('2004-7-1', 'yyyy-mm-dd')),

4    partition p2 values less than(to_date('2005-1-1', 'yyyy-mm-dd')),

5    partition p3 values less than(to_date('2005-7-1', 'yyyy-mm-dd')),

6    partition p4 values less than(maxvalue)

7  );

Table created

4 验证

SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'ST', DBMS_REDEFINITION.CONS_USE_PK);

PL/SQL procedure successfully completed

5 在线重定义

SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'ST', 'MID_ST');

PL/SQL procedure successfully completed

6 同步数据(可选)

如果在执行DBMS_REDEFINITION.START_REDEF_TABLE()过程和执行DBMS_REDEFINITION.FINISH_REDEF_TABLE()过程直接在重定义表上执行了大量的DML操作,那么可以选择执行一次或多次的SYNC_INTERIM_TABLE()过程,以减少最后一步执行FINISH_REDEF_TABLE()过程时的锁定时间。

SQL> EXEC DBMS_REDEFINITION.SYNC_INTERIM_TABLE(USER, 'ST', 'MID_ST');

PL/SQL procedure successfully completed

7 结束重定义

SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'ST', 'MID_ST');

PL/SQL procedure successfully completed

8 查看分区结果

SQL> select a.table_name, a.partition_name from user_tab_partitions a;

TABLE_NAME                     PARTITION_NAME

------------------------------ ------------------------------

ST                             P1

ST                             P2

ST                             P3

ST                             P4

9 放弃在线重定义

可以在执行dbms_redefinition.start_redef_table之后到执行dbms_redefinition.finish_redef_table之前的时间里执行:

DBMS_REDEFINITION.abort_redef_table(user, 'st', 'mid_st')以放弃执行在线重定义。

10 常见问题

10.1 无主键

SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'ST', DBMS_REDEFINITION.CONS_USE_PK);

BEGIN DBMS_REDEFINITION.CAN_REDEF_TABLE(user, 'ST', DBMS_REDEFINITION.CONS_USE_PK); END;

*

ERROR at line 1:

ORA-12089: cannot online redefine table "HR"."ST" with no primary key

ORA-06512: at "SYS.DBMS_REDEFINITION", line 137

ORA-06512: at "SYS.DBMS_REDEFINITION", line 1478

ORA-06512: at line 1

出错了, 该表上缺少主键, 为该表建主键. 再执行验证.

SQL> alter table st add constraint pk_t primary key(id);

Table altered.

用这句删除materialized view 即可继续进行

drop materialized view log on ;

drop materialized view log on t; OR drop materialized t;

10.2 未授权

SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'ST', 'MID_ST');

begin DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'ST', 'MID_ST'); end;

ORA-01031: insufficient privileges

ORA-06512: at "SYS.DBMS_REDEFINITION", line 50

ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343

ORA-06512: at line 2

oracle表转为分区表,Oracle 在线重定义(将普通堆表转换成分区表)相关推荐

  1. 在线重定义生产环境大表分区的惨烈踩雷记录

    精彩预告:第八届数据技术嘉年华大会将于2018年11月16日~17日在北京市朝阳区东三环中路61号富力万丽酒店盛大开启.本次大会邀请互联网领先企业的数据库专家,国产数据库的领军人物,云技术等领域的知名 ...

  2. ORACLE 普通表转换成分区表(在线重定义)

    在一个高可用系统中,如果需要改变一个表的定义是一件比较棘手的问题,尤其是对于7×24系统.Oracle提供的基本语法基本可以满足一般性修改,但是对于把普通堆表改为分区表,把索引组织表修改为堆表等操作就 ...

  3. linux下出现重定义,Oracle Online Redefinition在线重定义

    在线重定义特性进行数据表Online的结构变动操作.本篇我们从一个较复杂的案例出发,讨论复杂变化情况下如何进行Online Redefinition,以及dbms_redefinition包各个关键方 ...

  4. Oracle 11gR2 在线重定义(online redefinition)

    在Oracle9i出现之前,你只能通过MOVE或导出和导入的方式来进行表的重定义,因此表重定义的过程可能相当漫长或者说是一个离线过程,在此期间应用程序对该表的操作将失败.除了这个,如果用exp,我们也 ...

  5. Oracle11g新特性:在线操作功能增强-Oracle11g在线重定义功能对物化视图... (转载)

    Oracle的在线重定义功能就是利用了物化视图的功能,通过物化视图日志的记录功能,来同步目标表和基表的数据.因此,在11g以前,建立了物化视图日志的表是无法进行在线重定义操作的: SQL> CR ...

  6. 【转】Oracle在线重定义DBMS_REDEFINITION 普通表—分区表

    实验环境:RHEL 6.4 + Oracle 11.2.0.3 实验:在线重定义 普通表 为 分区表,包括主键对应的索引都改造为分区索引. 1,构造普通表t_objects conn test1/te ...

  7. oracle 11g 通过在线重定义方式修改表结构

    今天因为要对一套数据库的数据抽取进行io优化,希望通过修改表结构将抽取io降下来,因为抽取只针对标签HAVE_FLAG为"0"的值进行抽取,抽取之后更新HAVE_FLAG为其他值, ...

  8. oracle在线重定义(一)

    一.废话几句: 关于pd12导出图像, 首先ctrl+A全选 然后:edit->Export Image-->emf格式为默认,实则任选就OK了: 下午时隔4个月再次画ER图,相对的感觉要 ...

  9. Oracle在线重定义

    http://boylook.itpub.net/post/43144/520542 Oracle9i之前,表数据的整理是通过 alter table XXX move [tablespace XX] ...

  10. Oracle Online Redefinition在线重定义(下)

    在之前的文章中,我们看到了如何处理单表在线重定义过程.本篇我们来看一下如何进行关联表的重定义过程. 4.外键关系表重定义 我们先创建出实验数据表. SQL> create table t_mas ...

最新文章

  1. 2022-2028年中国汽车铝合金冲压件行业市场运营模式及未来发展潜力报告
  2. Android插件化开发基础之静态代理模式
  3. er图转为数据流程图_「数据架构」实体关系模型介绍
  4. 三个好用的并发工具类
  5. JavaFX UI控件教程(十六)之Separator
  6. easymodbus_easymodbus4j基于netty的modbus协议快速开发工具
  7. 安全测试工具-kali_无需整理
  8. c语言编译错误c267,为啥编译出现HAHA.C(31): error C267: 'adc0832': requires ANSI-style prototype.......
  9. P1081 开车旅行
  10. DSP using MATlAB 示例Example2.10
  11. Sublime Text 2 常用插件介绍
  12. 基于51单片机+LD3320语音模块+SYN6288语音合成——语音识别智能分类垃圾桶
  13. 计算机里的本地安全策略在哪找,本地安全策略哪里去了?
  14. Ubuntu下deb文件安装方法图文详解
  15. JAVA400行代码实现飞翔的小鸟
  16. 23年 车辆检测+车距检测+行人检测+车辆识别+车距预测(附yolo v5最新版源码)
  17. uint8数据类型图片和double数据类型图片的转化和显示
  18. Win10 盘符更改后需要修改的
  19. FPGA基础知识----第三章 第2节 综合和仿真
  20. 【HDOJ】3509 Buge's Fibonacci Number Problem

热门文章

  1. 第三天 二列和三列布局
  2. asp.net身份验证
  3. 计算机原理考研题库,东北大学计算机组成原理题库(9)
  4. MyCat基于MySQL实现主从切换
  5. Oracle 数据库常用操作总结二之数据库的导入和导出
  6. springcloud之feign远程调用
  7. 5、VS2010+ASP.NET MVC4+EF4+JqueryEasyUI+Oracle该项目的开发——使用datagrid做报表
  8. 学习ubuntu之wget命令
  9. lua upvalue
  10. [Html]Jekyll 代码高亮的几种选择