Oracle 分割槽相關解析 未完待續

2021-10-11 02:33:56 字數 4990 閱讀 2844

是乙個或多個資料檔案的集合,所有的資料物件都存放在指定的表空間中,但主要存放的是表, 所以稱作表空間。

當表中的資料量不斷增大,查詢資料的速度就會變慢,應用程式的效能就會下降,這時就應該考慮對錶進行分割槽。表進行分割槽後,邏輯上表仍然是一張完整的表,只是將表中的資料在物理上存放到多個表空間(物理檔案上),這樣查詢資料時,不至於每次都掃瞄整張表。

1. 什麼時候使用分割槽表(官方建議):

表的大小超過2gb。

表中包含歷史資料,新的資料被增加都新的分割槽中。

2. 表分割槽的優缺點

優點:改善查詢效能:對分割槽物件的查詢可以僅搜尋自己關心的分割槽,提高檢索速度。

增強可用性:如果表的某個分割槽出現故障,表在其他分割槽的資料仍然可用;

維護方便:如果表的某個分割槽出現故障,需要修復資料,只修復該分割槽即可;

均衡i/o:可以把不同的分割槽對映到磁碟以平衡i/o,改善整個系統效能。

缺點:3. 表分割槽的幾種型別及操作方法

3.1. 範圍分割槽(range):

範圍分割槽將資料基於範圍對映到每乙個分割槽,這個範圍是你在建立分割槽時指定的分割槽鍵決定的。這種分割槽方式是最為常用的,並且分割槽鍵經常採用日期。

當使用範圍分割槽時,請考慮以下幾個規則:

每乙個分割槽都必須有乙個values less then子句,它指定了乙個不包括在該分割槽中的上限值。分割槽鍵的任何值等於或者大於這個上限值的記錄都會被加入到下乙個高一些的分割槽中。

所有分割槽,除了第乙個,都會有乙個隱式的下限值,這個值就是此分割槽的前乙個分割槽的上限值。

在最高的分割槽中,maxvalue被定義。maxvalue代表了乙個不確定的值。這個值高於其它分割槽中的任何分割槽鍵的值,也可以理解為高於任何分割槽中指定的value less then的值,同時包括空值。

將每個分割槽儲存到單獨的表空間中,這樣資料檔案就可以跨越多個物理磁碟。

3.2. 列表分割槽(list):

list分割槽也需要指定列的值,其分割槽值必須明確指定,該分割槽列只能有乙個,不能像range或者hash分割槽那樣同時指定多個列做為分割槽依賴列,但它的單個分割槽對應值可以是多個。

在分割槽時必須確定分割槽列可能存在的值,一旦插入的列值不在分割槽範圍內,則插入/更新就會失敗,因此通常建議使用list分割槽時,要建立乙個default分割槽儲存那些不在指定範圍內的記錄,類似range分割槽中的maxvalue分割槽。

該分割槽的特點是某列的值只有幾個,基於這樣的特點我們可以採用列表分割槽。

partition part1 values (『value1』,『value2』) tablespace tablespace1,

partition part2 values (『value3』,『value4』) tablespace tablespace2,

partition partdefault values (default) tablespace tablespace3,

3.3. 雜湊分割槽(hash):

這類分割槽是在列值上使用雜湊演算法,以確定將行放入哪個分割槽中。當列的值沒有合適的條件時,建議使用雜湊分割槽。

雜湊分割槽為通過指定分割槽編號來均勻分布資料的一種分割槽型別,因為通過在i/o裝置上進行雜湊分割槽,使得這些分割槽大小一致。

hash分割槽最主要的機制是根據hash演算法來計算具體某條紀錄應該插入到哪個分割槽中,hash演算法中最重要的是hash函式,oracle中如果你要使用hash分割槽,只需指定分割槽的數量即可。建議分割槽的數量採用2的n次方,這樣可以使得各個分區間資料分布更加均勻。

對於那些無法有效劃分範圍的表,可以使用hash分割槽,這樣對於提高效能還是會有一定的幫助。hash分割槽會將表中的資料平均分配到你指定的幾個分割槽中,列所在分割槽是依據分割槽列的hash值自動分配,因此你並不能控制也不知道哪條記錄會被放到哪個分割槽中,hash分割槽也可以支援多個依賴列。

4. 組合分割槽(復合分割槽)

如果某錶按照某列分割槽之後,仍然較大,或者是一些其它的需求,還可以通過分區內再建子分割槽的方式將分割槽再分割槽,即組合分割槽的方式。

