Oracle分區(qū)表 Partition Table的創(chuàng)建及管理是怎么樣的,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
西秀ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
一、創(chuàng)建分區(qū)表
分區(qū)表分為四類:1、范圍分區(qū)表 2、列表分區(qū)表 3、哈希分區(qū)表 4、組合分區(qū)表
下面分別創(chuàng)建四類分區(qū)表。
1、范圍分區(qū)表
CREATE TABLE range_example( range_key_column DATE, DATA VARCHAR2(20), ID integer ) PARTITION BY RANGE(range_key_column) ( PARTITION part01 VALUES LESS THAN (TO_DATE('2008-07-1 00:00:00','yyyy-mm-dd hh34:mi:ss')) TABLESPACE tbs01, PARTITION part02 VALUES LESS THAN (TO_DATE('2008-08-1 00:00:00','yyyy-mm-dd hh34:mi:ss')) TABLESPACE tbs02, PARTITION part03 VALUES LESS THAN (TO_DATE('2008-09-1 00:00:00','yyyy-mm-dd hh34:mi:ss')) TABLESPACE tbs03 ); |
2、列表分區(qū)表
CREATE TABLE list_example( dname VARCHAR2(10), DATA VARCHAR2(20) )PARTITION BY LIST(dname) ( PARTITION part01 VALUES('ME','PE','QC','RD'), PARTITION part02 VALUES('SMT','SALE') ); |
3、哈希分區(qū)表
CREATE TABLE hash_example( hash_key_column DATE, DATA VARCHAR2(20) ) PARTITION BY HASH(hash_key_cloumn) ( PARTITION part01 , PARTITION part02 ); |
4、組合分區(qū)表
CREATE TABLE range_hash_example( range_column_key DATE, hash_column_key INT, DATA VARCHAR2(20) ) PARTITION BY RANGE(range_column_key) SUBPARTITION BY HASH(hash_column_key) SUBPARTITIONS 2 ( PARTITION part_1 VALUES LESS THAN (TO_DATE('2008-08-01','yyyy-mm-dd'))( SUBPARTITION part_1_sub_1, SUBPARTITION part_1_sub_2, SUBPARTITION part_1_sub_3 ), PARTITION part_2 VALUES LESS THAN (TO_DATE('2008-09-01','yyyy-mm-dd'))( SUBPARTITION part_2_sub_1, SUBPARTITION part_2_sub_2 ) ); |
--注 subpartitions 2 并不是指定subpartition的個數(shù)一定為2,實際上每個分區(qū)的子分區(qū)個數(shù)可以不同。subpartitions 關(guān)鍵字的作用到底是什么?如果不指定subpartition的具體明細(xì),則系統(tǒng)按照subpartitions的值指定subpartition的個數(shù)生成子分區(qū),名稱由系統(tǒng)定義 。
二、增加分區(qū)
-- range partitioned table |
注:hash partitioned table 新增partition時,現(xiàn)有表的中所有data都有重新計算hash值,然后重新分配到分區(qū)中。所以被重新分配的分區(qū)的 indexes需要rebuild 。
三、刪除分區(qū)
You can drop partitions from range, list, or composite range-list partitioned tables.
ALTER TABLE ... DROP PARTITION part_name; |
For hash-partitioned tables, or hash subpartitions of range-hash partitioned tables, you must perform. a coalesce operation instead.
-- 減少hash 分區(qū)的個數(shù),一次減少一個。不能指定減少partition的名稱。 ALTER TABLE hash_example COALESCE PARTITION ; --subpartition 的語法對于如下 ALTER TABLE divingMODIFYPARTITION us_locations COALESCE SUBPARTITION; |
四、 分區(qū)合并
1. 合并父分區(qū)
ALTER TABLE range_example MERGE PARTITIONS part01_1,part01_2 INTO PARTITION part01 UPDATE INDEXES; |
如果省略update indexes子句的話,必須重建受影響的分區(qū)的index 。 ALTER TABLE range_example MODIFY PARTITION part02 REBUILD UNUSABLE LOCAL INDEXES;
2. 合并子分區(qū)
ALTER TABLE composite_example MERGE SUBPARTITIONS part_1_sub_2,part_1_sub_3 INTO SUBPARTITION part_1_sub_2 UPDATE INDEXES; |
五、分割分區(qū) hash partitions or subpartitions不能分割。如果指定的分割分區(qū)包含任何的數(shù)據(jù)時,對應(yīng)的indexes可以被標(biāo)識為UNUSABLE 。如果是一般的Heap Table,新的分區(qū)indexes為UNUSABLE ,所有g(shù)loabl indexes被標(biāo)識為UNUSABLE 。如果是Index-organized table 新分區(qū)的indexes 為UNUSABLE,global indexes 仍然為USABLE。
1、range類型分區(qū)的分割
ALTER TABLE range_example SPLIT PARTITION part01 AT (TO_DATE('2008-06-01 00:00:00','yyyy-mm-dd hh34:mi:ss')) INTO ( PARTITION part01_1,PARTITION part01_2 ); |
一個分區(qū)一次性只能分割成兩個分區(qū),at關(guān)鍵字后面指定的值為第一個分區(qū)的range范圍,默認(rèn)為less than 。
2、list類型分區(qū)的分割
ALTER TABLE list_example SPLIT PARTITION part01 VALUES('ME','PE') INTO ( PARTITION part01_1, PARTITION part01_2 ); |
3、Range_Hash類型分區(qū)的分割 新分區(qū)會對原有分區(qū)的subpartition做rehash的動作。如果在分割是指定subpartition的個數(shù),則按新規(guī)則rehash subpartition,如果沒有指定則保留原有subpartition的個數(shù)不變。
ALTER TABLE range_hash_example SPLIT PARTITION part_1 AT (TO_DATE('2008-07-01 00:00:00','yyyy-mm-dd hh34:mi:ss')) INTO ( PARTITION part_1_1 SUBPARTITIONS 2 STORE IN (tbs01,tbs02), PARTITION part_1_2 ); |
subpartitions 2 -- 指定新分區(qū)的subpartition的個數(shù),store in 子句指定subpartition存儲的tablespace 。
六、Exchanging Partitions
可以將分區(qū)表轉(zhuǎn)換成非分區(qū)表,或者幾種不同分區(qū)表之間的轉(zhuǎn)換。
如下:
CREATE TABLE hash_part02 AS SELECT * FROM hash_example WHERE 1=2; ALTER TABLE hash_example EXCHANGE PARTITION part02 WITH TABLE hash_part02; |
這時,分區(qū)表hash_example中的part02分區(qū)的資料將被轉(zhuǎn)移到hash_part02這個非分區(qū)表中。
七、索引
在分區(qū)表上可以建立三種類型的索引:1、和普通表一樣的全局索引。2、全局分區(qū)索引。3、本地分區(qū)索引。
它們之間的區(qū)別如下圖示。
以表range_example為例。
1.建立普通的索引
create index com_index_range_example_id on range_example(id);
2.建立本地分區(qū)索引
create index local_index_range_example_id on range_example(id)local;
3.建立全局分區(qū)索引
create index gidx_range_exampel_id on range_example(id)
GLOBAL partition by range(id)
(
part_01 values less than(1000),
part_02 values less than(MAXVALUE)
);
對于分區(qū)索引的刪除,local index 不能指定分區(qū)名稱,單獨的刪除分區(qū)索引。local index 對應(yīng)的分區(qū)會伴隨著data分區(qū)的刪除而一起被刪除。
global partition index 可以指定分區(qū)名稱,刪除某一分區(qū)。但是有一點要注意,如果該分區(qū)不為空,則會導(dǎo)致更高一級的索引分區(qū)被置為UNUSABLE 。
ALTER INDEX gidx_range_exampel_id drop partition part_01 ; 此句將導(dǎo)致part_02 狀態(tài)為UNUSABLE 。
看完上述內(nèi)容,你們掌握Oracle分區(qū)表 Partition Table的創(chuàng)建及管理是怎么樣的的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當(dāng)前文章:Oracle分區(qū)表PartitionTable的創(chuàng)建及管理是怎么樣的
路徑分享:http://www.rwnh.cn/article32/jscssc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、網(wǎng)站營銷、定制開發(fā)、品牌網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)