oracle interval-partition 解決range分區大難題

來源:互聯網
上載者:User

標籤:

部落格《oracle分區》中講了oracle的幾種分區,並且對於oracle的典型分區如Range分區和List分區給了樣本。

 

在實際運用Range分區時,遇到了這樣的難題:

createtableTMP_LXQ_1

(

 PROPOSALNO             VARCHAR2(22),

 STARTDATE              DATE

)

partitionbyrange(STARTDATE) (

partitionpart_t01values less than(to_date(‘2008-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t02values less than(to_date(‘2009-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t03values less than(to_date(‘2010-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t04values less than(to_date(‘2011-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t05values less than(to_date(‘2012-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t06values less than(to_date(‘2013-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t07values less than(maxvalue)

);

本例中的時間只是到了2013年,然後2013年之後的時間完全放入到了maxvalue中,這確實也是一種解決辦法,即有除去2008-2013年的資料時,資料庫不會報錯。但是這樣就改變了我們分區的初衷,分區是想讓各個部分的資料均衡,以加快查詢。

在oracle11g出現之前,實際工作中經常會遇到這種情況,而處理這種情況,通常是由DBA或者開發人員手動進行分區或者直接定義maxvalue。

Oracle 11g的新增特性Interval分區可以解決這個問題,下面介紹一下Interval分區。

 

一、interval分區

INTERVAL分區是Oracle11g新增的特性,它是針對Range類型分區的一種功能拓展。對連續資料類型的Range分區,如果插入的新資料值與當前分區均不匹配,Interval-Partition特性可以實現自動的分區建立。

樣本:

createtable TMP_LXQ_1

(

proposalnovarchar2(22),

startdatedate

)

partitionby range(STARTDATE)

interval(numtoyminterval(1,‘year‘))(

partitionpart_t01 values less than(to_date(‘2008-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t02 values less than(to_date(‘2009-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t03 values less than(to_date(‘2010-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t04 values less than(to_date(‘2011-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t05 values less than(to_date(‘2012-01-01‘,‘yyyy-mm-dd‘)) ,

partitionpart_t06 values less than(to_date(‘2013-01-01‘,‘yyyy-mm-dd‘))

);

 

如果插入2014年的值,系統會自動的添加一個分區,分區範圍為2014-01-01到2014-12-31日。

 

二、interval分區和range分區的轉換

ALTERTABLE TMP_LXQ_1 SET INTERVAL (numtoyminterval(1,‘year‘));

對於INTERVAL分區表,新增的超過分區上限的資料會自動導致對應的INTERVAL分區被建立。

同樣INTERVAL分區表可以方便的轉化為RANGE分區表,只需要不輸入INTERVAL的值即可:

ALTER TABLETMP_LXQ_1 SET INTERVAL ();

 

三、interval分區的特點

1.由range分區派生而來

2.以定長寬度建立分區(比如年、月、具體的數字(比如100、500等))

3.分區欄位必須是number或date類型

4.必須至少指定一個range分區(永久分區)

5.當有記錄插入時,系統根據需要自動建立新的分區和本地索引

6.已有的定界分割可被轉換成間隔分區(通過ALTER TABLE SET INTERVAL選項完成)

7.IntervalPartitioning不支援支援索引組織表

8.在Interval Partitioning表上不能建立domain index

 

四、interval分區問題

在oracle自動建立分區的時候,系統會預設指定一個分區名,系統預設建立的分區名字與我們的分區命名規範會有一定的差距,這個問題暫時還不知道有什麼解決方案。

oracle interval-partition 解決range分區大難題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.