[间隔分区]Oracle10g、11g创建间隔分区表

    为了简化数据库大表的管理,例如在数据仓库中一般都是TB级的数量级.ORACLE8以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组大表在物理一级的可管理性.将大表分割成较小的分区可以改善表的维护、备份、恢复、事务及查询性能。
分区的优点: 1.增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用; 2.减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,矿能比整个大表修复花的时间更少; 3.维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多; 4.均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能; 5.改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快,在数据仓库的TP查询特别有用。 6.分区对用户透明,最终用户感觉不到分区的存在。
    在Oracle10g中,没有定义间隔分区,只能通过范围分区实现间隔分区功能,如果要实现自动创建分区,只能通过创建JOB或者scheduler来实现;而在11g中,Oracle直接提供了间隔分区功能,大大简化了间隔分区的实现。
    
    先介绍一下Oracle11g的间隔分区功能,主要通过INTERVAL关键字来实现,官方参考文档如下:
 

点击(此处)折叠或打开

  1. CREATE TABLE interval_sales
  2.     ( prod_id NUMBER(6)
  3.     , cust_id NUMBER
  4.     , time_id DATE
  5.     , channel_id CHAR(1)
  6.     , promo_id NUMBER(6)
  7.     , quantity_sold NUMBER(3)
  8.     , amount_sold NUMBER(10,2)
  9.     )
  10.   PARTITION BY RANGE (time_id)
  11.   INTERVAL(NUMTOYMINTERVAL(1, \'MONTH\'))
  12.     ( PARTITION p0 VALUES LESS THAN (TO_DATE(\'1-1-2008\', \'DD-MM-YYYY\')),
  13.       PARTITION p1 VALUES LESS THAN (TO_DATE(\'1-1-2009\', \'DD-MM-YYYY\')),
  14.       PARTITION p2 VALUES LESS THAN (TO_DATE(\'1-7-2009\', \'DD-MM-YYYY\')),
  15.       PARTITION p3 VALUES LESS THAN (TO_DATE(\'1-1-2010\', \'DD-MM-YYYY\')) )
    上述sql语句创建了4个不等区间的分区,分别是2008年1月1日之前的所有数据、08年到09年的所有数据、09年上半年的所有数据、 09年下半年的所有数据;同时,它也制定了在2010年1月1日之后,每个月单独创建一个分区。需要注意一点,间隔分区的键值只能是一个列,并且该列只能是Date类型或者number类型。
 
    下面看一下在Oracle10g下如何实现间隔分区功能。
 

点击(此处)折叠或打开

  1. SQL> create table HOEGH
  2.  (
  3. part_id integer primary key,
  4. part_date date,
  5. part_dec varchar2(100)
  6. )
  7. partition by range(part_date)
  8. (
  9. partition part_01 values less than(to_date(\'2015-01-01\',\'yyyy-mm-dd\')),
  10. partition part_02 values less than(to_date(\'2015-02-01\',\'yyyy-mm-dd\')) ,
  11.  partition part_03 values less than(to_date(\'2015-03-01\',\'yyyy-mm-dd\')) ,
  12.  partition part_04 values less than(to_date(\'2015-04-01\',\'yyyy-mm-dd\')) ,
  13.  );
  14. 表已创建。
    
    上述sql语句创建了4个不等区间的分区,分别是2015年1月1日之前的所有数据、15年1月的所有数据、15年2月
所有数据15年3月所有数据;如果需要创建之后的分区,需要通过alter table语句来实现。
 
    有以上的对比可以看出,Oracle11g自动创建间隔分区十分方便;而10g则需要跑脚本才能实现自动创建分区的功能。




 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30162081/viewspace-1572579/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30162081/viewspace-1572579/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值