Oracle 将普通表转换为分区表
DB:11.2.0.30
将普通表转换为区分表
一.利用原表重建分区表
SQL>create table yoon ( id number primary key ,time date );
Table created.
SQL>insert into yoon select rownum,created from dba_objects;
74930 rows created.
SQL>select count(*) from yoon;
COUNT(*)
----------
74930
SQL>create table yoon_new (ID,TIME) partition by range(time)
(partition p1 values less than (to_date('2011-10-01','YYYY-MM-DD')),
partition p2 values less than (to_date('2012-10-01','YYYY-MM-DD')),
partition p3 values less than (to_date('2013-10-01','YYYY-MM-DD')),
partition p4 values less than (MAXVALUE))
as select id,time from yoon;
Table created.
SQL>select table_owner,table_name,partition_name from dba_tab_partitions where table_name='YOON_NEW';
TABLE_OWNER TABLE_NAME PARTITION_NAME
------------------------------ ------------------------------ ------------------------------
YOON YOON_NEW P1
YOON YOON_NEW P2
YOON YOON_NEW P3
YOON YOON_NEW P4
SQL>alter table yoon rename to yoon_old;
Table altered.
SQL>alter table yoon_new rename to yoon;
Table altered.
SQL>select count(*) from yoon partition(p1);
COUNT(*)
----------
74445
SQL> select count(*) from yoon partition(p2);
COUNT(*)
----------
0
SQL> select count(*) from yoon partition(p3);
COUNT(*)
----------
0
SQL> select count(*) from yoon partition(p4);
COUNT(*)
----------
485
优点:方法简单、易用,由于采用DDL语句,不会产生UNDO,且只产生少量REDO,效率相对较高,而且建表完成后数据已经在分布到各个分区中了.
缺点:1.适用于修改不频繁的表,在闲时进行操作,表的数据量不宜太大.
2.表太大,在导入数据的时候会产生大量的UNDO;非要采用这种方式,将数据分批次导入.
二.交换分区
SQL> create table yoon ( id number primary key,time date ) ;
Table created.
SQL> insert into yoon select rownum,created from dba_objects;
74930 rows created.
SQL> commit;
Commit complete.
SQL> create table yoon_new ( id number primary key,time date ) partition by range(time)
2 (partition p1 values less than (to_date('2015-10-01','YYYY-DD-MM')),
3 partition p2 values less than (maxvalue));
Table created.
SQL> ALTER TABLE YOON_NEW EXCHANGE PARTITION P1 WITH TABLE YOON ;
Table altered.
SQL> select count(*) from yoon;
COUNT(*)
----------
0
SQL> select count(*) from yoon_new;
COUNT(*)
----------
74930
SQL> alter table yoon rename to yoon_old;
Table altered.
SQL> alter table yoon_new rename to yoon;
Table altered.
SQL> select table_owner,table_name,partition_name from dba_tab_partitions where table_name='YOON';
TABLE_OWNER TABLE_NAME PARTITION_NAME
------------------------------ ------------------------------ ------------------------------
YOON YOON P1
YOON YOON P2
三.在线重定义
SQL> create table yoon ( id number primary key,time date ) ;
Table created.
SQL> insert into yoon select rownum,created from dba_objects;
74930 rows created.
SQL> commit;
Commit complete.
SQL> EXEC DBMS_REDEFINITION.can_redef_table(user,'YOON',DBMS_REDEFINITION.CONS_USE_PK);
PL/SQL procedure successfully completed.
SQL> create table yoon_new ( id number primary key,time date ) partition by range(time)
2 (partition p1 values less than (to_date('2011-01-01','YYYY-DD-MM')),
3 partition p2 values less than (to_date('2012-01-01','YYYY-DD-MM')),
4 partition p3 values less than (to_date('2013-01-01','YYYY-DD-MM')),
5 partition p4 values less than (maxvalue));
Table created.
SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER,'YOON','YOON_NEW','ID ID,TIME TIME',DBMS_REDEFINITION.CONS_USE_PK);
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('YOON','YOON','YOON_NEW');
PL/SQL procedure successfully completed.
S
QL> select table_name from user_tables;
TABLE_NAME
------------------------------
YOON_NEW
YOON
SQL> select count(*) from yoon_new;
COUNT(*)
----------
74930
SQL> select count(*) from yoon;
COUNT(*)
----------
74930
SQL> select table_owner,table_name,partition_name from dba_tab_partitions where table_name='YOON';
TABLE_OWNER TABLE_NAME PARTITION_NAME
------------------------------ ------------------------------ ------------------------------
YOON YOON P1
YOON YOON P2
YOON YOON P3
YOON YOON P4
在线重定义能够保证数据的一致性,在大部分时间中,表YOON都可以正常进行DML操作,在切换的瞬间锁表,具有狠高的可用性,具有狠强的灵活性,能够满足各种不同的需求.可以在切换前建立各种约束,做到切换后不用任何额外的管理操作.
Oracle 将普通表转换为分区表的更多相关文章
- 使用DBMS_REDEFINITION在线切换普通表到分区表
随着数据库数据量的不断增长,有些表须要由普通的堆表转换为分区表的模式.有几种不同的方法来对此进行操作.诸如导出表数据,然后创建分区表再导入数据到分区表.使用EXCHANGE PARTITION方式来转 ...
- oracle之二表的几种类型
Oracle中表的几种类型 1.表的功能:存储.管理数据的基本单元(二维表:有行和列组成)2.表的类型: 1)堆表:heap table :数据存储时,行是无序的,对它的访问采用全表扫描. 2)分区表 ...
- oracle表分区以及普表转分区表(转)
概述 Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任务,分区是构建 ...
- Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法
一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Orac ...
- Oracle数据表转换为Shapefile(二)
在上一篇博文<Oracle数据表转换为Shapefile(一)>中详细描述了一种基于Oracle数据表生产Shapefile的技术方法,本文同样以详细图解的方式描述一种更便捷的方法来完成同 ...
- Oracle数据表转换为Shapefile(一)
严格来说,文章标题中的“转换”并不完全合适.本文的主要内容是基于Oracle数据表的数据来生产出Shapefile文件.进行该工作的一个前提条件是:Oracle数据表中包含坐标数值字段,一般来说就是x ...
- oracle move表空间(分区表,索引)
1.修改分区表分区表空间 SELECT 'ALTER TABLE ' || table_owner || '.' || TABLE_NAME || ' MOVE PARTITION ' || PART ...
- Oracle SQL调优之分区表
目录 一.分区表简介 二.分区表优势 三.分区表分类 3.1 范围分区 3.2 列表分区 3.3 散列分区 3.4 组合分区 四.分区相关操作 五.分区相关查询 附录:分区表索引失效的操作 一.分区表 ...
- ORACLE修改用户表所属表空间的步骤
ORACLE修改用户表所属表空间的步骤 使用脚本进行修改.据目前所了解,正长情况下需要修改表的空间和表的索引的空间,如果涉及到BOLB字段的表,修改的方式又不一样了!正常情况下的修改脚本:1.修改表的 ...
随机推荐
- C++: std::string 与 Unicode 结合
一旦知道 TCHAR 和_T 是如何工作的,那么这个问题很简单.基本思想是 TCHAR 要么是char,要么是 wchar_t,这取决于_UNICODE 的值: // abridged from tc ...
- CLRS:sorting in linear time O(n)
//intput array A,output array result. count array count . //all the elements is in te range of 0~k ...
- 安装Ecshop首页出现报错:Only variables should be passed by referen
出现下面这就话: Strict Standards: Only variables should be passed by reference in E:\Tools\ECShop_V2.7.3_UT ...
- pxecfg&kickstart生成脚本
em tm 00:00:00:00:00:12 10.180.1.12 255.255.255.0 173.45.34.25 255.255.255.225 173.45.34.1 em tm 00: ...
- 对于不是特别擅长Photoshop的人来说,熟悉和运用Photoshop工具提供的各类便捷的快捷键,是有帮助的。
应用程序菜单快捷键之文件 应用程序菜单快捷键之编辑 应用程序菜单快捷键之图像图层 应用程序菜单快捷键 应用程序菜单快捷键之视图 Ctrl + H 取消参考线 调板菜单 ...
- WEB跨域的实现
同源策略/SOP(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS.CSFR等攻击(可以参考我的这篇文章). SOP要求 ...
- java 字节流和字符流的区别
转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不 ...
- VS软件对应编号
VC6VC7(2003)VC8(2005)VC9(2008)VC10(2010)VC11(2012)VC12(2013)
- javascritp日期函数总结
getDate()与getDay()的区别: obj.getDate()返回一个月中的某一天:obj.getDay()返回一个星期中的某一天. getYear()与getFullYear()的区别: ...
- 由window.history.back()引发的问题
由window.history.back()引发的问题 编写人:CC阿爸 2015-1-30 今天在这里,我想与大家一起分享由windows.history.back()引发的问题,笔者在实际开发当中 ...