分割槽表 總結
<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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SqlServer關於分割槽表的總結SQLServer
- oracle分割槽表和分割槽表exchangeOracle
- Hive中靜態分割槽和動態分割槽總結Hive
- oracle分割槽表和非分割槽表exchangeOracle
- Oracle Partition 分割槽詳細總結Oracle
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- PG的非分割槽表線上轉分割槽表
- 【MYSQL】 分割槽表MySql
- 非分割槽錶轉換成分割槽表
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 移動分割槽表和分割槽索引的表空間索引
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- MySQL 分割槽表探索MySql
- 分割槽表-實戰
- PostgreSQL11preview-分割槽表增強彙總SQLView
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- 【Linux】MBR磁碟分割槽表只能有四個分割槽?Linux
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- 分割槽表之自動增加分割槽(11G)
- SQL SERVER之分割槽表SQLServer
- ORACLE分割槽表梳理系列Oracle
- Spark操作Hive分割槽表SparkHive
- OceaBase 分割槽表建立技巧
- Mysql表分割槽實現MySql
- mysql 進行表分割槽MySql
- Mysql表分割槽實操MySql
- PostgreSQL:傳統分割槽表SQL
- PostgreSQL:內建分割槽表SQL
- oracle將表配置為分割槽表Oracle
- oracle 普通表-分割槽表改造流程Oracle