2010-10-25

Oracle11g新特性_分区表

我从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.系统分区

  系统在插入数据时,自动指定数据的分区