oracle分区表-range分区

一、什么时候用到分区表

             1.当表达到GB大小且继续增长

             2.需要将历史数据和当前的数据分开单独处理,比如历史数据仅仅需要只读,而当前数据则实现DML

二、分区的条件及特性

             共性:不同的分区之间必须有相同的逻辑属性,比如表名,列名,数据类型,约束等,

             个性:各个分区可以有不同的物理属性,比如pctfree, pctused, and tablespaces. 分区独立性:即使某些分区不可用,其他分区仍然可用。   

             特殊性:含有LONG、LONGRAW数据类型的表不能进行分区

三、分区的优点

             1、提高查询性能:只需要搜索特定分区,而非整张表,提高查询速度

             2、节约维护时间:单个分区的数据装载,索引重建,备份,维护等将远小于整张表的维护时间

             3、节约维护成本:可以单独备份和恢复每个分区

             4、均衡I/O:将不同的分区映射到不同的磁盘以平衡I/O,提高并发

四、ORACLE分区类型:

            范围分区、散列分区、列表分区、组合分区 

            Range分区:行映射到基于列值范围的分区 Range分区,又称为范围分区,基于分区键值的范围将数据映射到所建立的分区上。这是最通用的分区类型。 在按时间分区时,如果某些记录暂无法预测范围,可以创建maxvalue分区,所有不在指定范围内的记录都会被存储到maxvalue所在分区中。

--创建分区表

CREATE TABLE T_NEW (log_id, fun_code,log_time,povcd,req_typ,ip_addr)

         PARTITION BY RANGE (log_time) (

         PARTITION P1 VALUES LESS THAN (TO_DATE('2014-11-15', 'YYYY-MM-DD')),

         PARTITION P3 VALUES LESS THAN (TO_DATE('2014-11-30', 'YYYY-MM-DD')),

         PARTITION P4 VALUES LESS THAN (MAXVALUE)) AS

         SELECT log_id, fun_code,log_time,povcd,req_typ,ip_addr FROM APP_ACCESS_LOG;

--查询分区表

select * from T_NEW partition (p2) t where t.fun_code = '1111';

--删除其中一个分区

alter table T_NEW drop partition p4;

--添加一个分区

ALTER TABLE T_NEW add partition p5 values less than (TO_DATE('2015-01-30', 'YYYY-MM-DD'));

--split 将默认maxvalue分区分离成两个分区

alter table T_NEW split partition P4 at (TO_DATE(' 2015-01-31 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) into (partition P4, partition PMAX);

--合并分区

alter table T_NEW merge partitions p1,p3 into partition p2;

--查询分区表分区情况

select table_name,partition_name from user_tab_partitions where table_name='T_NEW';

参考:http://blog.csdn.net/leshami/article/details/5925572

猜你喜欢

转载自wused.iteye.com/blog/2175319