一. 分區表理論知識
Oracle提供了分區技術以支援VLDB(Very Large DataBase)。分區表通過對分區列的判斷,把分區列不同的記錄,放到不同的分區中。分區完全對應用透明。
Oracle的分區表可以包括多個分區,每個分區都是一個獨立的段(SEGMENT),可以存放到不同的表空間中。查詢時可以通過查詢表來通路各個分區中的資料,也可以通過在查詢時直接指定分區的方法來進行查詢。
分區提供以下優點:
(1)由于将資料分散到各個分區中,減少了資料損壞的可能性;
(2)可以對單獨的分區進行備份和恢複;
(3)可以将分區映射到不同的實體磁盤上,來分散IO;
(4)提高可管理性、可用性和性能。
Oracle 10g提供了以下幾種分區類型:
(1)範圍分區(range);
(2)哈希分區(hash);
(3)清單分區(list);
(4)範圍-哈希複合分區(range-hash);
(5)範圍-清單複合分區(range-list)。
Range分區:
Range分區是應用範圍比較廣的表分區方式,它是以列的值的範圍來做為分區的劃分條件,将記錄存放到列值所在的range分區中。
如按照時間劃分,2010年1月的資料放到a分區,2月的資料放到b分區,在建立的時候,需要指定基于的列,以及分區的範圍值。
在按時間分區時,如果某些記錄暫無法預測範圍,可以建立maxvalue分區,所有不在指定範圍内的記錄都會被存儲到maxvalue所在分區中。例如:
create table pdba (id number, time date) partition by range (time)
(
partition p1 values less than (to_date('2010-10-1', 'yyyy-mm-dd')),
partition p2 values less than (to_date('2010-11-1', 'yyyy-mm-dd')),
partition p3 values less than (to_date('2010-12-1', 'yyyy-mm-dd')),
partition p4 values less than (maxvalue)
)
Hash分區:
對于那些無法有效劃分範圍的表,可以使用hash分區,這樣對于提高性能還是會有一定的幫助。hash分區會将表中的資料平均配置設定到你指定的幾個分區中,列所在分區是依據分區列的hash值自動配置設定,是以你并不能控制也不知道哪條記錄會被放到哪個分區中,hash分區也可以支援多個依賴列。例如:
create table test
(
transaction_id number primary key,
item_id number(8) not null
)
partition by hash(transaction_id)
(
partition part_01 tablespace tablespace01,
partition part_02 tablespace tablespace02,
partition part_03 tablespace tablespace03
);
在這裡,我們指定了每個分區的表空間。
List分區:
List分區也需要指定列的值,其分區值必須明确指定,該分區列隻能有一個,不能像range或者hash分區那樣同時指定多個列做為分區依賴列,但它的單個分區對應值可以是多個。
在分區時必須确定分區列可能存在的值,一旦插入的列值不在分區範圍内,則插入/更新就會失敗,是以通常建議使用list分區時,要建立一個default分區存儲那些不在指定範圍内的記錄,類似range分區中的maxvalue分區。
在根據某字段,如城市代碼分區時,可以指定default,把非分區規則的資料,全部放到這個default分區。例如:
create table custaddr
(
id varchar2(15 byte) not null,
areacode varchar2(4 byte)
)
partition by list (areacode)
( partition t_list025 values ('025'),
partition t_list372 values ('372') ,
partition t_list510 values ('510'),
partition p_other values (default)
)