談?wù)勗趺磳?shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)分區(qū)表 |
發(fā)布時(shí)間: 2012/8/21 16:57:15 |
Oracle數(shù)據(jù)庫(kù)分區(qū)是作為Oracle數(shù)據(jù)庫(kù)性能優(yōu)化的一種重要的手段和方法,做手頭的項(xiàng)目以前,只聆聽過分區(qū)的大名,感覺特神秘,看見某某高手在討論會(huì)上夸夸其談時(shí),真是罵自己學(xué)藝不精,最近作GPS方面的項(xiàng)目,處理的數(shù)據(jù)量達(dá)到了幾十GB,為了滿足系統(tǒng)的實(shí)時(shí)性要求,必須提高數(shù)據(jù)的查詢效率,這樣就必須通過分區(qū),以解燃眉之急! 先說(shuō)說(shuō)分區(qū)的好處吧! 1) 增強(qiáng)可用性:如果表的某個(gè)分區(qū)出現(xiàn)故障,表在其他分區(qū)的數(shù)據(jù)仍然可用; 2) 維護(hù)方便:如果表的某個(gè)分區(qū)出現(xiàn)故障,需要修復(fù)數(shù)據(jù),只修復(fù)該分區(qū)即可; 3) 均衡I/O:可以把不同的分區(qū)映射到磁盤以平衡I/O,改善整個(gè)系統(tǒng)性能; 4) 改善查詢性能:對(duì)分區(qū)對(duì)象的查詢可以僅搜索自己關(guān)心的分區(qū),提高檢索速度。 Oracle數(shù)據(jù)庫(kù)提供對(duì)表或索引的分區(qū)方法有三種: ü 范圍分區(qū) ü Hash分區(qū)(散列分區(qū)) ü 復(fù)合分區(qū) 一、范圍分區(qū)詳細(xì)說(shuō)明 范圍分區(qū)就是對(duì)數(shù)據(jù)表中的某個(gè)值的范圍進(jìn)行分區(qū),根據(jù)某個(gè)值的范圍,決定將該數(shù)據(jù)存儲(chǔ)在哪個(gè)分區(qū)上。如根據(jù)序號(hào)分區(qū),根據(jù)時(shí)間等來(lái)進(jìn)行分區(qū)。根據(jù)序號(hào),比如小于2000000的放在part01, 2000000~4000000的放在part02。。。 create table AAA space01\ space02\ space03為建立的三個(gè)表空間,相當(dāng)于把建立的一個(gè)大的表分在了3個(gè)不同的表空間的分區(qū)上了。 二、Hash分區(qū)(散列分區(qū))詳細(xì)說(shuō)明 散列分區(qū)為通過指定分區(qū)編號(hào)來(lái)均勻分布數(shù)據(jù)的一種分區(qū)類型,因?yàn)橥ㄟ^在I/O設(shè)備上進(jìn)行散列分區(qū),使得這些分區(qū)大小一致。也就是只命名分區(qū)名稱,這樣均勻進(jìn)行數(shù)據(jù)分布。 三、復(fù)合分區(qū)詳細(xì)說(shuō)明 有時(shí)候我們需要根據(jù)范圍分區(qū)后,每個(gè)分區(qū)內(nèi)的數(shù)據(jù)再散列地分布在幾個(gè)表空間中,這樣我們就要使用復(fù)合分區(qū)。復(fù)合分區(qū)是先使用范圍分區(qū),然后在每個(gè)分區(qū)內(nèi)再使用散列分區(qū)的一種分區(qū)方法。 partition by range(indate)subpartition by hash(id) 四、分區(qū)表操作 1、插入記錄:insert into AAA values(1 ,sysdate); 2、查詢分區(qū)表記錄:select * from AAA partition(part_01); 3、更新分區(qū)表的記錄:update AAA partition(part_01) t set indate=’’where id=1; 但是當(dāng)更新的時(shí)候指定了分區(qū),而根據(jù)查詢的記錄不在該分區(qū)中時(shí),將不會(huì)更新數(shù)據(jù) 4、刪除分區(qū)表記錄:delete from AAA partition(part_02) t where id=4; 如果指定了分區(qū),而條件中的數(shù)據(jù)又不在該分區(qū)中時(shí),將不會(huì)刪除任何數(shù)據(jù)。 5、增加一個(gè)分區(qū):alter table AAA add partition part_04 values less than(to_date(’2012-01-01’,’yyyy-mm-dd’)) tablespace dinya_spa ce03; 增加一個(gè)分區(qū)的時(shí)候,增加的分區(qū)的條件必須大于現(xiàn)有分區(qū)的最大值,否則系統(tǒng)將提示ORA-14074 partition bound must collate higher than that of the last partition 錯(cuò)誤。 6、合并一個(gè)分區(qū):alter table AAA merge partitions part_01,part_02 into partition part_02; ,如果在合并的時(shí)候把合并后的分區(qū)定為part_01的時(shí)候,系統(tǒng)將提示ORA-14275 cannot reuse lower-bound partition as resulting partition 錯(cuò)誤。 7、刪除分區(qū):alter table AAA drop partition part_01; 刪除分區(qū)表的一個(gè)分區(qū)后,查詢?cè)摫淼臄?shù)據(jù)時(shí)顯示,該分區(qū)中的數(shù)據(jù)已全部丟失,所以執(zhí)行刪除分區(qū)動(dòng)作時(shí)要慎重,確保先備份數(shù)據(jù)后再執(zhí)行,或?qū)⒎謪^(qū)合并。 五、建立索引 分區(qū)表和一般表一樣可以建立索引,分區(qū)表可以創(chuàng)建局部索引和全局索引。當(dāng)分區(qū)中出現(xiàn)許多事務(wù)并且要保證所有分區(qū)中的數(shù)據(jù)記錄的唯一性時(shí)采用全局索引。 1. 局部索引分區(qū)的建立:create index idx_t on AAA(id) 2. 全局索引建立時(shí)global 子句允許指定索引的范圍值,這個(gè)范圍值為索引字段的范圍值:create index idx_t on AAA(id) 當(dāng)然也可以不指定索引分區(qū)名直接對(duì)整個(gè)表建立索引: create index idx_t on AAA(id); 本文出自:億恩科技【www.riomediacenter.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |