分割槽表 總結
<p>
<span lang="EN-US">Oracle</span>提供了分割槽技術以支援<span lang="EN-US">VLDB(Very Large DataBase)</span>。分割槽表透過對分割槽列的判斷,把分割槽列不同的記錄,放到不同的分割槽中。分割槽完全對應用透明。
</p>
<p>
<span lang="EN-US">Oracle</span>的分割槽表可以包括多個分割槽,每個分割槽都是一個獨立的段(<span lang="EN-US">SEGMENT</span>),可以存放到不同的表空間中。查詢時可以透過查詢表來訪問各個分割槽中的資料,也可以透過在查詢時直接指定分割槽的方法來進行查詢。
</p>
<div>
<p style="background-color:#FFFFFF;color:#8A8679;font-family:'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53;font-size:16px;">
<span style="background-color:inherit;font-size:x-small;"></span>
</p>
<br />
</div>
<div>
分割槽的優點:
</div>
<p>
(1)由於將資料分散到各個分割槽中,減少了資料損壞的可能性;
</p>
<p>
(2)可以對單獨的分割槽進行備份和恢復;
</p>
<p>
(3)可以將分割槽對映到不同的物理磁碟上,來分散IO;
</p>
<p>
(4)提高可管理性、可用性和效能。
</p>
<div>
<p style="background-color:#FFFFFF;color:#444444;font-family:Arial;font-size:14px;">
<br />
</p>
<div style="background-color:#FFFFFF;font-family:微軟雅黑;font-size:14px;">
分割槽表和分割槽索引(About Partitioned Tables and Indexes)的種類<br style="background-color:inherit;" />
</div>
</div>
<b>Range分割槽:</b>
<div>
Range分割槽是應用範圍比較廣的表分割槽方式,它是以列的值的範圍來做為分割槽的劃分條件,將記錄存放到列值所在的range分割槽中。
</div>
<p>
<span lang="zh-CN"> INTERVAL分割槽是Oracle11g新增的特性,它是針對</span><span lang="en-US">Range</span><span lang="zh-CN">型別分割槽的一種功能擴充。對連續資料型別的</span><span lang="en-US">Range</span><span lang="zh-CN">分割槽,如果插入的新資料值與當前分割槽均不匹配,</span><span lang="en-US">Interval-Partition</span><span lang="zh-CN">特性可以實現自動的分割槽建立。</span>
</p>
<div>
<p>
<b>Hash分割槽:</b>
</p>
<p>
對於那些無法有效劃分範圍的表,可以使用hash分割槽,這樣對於提高效能還是會有一定的幫助。hash分割槽會將表中的資料平均分配到你指定的幾個分割槽中,列所在分割槽是依據分割槽列的hash值自動分配,因此你並不能控制也不知道哪條記錄會被放到哪個分割槽中,hash分割槽也可以支援多個依賴列。
</p>
<p>
<br />
</p>
<p style="background-color:#FFFFFF;color:#444444;font-family:Arial;font-size:14px;">
<br />
</p>
<p>
<br />
</p>
</div>
<p>
<b>List分割槽:</b>
</p>
<p>
List分割槽也需要指定列的值,其分割槽值必須明確指定,該分割槽列只能有一個,不能像range或者hash分割槽那樣同時指定多個列做為分割槽依賴列,但它的單個分割槽對應值可以是多個。在分割槽時必須確定分割槽列可能存在的值,一旦插入的列值不在分割槽範圍內,則插入/更新就會失敗,因此通常建議使用list分割槽時,要建立一個default分割槽儲存那些不在指定範圍內的記錄,類似range分割槽中的maxvalue分割槽。
</p>
<p>
<b>組合分割槽:</b>
</p>
<p>
如果某表按照某列分割槽之後,仍然較大,或者是一些其它的需求,還可以透過分割槽內再建子分割槽的方式將分割槽再分割槽,即組合分割槽的方式。組合分割槽呢在10g中有兩種:range-hash,range-list。注意順序,根分割槽只能是range分割槽,子分割槽可以是hash分割槽或list分割槽。
</p>
<p>
<br />
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
<br />
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
<b style="color:#000000;font-family:微軟雅黑;font-size:14px;">Range示例:</b>
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
<b style="color:#000000;font-family:微軟雅黑;font-size:14px;">建立range分割槽表:</b>
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
create table range_tab (id varchar(100),my_date date)
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
partition by range(my_date)
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
(
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
partition p1 values less than(to_date('2015-10-1', 'yyyy-mm-dd')) tablespace test,
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
partition p2 values less than(to_date('2015-11-1', 'yyyy-mm-dd')) tablespace test,
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
partition p3 values less than(to_date('2015-12-1', 'yyyy-mm-dd')) tablespace test,
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
partition p4 values less than(maxvalue)
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
)
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
<br />
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
select * from user_part_tables;
</p>
<p style="background-color:#FFFFFF;color:#333333;font-family:Arial;font-size:12pt;">
select * from user_tab_partitions;
</p>
<div>
<br />
</div>
<div>
<b>新增range分割槽</b>
</div>
1、原分割槽裡邊界是maxvalue或者default。這種情況下,需要把邊界分割槽drop掉,加上新分割槽後,在新增上新的分割槽。 或者採用split,對邊界分割槽進行拆分。
<div>
<div>
alter table range_tab add partition p5 values less than(to_date('2016-01-01', 'yyyy-mm-dd')) tablespace test ;
</div>
<div>
ERROR at line 1:
</div>
<div>
ORA-14074: partition bound must collate higher than that of the last partition
</div>
<div>
<br />
</div>
<div>
alter table range_tab split partition <span style="color:#ff0000;">p4</span> at(to_date('2016-02-01', 'yyyy-mm-dd'))
</div>
<div>
into (partition p5 tablespace fog,partition <span style="color:#ff0000;">p4 </span>tablespace fog)
</div>
<div>
2、原分割槽裡邊界沒有maxvalue或者default。直接新增分割槽即可
</div>
<div>
alter table range_tab add partition p5 values less than(to_date('2016-01-01', 'yyyy-mm-dd')) tablespace test ;<br style="background-color:inherit;" />
</div>
<div>
<br style="background-color:inherit;" />
</div>
<div>
<b>刪除range分割槽</b>
</div>
<div>
alter table range_tab drop partition p5;
</div>
<div>
<br />
</div>
<div>
<b>將range分割槽替換成interval型別的range分割槽</b>
</div>
<div>
原分割槽裡邊界是maxvalue或者default。需要刪除該分割槽。<br />
</div>
<div>
alter table range_tab set interval(numtoyminterval(1,'month'));
</div>
<div>
將interval分割槽設定成手動分割槽
</div>
<div>
alter table range_tab set interval();<br style="background-color:inherit;" />
</div>
<p>
<br />
</p>
<p>
<br />
</p>
<p style="background-color:#FFFFFF;color:#444444;font-family:Arial;font-size:14px;">
<br />
</p>
<div>
<br />
</div>
<div>
<b>新增range分割槽索引</b>
</div>
<div>
<b>global型別的,維護教麻煩,建議使用local型別的</b>
</div>
<div>
create index range_tab_id_index1 on range_tab(my_date)
</div>
<div>
global partition by range(my_date)(
</div>
<div>
partition p1 values less than(to_date('2015-10-1', 'yyyy-mm-dd')) tablespace test,
</div>
<div>
partition p2 values less than(to_date('2015-11-1', 'yyyy-mm-dd')) tablespace test,
</div>
<div>
partition p3 values less than(to_date('2015-12-1', 'yyyy-mm-dd')) tablespace test,
</div>
<div>
partition p4 values less than(to_date('2016-01-1', 'yyyy-mm-dd')) tablespace test,
</div>
<div>
partition p5 values less than(maxvalue) tablespace test
</div>
<div>
)
</div>
<div>
create index range_tab_id_index1 on range_tab(id,my_date) local;
</div>
<div>
local索引也可以知道分割槽名和對應的表空間名,但是要注意分割槽個數必須與表的分割槽個數想一致
</div>
<div>
create index range_tab_id_index on range_tab(id,my_date) local
</div>
<div>
(
</div>
<div>
partition p1 tablespace test,
</div>
<div>
partition p2 tablespace test,
</div>
<div>
partition p3 tablespace test,
</div>
<div>
partition p4 tablespace test,
</div>
<div>
partition p5 tablespace test,
</div>
<div>
partition p6 tablespace test,
</div>
<div>
partition p7 tablespace test,
</div>
<div>
partition p8 tablespace test
</div>
<div>
)
</div>
<div>
有關分割槽索引檢視
</div>
<div>
<p style="font-family:Arial;font-size:12pt;color:#333333;">
select * from user_part_indexes;
</p>
<p style="font-family:Arial;font-size:12pt;color:#333333;">
select * from user_ind_partitions;
</p>
<p style="font-family:Arial;font-size:12pt;color:#333333;">
<br />
</p>
<p style="font-family:Arial;font-size:12pt;color:#333333;">
<b style="font-family:微軟雅黑;font-size:14px;line-height:1.5;">hash分割槽</b>
</p>
<p style="color:#333333;">
<b style="background-color:inherit;">建立hash分割槽</b>
</p>
</div>
</div>
<p>
create table hash_tab (id varchar(20),hash_value varchar2(50))
</p>
<p>
partition by hash(id)(
</p>
<p>
partition p1 tablespace test,
</p>
<p>
partition p2 tablespace test,
</p>
<p>
partition p3 tablespace test);
</p>
<div>
<p style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:14px;">
<br />
</p>
需要注意的是hash分割槽不存在split和drop操作,只能add分割槽,資料在各個分割槽的分佈情況並不由我們控制,而是透過oracle中的hash函式來操作的,所以我們不能顯示的指定某一個分割槽進行分裂。
</div>
<div>
<div>
</div>
<div>
alter table hash_tab add partition p4 tablespace test;
</div>
<div>
<br style="background-color:inherit;" />
</div>
<div>
建立global型別的hash索引
</div>
<div>
create index hash_tab_id_index on hash_tab(id)
</div>
<div>
global partition by hash(id)(
</div>
<div>
partition p1 tablespace test,
</div>
<div>
partition p2 tablespace test,
</div>
<div>
partition p3 tablespace test
</div>
<div>
)
</div>
<div>
<br style="background-color:inherit;" />
</div>
<div>
建立local型別的hash索引
</div>
<div>
create index hash_tab_id_index on hash_tab(id) local;
</div>
<div>
<br />
</div>
<div>
<b style="background-color:inherit;">list分割槽</b>
</div>
<div>
<b style="background-color:inherit;">建立list分割槽表</b>
</div>
<div>
<b style="background-color:inherit;"></b>
</div>
</div>
<div>
create table list_tab(id varchar2(20),list_data varchar2(50))
</div>
<div>
partition by list(id)(
</div>
<div>
partition p1 values('001'),
</div>
<div>
partition p2 values('002'),
</div>
<div>
partition p3 values('003'),
</div>
<div>
partition p4 values(default)
</div>
<div>
)
</div>
<div>
<div>
<p style="background-color:inherit;">
<br />
</p>
拆分一個list分割槽
</div>
<div>
alter table list_tab split partition p4 values ('004')
</div>
<div>
into (partition p5 tablespace test,partition p4 tablespace test);
</div>
<div>
刪除一個list分割槽
</div>
<div>
alter table list_tab drop partition p5;
</div>
<div>
新增一個list分割槽(分割槽裡邊界不能有maxvalue或者default)
</div>
<div>
alter table list_tab add partition p5 values('008');
</div>
<div>
<br style="background-color:inherit;" />
</div>
<div>
<b style="background-color:inherit;"></b>
</div>
</div>
<b>組合分割槽:</b>
<div>
如果某表按照某列分割槽之後,仍然較大,或者是一些其它的需求,還可以透過分割槽內再建子分割槽的方式將分割槽再分割槽,即組合分割槽的方式。<br />
</div>
組合分割槽主要有兩種:range-hash,range-list。
<div>
<br />
</div>
<div>
<b style="background-color:inherit;">range-hash</b><br />
</div>
<div>
create table range_hash_tab
</div>
<div>
(
</div>
<div>
id varchar2(20),
</div>
<div>
t_date date
</div>
<div>
)
</div>
<div>
partition by range(t_date) subpartition by hash(id)
</div>
<div>
subpartition template
</div>
<div>
(
</div>
<div>
subpartition sub_p1 tablespace test,
</div>
<div>
subpartition sub_p2 tablespace test,
</div>
<div>
subpartition sub_p3 tablespace test
</div>
<div>
)
</div>
<div>
(
</div>
<div>
partition p01 values less than(to_date('2015-01-01','yyyy-mm-dd')),
</div>
<div>
partition p02 values less than(to_date('2016-01-01','yyyy-mm-dd')),
</div>
<div>
partition p03 values less than(maxvalue)
</div>
<div>
);
</div>
<div>
<div>
或者
</div>
<div>
create table range_hash_tab
</div>
<div>
(
</div>
<div>
id varchar2(20),
</div>
<div>
t_date date
</div>
<div>
)
</div>
<div>
partition by range(t_date) subpartition by hash(id)
</div>
<div>
subpartition template
</div>
<div>
(
</div>
<div>
subpartition sub_p1 tablespace test,
</div>
<div>
subpartition sub_p2 tablespace test,
</div>
<div>
subpartition sub_p3 tablespace test
</div>
<div>
)
</div>
<div>
(
</div>
<div>
partition p01 values less than(to_date('2015-01-01','yyyy-mm-dd')),
</div>
<div>
partition p02 values less than(to_date('2016-01-01','yyyy-mm-dd')),
</div>
<div>
partition p03 values less than(maxvalue)
</div>
<div>
);
</div>
<p>
<br />
</p>
<div>
<p>
<br />
</p>
<p style="background-color:#FFFFFF;color:#444444;font-family:Arial;font-size:14px;">
<br />
</p>
<br />
<p>
<br />
</p>
<div>
<b style="background-color:inherit;">range-list</b>
</div>
<div>
create table range_list_tab
</div>
<div>
(
</div>
<div>
id varchar2(20),
</div>
<div>
t_date date
</div>
<div>
)
</div>
<div>
partition by range(t_date) subpartition by list(id)
</div>
<div>
(partition p01 values less than(to_date('2015-01-01','yyyy-mm-dd'))
</div>
<div>
(
</div>
<div>
subpartition p01_sub01 values('001','002'),
</div>
<div>
subpartition p01_sub02 values('003','004'),
</div>
<div>
subpartition p01_sub03 values('005','006'),
</div>
<div>
subpartition p01_sub04 values(default)
</div>
<div>
),
</div>
<div>
partition p02 values less than(to_date('2015-02-01','yyyy-mm-dd'))
</div>
<div>
(
</div>
<div>
subpartition p02_sub01 values('001','002'),
</div>
<div>
subpartition p02_sub02 values('003','004'),
</div>
<div>
subpartition p02_sub03 values('005','006'),
</div>
<div>
subpartition p02_sub04 values(default)
</div>
<div>
),
</div>
<div>
partition p03 values less than(to_date('2015-03-01','yyyy-mm-dd'))
</div>
<div>
(
</div>
<div>
subpartition p03_sub01 values('001','002'),
</div>
<div>
subpartition p03_sub02 values('003','004'),
</div>
<div>
subpartition p03_sub03 values('005','006'),
</div>
<div>
subpartition p03_sub04 values(default)
</div>
<div>
<span style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;background-color:#FFFFFF;">));</span><br style="background-color:#FFFFFF;font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;" />
</div>
</div>
</div>
<div>
<span style="font-family:微軟雅黑;font-size:14px;line-height:21px;white-space:normal;background-color:#FFFFFF;"><br />
</span>
</div>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30496894/viewspace-1815863/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分割槽表總結
- 表分割槽總結
- oracle 分割槽表總結Oracle
- Oracle 分割槽表 總結Oracle
- oracle分割槽表總結(轉)Oracle
- 分割槽表、分割槽索引和全域性索引部分總結索引
- SqlServer關於分割槽表的總結SQLServer
- Oracle分割槽之五:建立分割槽索引總結Oracle索引
- 關於修改分割槽表的問題總結
- 轉個分割槽表Local索引Rebuild的總結索引Rebuild
- oracle的表空間、分割槽表、以及索引的總結Oracle索引
- oracle分割槽表和分割槽表exchangeOracle
- mysql分割槽表小結2MySql
- Hive中靜態分割槽和動態分割槽總結Hive
- MySQL 分割槽介紹總結MySql
- 關於oracle的表空間,分割槽表,以及索引的總結Oracle索引
- 全面學習分割槽表及分割槽索引(13)--分隔表分割槽索引
- oracle分割槽表和非分割槽表exchangeOracle
- 《RHEL6硬碟的分割槽和swap分割槽管理》——硬碟分割槽的大總結硬碟
- Oracle分割槽表及分割槽索引Oracle索引
- INTERVAL分割槽表鎖分割槽操作
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引
- 全面學習分割槽表及分割槽索引(11)--合併表分割槽索引
- 全面學習分割槽表及分割槽索引(12)--修改list表分割槽索引
- 學習筆記】分割槽表和分割槽索引——新增表分割槽(二)筆記索引
- mysql之分割槽表小結1MySql
- Oracle Partition 分割槽詳細總結Oracle
- 關於oracle的表空間,分割槽表,以及索引的總結(轉)Oracle索引
- 關於oracle的表空間,分割槽表,以及索引的總結 -- 轉Oracle索引
- 如何查詢分割槽表的分割槽及子分割槽
- 關於分割槽表Local索引Rebuild的一些總結索引Rebuild
- 使用split對分割槽表再分割槽
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- rebuild分割槽表分割槽索引的方法Rebuild索引
- 分割槽表及分割槽索引建立示例索引
- 全面學習分割槽表及分割槽索引(10)--交換分割槽索引
- PLSQL根據分割槽表的分割槽名批次truncate分割槽SQL
- 全面學習分割槽表及分割槽索引(8)--增加和收縮表分割槽索引