转http://mp.weixin.qq.com/s?__biz=MzAwMjkyMjEwNg==&mid=2247484761&idx=1&sn=ce080581145931bb0758b66b11fde255&chksm=9ac2464cadb5cf5a9f68161d218ac3385c283938f0c0eed959f53c0027573168ac7714749683&mpshare=1&scene=23&srcid=04153mtIvgr6Sf5yWgNGuPFq#rd

2017-04-15 wzq609 DBGeeK   

点击上方“蓝字”可以关注我们哦

oracle官方建议当表的大小大于2GB的时候就使用分区表进行管理,分区表相对于小的表管理和性能上都有很大的优势,本文档暂时不介绍具体的优势,主要介绍几种普通表转换成分区表的方法;

【方法概述】oracle官方给了以下四种操作的方法:

A)  Export/import method(导入导出)

B)  Insert with a subquery method(插入子查询的方法)

C)  Partition exchange method(交换分区法)

D)  DBMS_REDEFINITION(在线重定义)

这些方法的思路都是创建一个新的分区表,然后把旧表的数据转移到新表上面,接着转移相应的依赖关系,最后进行表的重命名,把新表和旧表rename。

其中A、B、C这三种方法都会影响到系统的正常使用,本文档不做详细的介绍,本文档主要介绍D方法,这种方法是目前普遍在进行普通表转换成分区表的方法。

【在线重定义进行分区表的操作】整个操作的思路如下,以SCOTT下的EMP表为例

1. 先确认下表能不能进行分区

基于主键的确认

BEGIN

DBMS_REDEFINITION.CAN_REDEF_TABLE('SOCTT','EMP',DBMS_REDEFINITION.CONS_USE_PK);

END;

/

PL/SQL procedure successfully completed.显示的是没有问题的

2.进行临时表的创建,以DEPTNO作为分区的选项

CREATE TABLE SCOTT.EMP_1
(
  EMPNONUMBER(4),
  ENAMEVARCHAR2(10 BYTE),
  JOBVARCHAR2(9 BYTE),
  MGRNUMBER(4),
  HIREDATEDATE,
  SALNUMBER(7,2),
  COMMNUMBER(7,2),
  DEPTNONUMBER(2)
)
PARTITION BY RANGE (DEPTNO)
(
  PARTITION EMP_A1 VALUES LESS THAN (20),
  PARTITION EMP_A2 VALUES LESS THAN (30),
  PARTITION EMP_A3 VALUES LESS THAN (40),
  PARTITION EMP_A4 VALUES LESS THAN (50),
  PARTITION EMP_A5 VALUES LESS THAN (60)
      )

3.开始执行数据的迁移

EXEC DBMS_REDEFINITION.START_REDEF_TABLE('SCOTT', 'EMP', 'EMP_1');

4.如果表的数据很多,3步的时候可能会很长,这期间系统可能会继续对表EMP进行写入或者更新数据,那么可以执行以下的语句,这样在执行最后一步的时候可以避免长时间的锁定(该过程可选可不选)

BEGIN 
DBMS_REDEFINITION.SYNC_INTERIM_TABLE('SCOTT', 'EMP', 'EMP_1');
END;
/

5.进行权限对象的迁移

DECLARE
num_errors PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('SCOTT', 'EMP','EMP_1',
DBMS_REDEFINITION.CONS_ORIG_PARAMS, TRUE, TRUE, TRUE, TRUE, num_errors);
END;
/

6.查询相关错误,在操作之前先检查,查询DBA_REDEFINITION_ERRORS试图查询错误:

select object_name, base_table_name, ddl_txt from   DBA_REDEFINITION_ERRORS;

7.结束整个重定义

BEGIN
DBMS_REDEFINITION.FINISH_REDEF_TABLE('scott', 'emp', 'emp_1');
END;
/

【总结】做过一个大小2.3GB,总行数360万行的表,整个过程大概花了56秒的时间,整个过程还是相当快的。建议具体的生产环境的执行需要经过严格测试后执行,测试的过程中大概就能知道整个过程的执行时间长度。

另如果再执行的过程中发生错误,可以通过以下语句结束整个过程:

BEGIN
DBMS_REDEFINITION.ABORT_REDEF_TABLE(uname => 'SCOTT',
orig_table => 'EMP',
int_table => 'EMP_1'
);

