我从Oracle 数据库 11g: 面向 DBA 和开发人员的重要新特性
http://www.oracle.com/technology/global/cn/pub/articles/oracle-database-11g-top-features/index.html
需要详细信息请猛击上方链接或者查阅相关文档。
1.分区表
a.间隔分区表
创建的时候指定一个基本分区和间隔,插入数据时会自动生成其他的分区;
这个感觉比较有用,咱们有很多按照天进行分区的表,用这个功能的话可以减少分区的
维护工作量;
create table sales6
(
sales_id number,
sales_dt date
)
partition by range (sales_dt)
interval (numtoyminterval(1,'MONTH'))
(
partition p0701 values less than (to_date('2007-02-01','yyyy-mm-dd'))
);
注意子句:interval 后面跟着时间间隔。您在此处指示 Oracle 为每个月份创建一个时间间隔。您已经为 2007 年 1 月的数据创建了名为 p0701 的初始分区。现在,假设您插入了一条包括 2007 年 6 月数据的记录:
SQL> insert into sales6 values (1,'01-jun-07');
1 row created.
Oracle 不会返回错误,而是成功执行该语句。那么这条记录将转向何处?p0701 分区不能包括该记录,我们没有为 2007 年 6 月定义分区。但此时,如果您检查该表的分区:
SQL> select partition_name, high_value
2 from user_tab_partitions
3 where table_name = 'SALES6';
PARTITION_NAME HIGH_VALUE
--------------- ----------------------------------------------------------------
P0701 TO_DATE(' 2007-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_C
ALENDAR=GREGORIA
SYS_P41 TO_DATE(' 2007-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_C
ALENDAR=GREGORIA
注意名为 SYS_P1、高值为 2007 年 7 月 1 日的分区,它最多可以容纳到 6 月底的数据。该分区是由 Oracle 动态创建的,并具有一个系统生成的名称。
现在,假设您输入一个小于最高值的值,如 2007 年 5 月 1 日。理想情况下,它应该具有自己的分区,因为您的分区时间间隔是一个月。
b.REF分区
这个分区方案假设关联表能从相同的分区策略中受益,子表通过
PK-FK(主键-外键)关系继承主表的策略,它不需要分区键存储在子表中,
通过PARTITION BY REFERENCE关键字指定,子表继承主表的分区策略。
c.混合分区
可用的混合分区类型:
范围-哈希,范围-列表,范围-范围,列表-范围,列表-列表,列表-哈希
d.系统分区
系统在插入数据时,自动指定数据的分区