为了简化数据库大表的管理,例如在数据仓库中一般都是TB级的数量级.ORACLE8以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限膨胀的大表,组大表在物理一级的可管理性.将大表分割成较小的分区可以改善表的维护、备份、恢复、事务及查询性能。
分区的优点: 1.增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用; 2.减少关闭时间:如果系统故障只影响表的一部份分区,那么只有这部份分区需要修复,矿能比整个大表修复花的时间更少; 3.维护轻松:如果需要得建表,独产管理每个公区比管理单个大表要轻松得多; 4.均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能; 5.改善性能:对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快,在数据仓库的TP查询特别有用。 6.分区对用户透明,最终用户感觉不到分区的存在。
在Oracle10g中,没有定义间隔分区,只能通过范围分区实现间隔分区功能,如果要实现自动创建分区,只能通过创建JOB或者scheduler来实现;而在11g中,Oracle直接提供了间隔分区功能,大大简化了间隔分区的实现。
先介绍一下Oracle11g的间隔分区功能,主要通过INTERVAL关键字来实现,官方参考文档如下:
点击(此处)折叠或打开
- CREATE TABLE interval_sales
- ( prod_id NUMBER(6)
- , cust_id NUMBER
- , time_id DATE
- , channel_id CHAR(1)
- , promo_id NUMBER(6)
- , quantity_sold NUMBER(3)
- , amount_sold NUMBER(10,2)
- )
- PARTITION BY RANGE (time_id)
- INTERVAL(NUMTOYMINTERVAL(1, \'MONTH\'))
- ( PARTITION p0 VALUES LESS THAN (TO_DATE(\'1-1-2008\', \'DD-MM-YYYY\')),
- PARTITION p1 VALUES LESS THAN (TO_DATE(\'1-1-2009\', \'DD-MM-YYYY\')),
- PARTITION p2 VALUES LESS THAN (TO_DATE(\'1-7-2009\', \'DD-MM-YYYY\')),
- PARTITION p3 VALUES LESS THAN (TO_DATE(\'1-1-2010\', \'DD-MM-YYYY\')) )
下面看一下在Oracle10g下如何实现间隔分区功能。
点击(此处)折叠或打开
- SQL> create table HOEGH
- (
- part_id integer primary key,
- part_date date,
- part_dec varchar2(100)
- )
- partition by range(part_date)
- (
- partition part_01 values less than(to_date(\'2015-01-01\',\'yyyy-mm-dd\')),
- partition part_02 values less than(to_date(\'2015-02-01\',\'yyyy-mm-dd\')) ,
- partition part_03 values less than(to_date(\'2015-03-01\',\'yyyy-mm-dd\')) ,
- partition part_04 values less than(to_date(\'2015-04-01\',\'yyyy-mm-dd\')) ,
- );
- 表已创建。
上述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/