Oracle表分區合併

在看一篇介紹表分區的文章時,產生了一個疑問,如何表的分區處於不同表空間,那麼合併後的分區是屬於哪個表空間的?

下面進行實驗:


實驗1:

創建不同表空間的hash分區

SQL> CREATE TABLE HASH_TABLE 

  2  ( 
  3    COL NUMBER(8), 
  4    INF VARCHAR2(100) 
  5  ) 
  6  PARTITION BY HASH (COL) 
  7  ( PARTITION PART01 TABLESPACE users,
  8  PARTITION PART02 TABLESPACE test)
  9  ;



SQL> select PARTITION_NAME,PARTITION_POSITION, TABLESPACE_NAME from USER_TAB_PARTITIONS where table_name='HASH_TABLE';


PARTITION_NAME                 PARTITION_POSITION TABLESPACE_NAME
------------------------------ ------------------ ------------------------------
PART01                                          1 USERS
PART02                                          2 TEST


SQL>ALTER TABLE HASH_TABLE  MERGE PARTITIONS PART01,PART02 INTO PARTITION PART02;

SQL> ALTER TABLE HASH_TABLE  MERGE PARTITIONS PART01,PART02 INTO PARTITION PART02;
ALTER TABLE HASH_TABLE  MERGE PARTITIONS PART01,PART02 INTO PARTITION PART02
            *
ERROR at line 1:
ORA-14255: table is not partitioned by Range, List, Composite Range or
Composite List method


結論:hash分區表不能進行合併。



實驗2:

創建不同表空間的範圍分區

CREATE TABLE CUSTOMER 

    CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY
)
PARTITION BY RANGE (CUSTOMER_ID) 

    PARTITION CUS_PART1 VALUES LESS THAN (10) TABLESPACE users, 
    PARTITION CUS_PART2 VALUES LESS THAN (20) TABLESPACE test 
);


SQL> select PARTITION_NAME,PARTITION_POSITION, TABLESPACE_NAME from USER_TAB_PARTITIONS where table_name='CUSTOMER';

PARTITION_NAME                 PARTITION_POSITION TABLESPACE_NAME
------------------------------ ------------------ ------------------------------
CUS_PART1                                       1 USERS
CUS_PART2                                       2 TEST


SQL> ALTER TABLE CUSTOMER  MERGE PARTITIONS CUS_PART1,CUS_PART2 INTO PARTITION CUS_PART1;
ALTER TABLE CUSTOMER  MERGE PARTITIONS CUS_PART1,CUS_PART2 INTO PARTITION CUS_PART1
                                       *
ERROR at line 1:
ORA-14275: cannot reuse lower-bound partition as resulting partition

結論1:分區不能向小範圍的分區合併,只能向大範圍合併


SQL>ALTER TABLE CUSTOMER  MERGE PARTITIONS CUS_PART1,CUS_PART2 INTO PARTITION CUS_PART2;


SQL> select PARTITION_NAME,PARTITION_POSITION, TABLESPACE_NAME from USER_TAB_PARTITIONS where  table_name='CUSTOMER';


PARTITION_NAME                 PARTITION_POSITION TABLESPACE_NAME
------------------------------ ------------------ ------------------------------
CUS_PART2                                       1 SYSTEM

結論2:未指定表空間分區合併後,生成的分區表空間爲用戶默認表空間


SQL> ALTER TABLE CUSTOMER  MERGE PARTITIONS CUS_PART1,CUS_PART2 INTO PARTITION CUS_PART2 tablespace users;

SQL> select PARTITION_NAME,PARTITION_POSITION, TABLESPACE_NAME from USER_TAB_PARTITIONS where  table_name='CUSTOMER';


PARTITION_NAME                 PARTITION_POSITION TABLESPACE_NAME
------------------------------ ------------------ ------------------------------

CUS_PART2                                       1 USERS


結論3:通過語句修改爲合併後的分區指定表空間


實驗3:

測試非相鄰分區是否可以合併

SQL> CREATE TABLE CUSTOMER 
  2  ( 
  3      CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY
  4  )
  5  PARTITION BY RANGE (CUSTOMER_ID) 
  6  ( 
  7      PARTITION CUS_PART1 VALUES LESS THAN (10) TABLESPACE users, 
  8      PARTITION CUS_PART2 VALUES LESS THAN (20) TABLESPACE test ,
  9      PARTITION CUS_PART3 VALUES LESS THAN (30) TABLESPACE test
 10  );


Table created.


SQL>  select PARTITION_NAME,PARTITION_POSITION, TABLESPACE_NAME from USER_TAB_PARTITIONS where table_name='CUSTOMER';


PARTITION_NAME                 PARTITION_POSITION TABLESPACE_NAME
------------------------------ ------------------ ------------------------------
CUS_PART1                                       1 USERS
CUS_PART2                                       2 TEST
CUS_PART3                                       3 TEST


SQL>  ALTER TABLE CUSTOMER  MERGE PARTITIONS CUS_PART1,CUS_PART3 INTO PARTITION CUS_PART3 tablespace users;
 ALTER TABLE CUSTOMER  MERGE PARTITIONS CUS_PART1,CUS_PART3 INTO PARTITION CUS_PART3 tablespace users
                                        *
ERROR at line 1:
ORA-14274: partitions being merged are not adjacent

結論:非相鄰表分區不能進行合併



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章