在看一篇介紹表分區的文章時,產生了一個疑問,如何表的分區處於不同表空間,那麼合併後的分區是屬於哪個表空間的?
下面進行實驗:
實驗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:
創建不同表空間的範圍分區
(
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> 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
結論:非相鄰表分區不能進行合併