分區的操作類型

來源:互聯網
上載者:User

一、分區的定義:

分區表是將大表的資料分成許多小的子集,而這些小的子集便稱為分區。

二、分區的優點:    

   1 、增強可用性:如果表的一個分區由於系統故障而不能使用,表的其餘好的分區仍然可以使用;    

   2 、減少關閉時間:如果系統故障隻影響表的一部分分區,那麼只有這部分分區需要修複,故能比整個大表修複花的時間更少;    

   3 、維護輕鬆:如果需要重建表,獨立管理每個分區比管理單個大表要輕鬆得多;    

   4 、均衡I/O:可以把表的不同分區分配到不同的磁碟來平衡I/O改善效能;    

   5 、改善效能:對大表的查詢、增加、修改等操作可以分解到表的不同分區來並存執行,可使運行速度更快;    

   6 、分區對使用者透明,終端使用者感覺不到分區的存在。    

 三、分區的管理:  分區的很多操作都會導致索引的失效,需要重建索引。不過如果帶上update indexes 可以避免。  

   1 、分區表一共分為三類即range、list、hash,而各自的建立語句如下:  

--range分區 

CREATE TABLE p_range   

(sale_date DATE NOT NULL )   

PARTITION BY RANGE (sale_date)   

(PARTITION p1 VALUES LESS THAN (TO_DATE('1999-04-01','YYYY-MM-DD'))   TABLESPACE system, 

PARTITION p2  VALUES LESS THAN (TO_DATE('1999-07-01','YYYY-MM-DD')) TABLESPACE system, 

PARTITION pmax VALUES LESS THAN (maxvalue) TABLESPACE system);   

--list分區 

CREATE TABLE p_list 

(sale_date varchar2(10) NOT NULL )   PARTITION BY list (sale_date)   

(PARTITION p1 VALUES ('20121111')   TABLESPACE system,   

PARTITION p2 VALUES ('20121112') TABLESPACE system, 

partition pdefault values (default) TABLESPACE system);   

--hash分區 

CREATE TABLE p_hash  

(sale_date DATE NOT NULL )   PARTITION BY hash (sale_date)  

 (PARTITION p1 TABLESPACE system,   

PARTITION p2 TABLESPACE system,  

 PARTITION p3 TABLESPACE system); 

--複合分區 

CREATE TABLE p_box (i NUMBER, j NUMBER)     

PARTITION BY RANGE(j)      

SUBPARTITION BY HASH(i) 

(PARTITION p1 VALUES LESS THAN (10)             SUBPARTITION t2_pls1             SUBPARTITION t2_pls2, 

         PARTITION p2 VALUES LESS THAN (20)             SUBPARTITION t2_p2s1             SUBPARTITION t2_p2s2)); 

從上面的執行個體看出,我們介紹了一種複合索引,而複合索引在ORACLE10G 中僅限於range-hash和range-  list兩中複合分區,但是到11G中,ORACLE邊在其中加入了四種新的組合,充分發揮了複合索引的作用:range-range、list-range、list-hash、list-list。

 2 、如何增加分區(ADD):    

如果list分區有default或者range分區有maxvalue,則不能進行add partition操作 ;add partition的值必須大於所有分區的值。。  

alter table p_list add partition p_3 values('20121113');   

 3 、截斷分區(TRUNCATE):   

alter table p_list truncate partition p_3    

 4、刪除分區(DROP) 

alter table p_list drop partition p_3   

刪除子分區;alter table p_list drop subpartition xxx;  

 5、分裂分區(split) 

通常我們會用來拆分MAXVALUE/DEFAULT分區。     

alter table p_range split partition pmax at (to_date('2012-11-13','yyyy-mm-dd')) into (partition p_3,partition p_max);

 alter table p_list split partition pdefault values ('20121113') into(partition p_3,partition p_defalut);

 此時會將pmax或pdefault中的'20121113'值放入P_3,其他的資料會放入p_max或p_defalut。  

6、交換分區(exchange) (簡介)

  速度很快,可以是分區跟非分區表交換,子分區跟非分區表交換,組合分區跟分區表交換。  

create table p_u_list(sale_date1 varchar2(10) NOT NULL )   

insert into p_u_list values('20121111');  

alter table p_list exchange partition p1 with table p_u_list WITH VALIDATION ;  

insert into p_u_list values('20121115'); 

alter table p_list exchange partition p1 with table p_u_list WITH VALIDATION; --此時會出錯,因為20121115不屬於分區平p1,而且做了 WITH VALIDATION檢查,如果想成功交換,需加上WITHOUT VALIDATION  ,如果指定WITH VALIDATION(預設) 會對交換進來的資料進行合法檢查,看是否符合該分區的規則,WITHOUT VALIDATION 會忽略合法檢查(比如ID=12的記錄此時可以交換到ID VALUES LESS THAN (10)的分區裡),但如果表上有primary key 或unique 約束的話,指定without validation會被忽略。 

 7、 合并分區(merge和coalesce) 

coalesce 僅僅適用於hash分區和複合分區的hash子分區--自動收縮當前的表分區,比如某表當前有5個hash分區,執行coalesce後就變成4個,再執行一次就變成3 個...直至一個。 merge 不適用hash分區--如果list分區有default或者range分區有maxvalue,則不能進行merge操作  

alter table p_hash coalesce partition; 

alter table p_list merge partitions p1,p2 into partition P0;       

 8 重新命名分區(rename) 

Alter table xxx rename partition/subpartition p1 to p1_new;  

 9.移動分區(move)   

 改變分區的資料表空間 

 alter table p_list move partition p1 tablespace sysaux;  

 10.EXPORT分區:    

 exp sales/sales_password tables=sales:sales1999_q1 rows=Y  file=sales1999_q1.dmp    

 11.IMPORT分區:    

 imp sales/sales_password FILE =sales1999_q1.dmp  TABLES = (sales:sales1999_q1) IGNORE=y    

12. 修改分區預設屬性(modify default attributes) 

修改表屬性:alter table xxx modify default attributes … 

修改分區屬性(適用於組合分區):alter table xxx modify default attributes for partition p1 … 

只對以後添加的分區產生影響,適用於所有分區,其中hash分區只能修改資料表空間屬性。 如: 

Alter table xxx modify default attributes tablespace users;   

13. 修改子分區模板屬(set subpartition template)

 Alter table xxx set subpartition template (…); 

僅影響以後的子分區,當前的子分區屬性不會改變 如: 

Alter table xxx set subpartition template (partition p1 tablespace tbs_1, Partition p2 tablespace tbs_2); 

如果要取消掉子分區模板: 

Alter table xxx set subpartition template ();    

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.