在10g中組合分割槽主要有兩種:range-hash,range-list。注意順序,根分割槽只能是range分割槽,子分割槽可以是hash分割槽或list分割槽。11g中又增加了range-range,list-range,list-list,list-hash,並且 11g裡面還支援interval分割槽和虛擬列分割槽。

4.1. 組合範圍列表分割槽(range+list):

這種分割槽是基於範圍分割槽和列表分割槽,表首先按某列進行範圍分割槽,然後再按某列進行列表分割槽,分割槽之中的分割槽被稱為子分割槽。

4.2. 組合列表雜湊分割槽(list+hash):

這種分割槽是基於列表分割槽和雜湊分割槽,表首先按某列進行列表分割槽,然後再按某列進行雜湊分割槽。

4.3. 組合列表雜湊表分割槽(list+list):

這種分割槽是基於列表分割槽和列表分割槽,表首先按某列進行列表分割槽,然後再按另一列進行列表分割槽。

1. 新增分割槽 add

(1)原分割槽裡邊界是maxvalue或者default。 這種情況下,我們需要把邊界分割槽drop掉,加上新分割槽後,在新增上新的分割槽。 或者採用split(range型別使用at,list使用values)對邊界分割槽進行拆分

-- 1 刪除後新增

-- 1.1. 刪除預設分割槽

alter

table custaddr drop

partition p_other;

-- 1.2. 新增新分割槽,default分割槽

alter

table custaddr add

partition t_list551 values

('551'

)tablespace test_ts15;

alter

table custaddr add

partition p_other values

(default

)tablespace test_ts15;

-- 2 使用split方式新增分割槽

alter

table custaddr split partition p_other values

('552'

)into

(partition t_list552 tablespace test_ts15,

partition p_other tablespace test_ts15)

;

(2)沒有邊界分割槽的。 這種情況下,直接新增分割槽就可以了。

-- 直接新增分割槽

alter

table test add

partition test_part4 values less than (

400000

);

-- 直接新增子分割槽

alter

table sales modify

partition p2 add subpartition p2sub3 values

('complete'

);

2. 刪除分割槽 drop
-- 刪除分割槽

alter

table sales drop

partition p2;

-- 刪除子分割槽

alter

table sales drop subpartition p2sub3;

3.截斷分割槽 truncate

截斷某個分割槽是指刪除某個分割槽中的資料,並不會刪除分割槽,也不會刪除其它分割槽中的資料。當表中即使只有乙個分割槽時,也可以截斷該分割槽。

-- 截斷分割槽

alter

table sales truncate

partition p2;

-- 截斷子分割槽

alter

table sales truncate subpartition p2sub2;

4 合併分割槽(merge)

相鄰的分割槽可以merge為乙個分割槽,新分割槽的下邊界為原來邊界值較低的分割槽,上邊界為原來邊界值較高的分割槽,原先的區域性索引相應也會合併,全域性索引會失效,需要rebuild。

alter

table sales merge partitions p1,p2 into

partition p2;

5 拆分分割槽(split)

拆分分割槽將乙個分割槽拆分兩個新分割槽,拆分後原來分割槽不再存在。注意不能對hash型別的分割槽進行拆分。

alter

table sales split partition p2 at (to_date(

'2016-06-01'

,'yyyy-mm-dd'))

into

(partition p3,

partition p4)

;

6 重新命名分割槽(rename)
alter

table sales rename

partition p3 to p13;

7 移動分割槽(move)
alter

table test move partition test_part1 tablespace test_ts15;

alter

table test move partition test_part1 tablespace test_ts01;

-- status欄位

select index_name,

status

from user_indexes where table_name=

'custaddr'

;

oracle分割槽表詳解

oracle表分割槽詳解

oracle分割槽相關操作

1 查詢指定表分割槽 select table name,partition name,high value,tablespace name from user tab partitions where table name table name 2 分割槽切分,之前存在被切分分割槽的中的資料,如果...

nandflash 分割槽相關

vivi 分割槽的內容一定要和核心分割槽一致!不然會導致掛載檔案系統或者其他失敗!1.vivi分割槽是在vivi燒寫到flash後執行命令 bon part 0 128k 192k 1216k 4288k 64656k這樣子來分割槽的。而不是在燒寫vivi的時候就已經分好的。2.vivi分割槽後需要...

Oracle未啟用Partitioning功能解決

本文針對oracle64位企業版,其他版本未做嘗試。1.使用sql plus的srvctl命令關閉資料庫 srvctl stop database d mydb2.win r開啟執行視窗,輸入servers.msc,開啟服務管理 停止oracleservicesid服務 3.執行以下命令 cd or...