1. --操作的用户需要有以下的权限
  2. GRANT CONNECT, RESOURCE TO CMIGDW;
  3. GRANT EXECUTE ON DBMS_REDEFINITION TO CMIGDW;
  4. GRANT ALTER ANY TABLE TO CMIGDW;
  5. GRANT DROP ANY TABLE TO CMIGDW;
  6. GRANT LOCK ANY TABLE TO CMIGDW;
  7. GRANT CREATE ANY TABLE TO CMIGDW;
  8. GRANT SELECT ANY TABLE TO CMIGDW;
  9. GRANT CREATE ANY TRIGGER TO CMIGDW;
  10. GRANT CREATE ANY INDEX TO CMIGDW;
  11.  
  12. --需要分区的表
  13. select * from CMIGDW.TEST_DATE_DIM;
  14.  
  15. --表结构
  16. create table TEST_DATE_DIM
  17. (
  18. date_id NUMBER,
  19. year_ NUMBER,
  20. half_year VARCHAR2(20),
  21. season_id VARCHAR2(20),
  22. season VARCHAR2(20),
  23. month_ NUMBER,
  24. week NUMBER
  25. );
  26.  
  27. --创建一个与TEST_DATE_DIM 表字段相同,但是分区的表
  28. create table TEST_DATE_DIM2
  29. (
  30. date_id NUMBER,
  31. year_ NUMBER,
  32. half_year VARCHAR2(20),
  33. season_id VARCHAR2(20),
  34. season VARCHAR2(20),
  35. month_ NUMBER,
  36. week NUMBER
  37. )
  38. PARTITION BY list (month_)
  39. (
  40. PARTITION P1 values (201501),
  41. PARTITION P2 values (201502),
  42. PARTITION P3 values (default)
  43. );
  44.  
  45. --开始在线重定义
  46. Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0
  47. Connected as CMIGDW@CMIG_TEST
  48.  
  49. SQL> EXEC dbms_redefinition.start_redef_table('CMIGDW', 'TEST_DATE_DIM', 'TEST_DATE_DIM2');
  50. begin dbms_redefinition.start_redef_table('CMIGDW', 'TEST_DATE_DIM', 'TEST_DATE_DIM2'); end;
  51. ORA-12089: 不能联机重新定义无主键的表 "CMIGDW"."TEST_DATE_DIM"
  52. ORA-06512: "SYS.DBMS_REDEFINITION", line 56
  53. ORA-06512: "SYS.DBMS_REDEFINITION", line 1490
  54. ORA-06512: line 1
    需要有主键
  55. --开始执行在线重定义
  56. SQL> EXEC dbms_redefinition.start_redef_table('CMIGDW', 'TEST_DATE_DIM', 'TEST_DATE_DIM2');
  57. PL/SQL procedure successfully completed
  58.  
  59. SQL>
  60. SQL> DECLARE
  61. 2 error_count pls_integer := 0;
  62. 3 BEGIN
  63. 4 dbms_redefinition.copy_table_dependents('CMIGDW', 'TEST_DATE_DIM', 'TEST_DATE_DIM2',
  64. 5 0, true, false, true, false,
  65. 6 error_count);
  66. 7
  67. 8 dbms_output.put_line('errors := ' || to_char(error_count));
  68. 9 END;
  69. 10 /
  70. PL/SQL procedure successfully completed
  71. --结束在线重定义
  72. SQL> EXEC dbms_redefinition.finish_redef_table('CMIGDW', 'TEST_DATE_DIM', 'TEST_DATE_DIM2');
  73. PL/SQL procedure successfully completed
  74.  
  75. SQL> select * from TEST_DATE_DIM PARTITION (p1);
  76. SQL> select * from TEST_DATE_DIM2;
  77.  
  78. -- 删除中间表
  79. DROP TABLE TEST_DATE_DIM2;

