ORACLE普通表转换成分区表
转http://mp.weixin.qq.com/s?__biz=MzAwMjkyMjEwNg==&mid=2247484761&idx=1&sn=ce080581145931bb0758b66b11fde255&chksm=9ac2464cadb5cf5a9f68161d218ac3385c283938f0c0eed959f53c0027573168ac7714749683&mpshare=1&scene=23&srcid=04153mtIvgr6Sf5yWgNGuPFq#rd
点击上方“蓝字”可以关注我们哦
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普通表转换成分区表相关推荐
- ORACLE 普通表转换成分区表(在线重定义)
在一个高可用系统中,如果需要改变一个表的定义是一件比较棘手的问题,尤其是对于7×24系统.Oracle提供的基本语法基本可以满足一般性修改,但是对于把普通堆表改为分区表,把索引组织表修改为堆表等操作就 ...
- oracle变更为大表分区表,叶摇 » Blog Archive » oracle把没有分区的普通大表改成分区表...
oracle把没有分区的普通大表改成分区表 1.根据要改成分区的表的结构创建一张一样结构的表: create table PARA_CELL_W_HIS_EXCHANGE ( START_TIME D ...
- badatatable转成json_数据表转换成json(DatatableToJson)
#region 转换Table为JSON数据 /// /// 转换Table为JSON数据 /// /// /// public static string TableToJson(DataTable ...
- Oracle任意字符串转换成拼音首字母简写
Oracle任意字符串转换成拼音首字母简写 需求目标 将"拼音简码"四个字转换成拼音首字母简写PYJM 实现代码 CREATE OR REPLACE FUNCTION FUN_GE ...
- C语言:将邻接表转换成邻接矩阵算法
题目 设计一个将邻接表转换成邻接矩阵的算法. 分析 初始时将邻接矩阵 g 中所有对应的元素值设置为 0,扫描邻接表 G 的所有单链表,通过第 i 个单链表查找顶点 i 的相邻结点 p,通过邻接矩阵 g ...
- mysql宽表优化_将MySQL的窄表转换成宽表的方法
将MySQL的窄表转换成宽表的方法 在扩展设计中,使用窄表可以很方便的增加新的项.如果用宽表,就会需要修改表结构,很不方便. 而使用宽表在查询过滤数据的时候会比窄表方便很多,数据的记录量也会少很多. ...
- Java案例:数据表转换成XML文档
将数据表查询内容转换成XML文件,便于在网络上进行传输,具有一定的实用价值. 1.数据表(student) 2.数据库连接管理类 /*** 功能:获得数据库连接* 作者:华卫* 日期:2010年4 ...
- 序列表转换成横向菜单
如何把一个无序列表转换成横向菜单 首先建立一个无序列表 <html> <body> <div id='item'> <ul> <li>星期 ...
- oracle中如何转换成数字,如何在Oracle中实现数字进制转换完全版?
以下内容包括: 1).提供两个进制转换包 2).提供进制转换的一些简便方法 3).提供进制转换的不同方法的性能评估 1.两个进制转换包 1)包PKG_DM_BASE_CONV(推荐) CREATE O ...
最新文章
- Windows系统进程全解剖
- Open Asset Import Library
- FLASH脚本语言详解
- python json方法详解_python详解json模块
- Asterisk拨号方案中变量的应用
- 2-6:C++快速入门之内联函数,auto关键字,C++11基于范围的for循环和nullptr
- neo4j python_Python 操作 Neo4j 数据库!
- new RandomAccessFile有时很耗时间
- Java毕业设计-漫画管理系统
- 苹果手机密码设置在哪里_oppo怎么设置SIM密码-oppo手机SIM卡密码设置详细教程
- 电机电缆M12航空插头
- 盟军敢死队I:深入敌后--秘籍
- 不要USB数据线调试Android开发
- 添加打印机怎样锁定计算机名称,怎么安装打印机?_百度经验
- 质数(素数)的概念和应用
- java 解析m3u8的实例_m3u8文件完整实例及TS流抓取
- Java面试大全(2020年版)101-200
- NX二次开发-UFUN拉伸函数UF_MODL_create_extruded
- 违章查询源码 php,全国车辆违章查询数据使用(PHP)
- “用户体验”热浪扑面来袭,空调冰西瓜小板凳准备好了吗?