[間隔分割槽]Oracle10g、11g建立間隔分割槽表

Hoegh發表於2015-04-13
    為了簡化資料庫大表的管理,例如在資料倉儲中一般都是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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章