oracle 11g 将非分区表转换为分区表在线重定义的更多相关文章

  1. Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表

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

  2. oracle在线重定义表

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

  3. (Oracle)已有数据表建立表分区—在线重定义

    今天在做数据抽取的时候,发现有一张业务表数据量达到了5000W,所以就想将此表改为分区表.分区表的有点如下: 1.改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度.2.增强可用性: ...

  4. Oracle在线重定义(online redefinition)--将普通表改为分区表

    使用Oracle的在线重定义技术,可以将Oracle的普通表改为分区表.操作如下: STEP1:测试表是否可以在线重定义,这里以unixdev数据库的LIJIAMAN.BSTEST为例 EXEC DB ...

  5. oracle普通表转分区表(在线重定义方式)

    1.1.TAB_TAOBAO_BILL 1.1.1检查下这张表是否可以在线重定义,无报错表示可以,报错会给出错误信息: exec dbms_redefinition.can_redef_table(' ...

  6. Oracle 在线重定义表分区

    ==================原始表================原始表=====================原始表 create table BUILDING_temp(building ...

  7. 基于 dbms_redefinition 在线重定义表

    Oracle 支持在线重定义表,也就是说我们可以在修改表结构(DDL)的同时进行相关的DQL.DML操作,使得前端的DML根本感觉不到表结构实际上已经发生了变化,对于用户而言是完全透明的.当然在线重定 ...

  8. dbms_redefinition在线重定义表结构 可以在表分区的时候使用

    dbms_redefinition在线重定义表结构 (2013-08-29 22:52:58) 转载▼ 标签: dbms_redefinition 非分区表转换成分区表 王显伟 在线重定义表结构 在线 ...

  9. dbms_redefinition在线重定义表结构

    dbms_redefinition在线重定义表结构 (2013-08-29 22:52:58) 转载▼ 标签: dbms_redefinition 非分区表转换成分区表 王显伟 在线重定义表结构 在线 ...

随机推荐

  1. HDU 5038 Grade (水题,坑题)

    题意:给 n 个数,输出众数,但是如果所有的频率都相同但数不同输出 Bad Mushroom. 析:直接记录个数直接暴力就,就是要注意只有一种频率的时候. 代码如下: #pragma comment( ...

  2. Promise 异步函数顺序执行

    可以满足需求,且使用方法和Promise.all统一 var a = function() { return new Promise(function(resolve, reject) { setTi ...

  3. CSS效果:图片切换

    HTML: <html lang="en"> <head> <meta charset="UTF-8"> <meta ...

  4. 线段树 SP1043 GSS1 - Can you answer these queries I

    SP1043 GSS1 - Can you answer these queries I 题目描述 给出了序列A[1],A[2],-,A[N]. (a[i]≤15007,1≤N≤50000).查询定义 ...

  5. 数据结构28:广义表及M元多项式

    广义表,又称为列表.记作: LS = (a1,a2,…,an) ;( LS 为广义表的名称, an 表示广义表中的数据). 广义表可以看作是线性表的推广.两者区别是:线性表中的数据元素只能表示单个数据 ...

  6. FlowLayout(流式布局)用法

    https://blog.csdn.net/liujun13579/article/details/7771191

  7. apache 日志分割

    Window apache 全局设置日志分割   apache  [ httpd.conf ] 配置文件 开启日志模块:LoadModule log_config_module modules/mod ...

  8. [USACO18JAN]Cow at Large G(树形DP)

    P4186 [USACO18JAN]Cow at Large G(树形DP) Luogu4186 设dp[i]表示i点需要放多少个农民.则有 \(if(near[i]-dep[i]<=dep[i ...

  9. C/C++中qsort()以及sort()的用法

    最近学弟们问快速排序的比较多,今天自己就做一下总结,快速排序在库函数里面有现成的,不用自己实现,调用一下就可以达到自己想要的结果,掌握以后就可以完全摒弃冒泡和选择了,并且时间复杂度也从O(n*n)提升 ...

  10. poj3040 发工资(贪心)

    题目传送门 题目大意:给一个人发工资,给出不同数量不同面额,(大面额一定是小面额的倍数),问最多能发几天,(每天实发工资>=应发工资). 思路:首先,将大于等于c的面额的钱直接每个星期给奶牛一张 ...