Oracle 表分割槽

j04212發表於2014-02-14


檢視錶分割槽 user_tab_partitions


--範圍分割槽

JOHN@ ora10g> create table range_example
  2  ( range_key_column date not null,
  3    data varchar2(20)
  4  )
  5  partition by range (range_key_column)
  6  (partition part_1 values less than
  7     (to_date('01/01/2010','dd/mm/yyyy')),
  8   partition part_2 values less than
  9     (to_date('01/01/2011','dd/mm/yyyy'))
 10  );

JOHN@ ora10g> insert into range_example values(
  2  to_date('01/02/2010','dd/mm/yyyy'),
  3  'this is a test!');

JOHN@ ora10g> select * from range_example;

RANGE_KEY_CO DATA
------------ --------------------
01-FEB-10    this is a test!

JOHN@ ora10g> select * from range_example partition (part_1);

no rows selected

JOHN@ ora10g> select * from range_example partition (part_2);

RANGE_KEY_CO DATA
------------ --------------------
01-FEB-10    this is a test!

JOHN@ ora10g> select TABLE_NAME,  PARTITION_NAME from user_tab_partitions;
TABLE_NAME                     PARTITION_NAME
------------------------------ ------------------------------
RANGE_EXAMPLE                  PART_1
RANGE_EXAMPLE                  PART_2


對於超過範圍的可以用maxvalue,其他資料就會放到part_3分割槽

JOHN@ ora10g> create table range_example
  2  ( range_key_column date,
  3    data varchar2(20)
  4  )
  5  partition by range (range_key_column)
  6  ( partition part_1 values less than
  7      (to_date('01/01/2010', 'dd/mm/yyyy')),
  8    partition part_2 values less than
  9      (to_date('01/01/2011', 'dd/mm/yyyy')),
 10    partition part_3 values less than
 11      (maxvalue)
 12  );


--雜湊分割槽

JOHN@ ora10g> create table hash_example
  2  ( hash_key_column date,
  3    data varchar2(20)
  4  )
  5  partition by hash (hash_key_column)
  6  ( partition part_1 tablespace users,
  7    partition part_2 tablespace example
  8  );

雜湊分割槽數建議是2的冪,這樣資料的分佈會比較均勻。


--列表分割槽

JOHN@ ora10g> create table list_example
  2  ( state_cd varchar2(2),
  3    data varchar2(20)
  4  )
  5  partition by list(state_cd)
  6  ( partition part_1 values ('ME','NH','VT','MA'),
  7    partition part_2 values ('CT','RI','NY'),
  8    partition part_3 values (default)
  9  );
不符合分割槽1和分割槽2的資料會放到分割槽3。


--間隔分割槽(11g新特性)

JOHN@ ora10g> create table audit_trail
  2  ( ts timestamp,
  3    data varchar2(30)
  4  )
  5  partition by rang(ts)
  6  interval (numtoyminterval(1,'month'))
  7  store in (users, example)
  8  (partition p0 values less than (to_date('01-01-1900','dd-mm-yyyy'))
  9  );
會自動根據資料增加分割槽。


--引用分割槽(11g新特性)

--父表orders
JOHN@ ora10g> create table orders
  2  ( order# number primary key,
  3    order_date date,
  4    data varchar2(30)
  5  )
  6  enable row movement
  7  partition by range (order_date)
  8  ( partition part_2009 values less than (to_date('01-01-2010','dd-mm-yyyy')),
  9    partition part_2010 values less than (to_date('01-01-2011','dd-mm-yyyy'))
 10  );

--子表order_line_tiems
JOHN@ ora10g> create table order_line_items
  2  ( order# number,
  3    line# number,
  4    data varchar2(30),
  5    constraint c1_pk primary key(order#,line#),
  6    constraint c1_fk_p foreign key(order#) references orders
  7  )
  8  enable row movement
  9  partition by reference(c1_fk_p);

11gr2暫時不支援引用分割槽和間隔分割槽結合使用。


--組合分割槽

組合分割槽支援的版本
         區間  列表     雜湊
區間  11gr1  9ir2     9ir1
列表  11gr1  11gr1  11gr1
雜湊  11gr2  11gr2  11gr2
先橫向再縱向

JOHN@ ora10g> create table composite_example
  2  ( range_key_column date,
  3    hash_key_column int,
  4    data varchar2(20)
  5  )
  6  partition by range (range_key_column)
  7  subpartition by hash(hash_key_column) subpartition 2
  8  ( partition part_1
  9      values less than(to_date('01/01/2008','dd/mm/yyyy'))
 10      ( subpartition part_1_sub_1,
 11        sbupartition part_1_sub_2
 12      ),
 13    partition part_2
 14      values less than(to_date('01/01/2011','dd/mm/yyyy'))
 15      ( subpartition part_2_sub_1,
 16        subpartition part_2_sub_2
 17     )
 18  );


全域性索引可以分割槽也可以不分割槽。

全域性不分割槽的索引類似於未分割槽表的普通Oracle索引。
全域性分割槽索引的管理設計重要的維護工作。當一個分割槽表中有DDL活動時,其全域性索引都會被標記為無用,需要重建。

本地分割槽索引於全域性分割槽索引不同,前者與表分割槽有一對一的對應關係。可以建立本地分割槽索引來匹配分割槽甚至子分割槽。資料庫構造此索引以便與基表一起均勻分佈。任何時候,在修改基表分割槽時,索引分割槽都將自動維護。這是本地分割槽索引的最大優點。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27633655/viewspace-1081540/,如需轉載,請註明出處,否則將追究法律責任。

相關文章