END;

转载于:https://www.cnblogs.com/zengkefu/p/6718700.html

ORACLE普通表转换成分区表相关推荐

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

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

  2. oracle变更为大表分区表,叶摇 » Blog Archive » oracle把没有分区的普通大表改成分区表...

    oracle把没有分区的普通大表改成分区表 1.根据要改成分区的表的结构创建一张一样结构的表: create table PARA_CELL_W_HIS_EXCHANGE ( START_TIME D ...

  3. badatatable转成json_数据表转换成json(DatatableToJson)

    #region 转换Table为JSON数据 /// /// 转换Table为JSON数据 /// /// /// public static string TableToJson(DataTable ...

  4. Oracle任意字符串转换成拼音首字母简写

    Oracle任意字符串转换成拼音首字母简写 需求目标 将"拼音简码"四个字转换成拼音首字母简写PYJM 实现代码 CREATE OR REPLACE FUNCTION FUN_GE ...

  5. C语言:将邻接表转换成邻接矩阵算法

    题目 设计一个将邻接表转换成邻接矩阵的算法. 分析 初始时将邻接矩阵 g 中所有对应的元素值设置为 0,扫描邻接表 G 的所有单链表,通过第 i 个单链表查找顶点 i 的相邻结点 p,通过邻接矩阵 g ...

  6. mysql宽表优化_将MySQL的窄表转换成宽表的方法

    将MySQL的窄表转换成宽表的方法 在扩展设计中,使用窄表可以很方便的增加新的项.如果用宽表,就会需要修改表结构,很不方便. 而使用宽表在查询过滤数据的时候会比窄表方便很多,数据的记录量也会少很多. ...

  7. Java案例:数据表转换成XML文档

    将数据表查询内容转换成XML文件,便于在网络上进行传输,具有一定的实用价值.   1.数据表(student) 2.数据库连接管理类 /*** 功能:获得数据库连接* 作者:华卫* 日期:2010年4 ...

  8. 序列表转换成横向菜单

    如何把一个无序列表转换成横向菜单 首先建立一个无序列表 <html> <body> <div id='item'> <ul>  <li>星期 ...

  9. oracle中如何转换成数字,如何在Oracle中实现数字进制转换完全版?

    以下内容包括: 1).提供两个进制转换包 2).提供进制转换的一些简便方法 3).提供进制转换的不同方法的性能评估 1.两个进制转换包 1)包PKG_DM_BASE_CONV(推荐) CREATE O ...

最新文章

  1. Windows系统进程全解剖
  2. Open Asset Import Library
  3. FLASH脚本语言详解
  4. python json方法详解_python详解json模块
  5. Asterisk拨号方案中变量的应用
  6. 2-6:C++快速入门之内联函数,auto关键字,C++11基于范围的for循环和nullptr
  7. neo4j python_Python 操作 Neo4j 数据库!
  8. new RandomAccessFile有时很耗时间
  9. Java毕业设计-漫画管理系统
  10. 苹果手机密码设置在哪里_oppo怎么设置SIM密码-oppo手机SIM卡密码设置详细教程
  11. 电机电缆M12航空插头
  12. 盟军敢死队I:深入敌后--秘籍
  13. 不要USB数据线调试Android开发
  14. 添加打印机怎样锁定计算机名称,怎么安装打印机?_百度经验
  15. 质数(素数)的概念和应用
  16. java 解析m3u8的实例_m3u8文件完整实例及TS流抓取
  17. Java面试大全(2020年版)101-200
  18. NX二次开发-UFUN拉伸函数UF_MODL_create_extruded
  19. 违章查询源码 php,全国车辆违章查询数据使用(PHP)
  20. “用户体验”热浪扑面来袭,空调冰西瓜小板凳准备好了吗?

热门文章

  1. 三星电子电容器件识别
  2. 读书笔记之费曼讲义第一册
  3. CTFshow 命令执行 web56
  4. C++实现最小二乘法对y=exp(x)的二次拟合
  5. 【量化投资】策略九(聚宽)
  6. 配置远程服务器jupyter
  7. android edittext 光标监听,Android EditText监听器,用于光标位置更改
  8. Echarts图表在VUE项目中使用动态数据源
  9. ubuntu中安装hadoop集群
  10. 第20课 - 初始化列表的使用