Oracle partition table 分區表詳解算法
分區表就是經過使用分區技術,將一張大表,拆分紅多個表分區(獨立的segment),從而提高數據訪問的性能,以及平常的可維護性。
分區表中,每一個分區的邏輯結構必須相同。如:列名、數據類型。
分區表中,每一個分區的物理存儲參數能夠不一樣。如:各個分區所在的表空間。
對於應用而言徹底透明,分區先後沒有變化,不須要進行修改。數據庫
分區表相關試圖
顯示錶分區信息 顯示數據庫全部分區表的詳細分區信息﹕
DBA_TAB_PARTITIONSbash
顯示子分區信息 顯示數據庫全部組合分區表的子分區信息﹕
DBA_TAB_SUBPARTITIONSoracle
顯示分區列 顯示數據庫全部分區表的分區列信息﹕
DBA_PART_KEY_COLUMNSless
顯示子分區列 顯示數據庫全部分區表的子分區列信息﹕
DBA_SUBPART_KEY_COLUMNS性能
分區表分爲四類:一、範圍分區表 二、列表分區表 三、哈希分區表 四、組合分區表
一、RANGE 範圍分區
說明:針對記錄字段的值在某個範圍。
規則:
(1)、每個分區都必須有一個VALUES LESS THEN子句,它指定了一個不包括在該分區中的上限值。
分區鍵的任何值等於或者大於這個上限值的記錄都會被加入到下一個高一些的分區中。
(2)、全部分區,除了第一個,都會有一個隱式的下限值,這個值就是此分區的前一個分區的上限值。
(3)、在最高的分區中,MAXVALUE被定義。MAXVALUE表明了一個不肯定的值。這個值高於其它分區中的任何分區鍵的值,
也能夠理解爲高於任何分區中指定的VALUE LESS THEN的值,同時包括空值。若不添加maxvalue的分區插入數值一旦超過設置的最大上限會報錯。
Example:
create table RPTUSER.RPT_TMP_10086BDL_bak
(
HANDLEDATE DATE,
TEL_CALLING VARCHAR2(15)
) TABLESPACE "IS_IEF_CBT"
PARTITION BY RANGE ("HANDLEDATE") --按date形式分區
( partition P201805 values less than (TO_DATE('2018-06-01 00:00:00','YYYY-MM-DD hh24:mi:ss')) tablespace IS_IEF_CBT,
partition P201806 values less than (TO_DATE('2018-07-01 00:00:00','YYYY-MM-DD hh24:mi:ss')) tablespace IS_IEF_CBT,
partition P201807 values less than (TO_DATE('2018-08-01 00:00:00','YYYY-MM-DD hh24:mi:ss')) tablespace IS_IEF_CBT,
partition pmax values less than (MAXVALUE) tablespace IS_IEF_CBT);
CREATE TABLE PART_TAB_CUSTOMER_BY_RANGE
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR2(30) NOT NULL,
LAST_NAME VARCHAR2(30) NOT NULL,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
SEX VARCHAR2(10),
STATUS VARCHAR2(10),
INSERT_DATE DATE
)
PARTITION BY RANGE (CUSTOMER_ID) --按number形式分區
(
PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE part_Data1,
PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE part_Data2,
PARTITION CUS_PART2 VALUES LESS THAN (maxvalue) TABLESPACE part_Data3
)
二、LIST 列表分區
說明:該分區的特色是某列的值只有有限個值,基於這樣的特色咱們能夠採用列表分區。
規則:默認分區爲DEFAULT,若不添加DEFAULT的分區插入數值不屬於所設置的分區會報錯。
在定義範圍分區時,每一個分區定義必須使用 values('value01','value02'....)子句。表示該分區存儲包含相關value值的數據行。
在定義範圍分區時,最後一個分區能夠是values(DEFAULT)。表示該分區存儲未在其餘分區定義的數據行。
Example:
CREATE TABLE PART_TAB_CUSTOMER_BY_LIST
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
SEX VARCHAR2(10),
CORP_ID VARCHAR2(3),
INSERT_DATE DATE,
SUM_DATE varchar2(4)
)
PARTITION BY LIST (SEX) --SEX列只有兩個值,採用列表分區
(
PARTITION MALE VALUES ('男') TABLESPACE part_Data1,
PARTITION FEMALE VALUES ('女') TABLESPACE part_Data2
)
CREATE TABLE PART_TAB_CUSTOMER_BY_LIST
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
SEX VARCHAR2(10),
CORP_ID VARCHAR2(3),
INSERT_DATE DATE,
SUM_DATE varchar2(4)
)
PARTITION BY LIST (SUM_DATE)
(
PARTITION SUM_DATE1 VALUES ('2012') TABLESPACE part_Data1,
PARTITION SUM_DATE2 VALUES ('2013') TABLESPACE part_Data2,
PARTITION SUM_DATE2 VALUES (DEFAULT) TABLESPACE part_Data2
)
也能夠VALUES裏面有多個值 如PARTITION EMPLOYEE_PART01 VALUES ('PRESIDENT','MANAGER','ANALYST')
三、HASH 散列分區
說明:這類分區是在列值上使用散列算法,以肯定將行放入哪一個分區中。
規則:當列的值沒有合適的條件,沒有範圍的規律,也沒有固定的值,建議使用散列分區。
散列分區爲經過指定分區編號來均勻分佈數據的一種分區類型,由於經過在I/O設備上進行散列分區,
使得這些分區大小一致。建議分區的數量採用2的n次方,這樣可使得各個分區間數據分佈更加均勻。
Example:
建立hash分區有兩種方法:一種方法是指定分區的名字,另外一種方法是指定分區數量。ui
例1、常規方法指定分區名字
CREATE TABLE PART_TAB_CUSTOMER_BY_HASH
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR2(30) NOT NULL,
LAST_NAME VARCHAR2(30) NOT NULL,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
SEX VARCHAR2(10),
STATUS VARCHAR2(10),
INSERT_DATE DATE
)
PARTITION BY HASH (CUSTOMER_ID) --按id散列
(
PARTITION hash1 TABLESPACE part_Data1,
PARTITION hash2 TABLESPACE part_Data2
) spa
例2、指定分區數量
PARTITION BY HASH (empno) PARTITIONS 2 STORE IN (part_Data1,part_Data2);
--每每咱們不須要知道bash分區的名字,由於數據放在哪一個分區是oracle根據bash算法存放的,並非用戶指定,
因此當用戶插入一條記錄,並不能肯定放在哪一個分區,這個不一樣於range和list
4.組合分區
組合分區中,主要經過在不一樣列上,使用「範圍分區」、「列表分區」以及「HASH分區」不一樣組合方式,進而實現組合分區。
組合分區中,分區自己沒有相應的segment,能夠認爲是一個邏輯容器,只有子分區擁有實際的segment,用於存放數據。
在11g之後,組合分區新增了四種組合方式:「RANGE-RANGE」、「LIST-RANGE」、「LIST-HASH」以及「LIST-LIST」。
Example:
以LIST-LIST的組合方式爲例,建立組合分區
CREATE TABLE "EMPLOYEE_LIST_LIST_PART"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0)
)
PARTITION BY LIST (DEPTNO) --LIST-LIST的組合方式,先分區DEPTNO再分區JOB
SUBPARTITION BY LIST (JOB)
(
PARTITION EMPLOYEE_DEPTNO_10 VALUES (10) TABLESPACE test_tbs_01
( SUBPARTITION EMPLOYEE_10_JOB_MAGAGER VALUES ('MANAGER'),
SUBPARTITION EMPLOYEE_10_JOB_DEFAULT VALUES (DEFAULT)
),
PARTITION EMPLOYEE_DEPTNO_20 VALUES (20) TABLESPACE test_tbs_02
( SUBPARTITION EMPLOYEE_20_JOB_MAGAGER VALUES ('MANAGER'),
SUBPARTITION EMPLOYEE_20_JOB_DEFAULT VALUES (DEFAULT)
),
PARTITION EMPLOYEE_DEPTNO_OTHERS VALUES (DEFAULT) TABLESPACE test_tbs_03
( SUBPARTITION EMPLOYEE_30_JOB_MAGAGER VALUES ('MANAGER'),
SUBPARTITION EMPLOYEE_30_JOB_DEFAULT VALUES (DEFAULT)
)
);索引
增長分區hash
-- range partitioned table
ALTER TABLE range_example ADD PARTITION part04 VALUES LESS THAN (TO_DATE('2008-10-1 00:00:00','yyyy-mm-dd hh24:mi:ss'));
--list partitioned table
ALTER TABLE list_example ADD PARTITION part04 VALUES ('TE');
--Adding Values for a List Partition
ALTER TABLE list_example MODIFY PARTITION part04 ADD VALUES('MIS');
--Dropping Values from a List Partition
ALTER TABLE list_example MODIFY PARTITION part04 DROP VALUES('MIS');
--hash partitioned table
ALTER TABLE hash_example ADD PARTITION part03;
--hash partitioned table 新增partition時,現有表的中全部data都有從新計算hash值,而後從新分配到分區中。
--因此被從新分配的分區的 indexes須要rebuild
--增長subpartition
ALTER TABLE range_hash_example MODIFY PARTITION part_1 ADD SUBPARTITION part_1_sub_4; --注意複合分區這裏是MODIFY
刪除分區
對range分區表刪除分區
ALTER TABLE PART_TAB_SALE_RANGE_LIST DROP PARTITION P3;
對range分區表list子分區刪除子分區
ALTER TABLE PART_TAB_SALE_RANGE_LIST DROP SUBPARTITION P4SUB1;
對於哈希分區表,哈希複合分區表,range-hash分區表
-- 減小hash 分區的個數,一次減小一個。不能指定減小partition的名稱。
ALTER TABLE hash_example COALESCE PARTITION ;
--subpartition 的語法對於以下
ALTER TABLE diving MODIFY PARTITION us_locations
COALESCE SUBPARTITION;
合併父分區
ALTER TABLE range_example
MERGE PARTITIONS part01_1,part01_2 INTO PARTITION part01
UPDATE INDEXES;
若是省略update indexes子句的話,必須重建受影響的分區的index 。
ALTER TABLE range_example MODIFY PARTITION part02 REBUILD UNUSABLE LOCAL INDEXES;
分割分區
一、range類型分區的分割
ALTER TABLE range_example
SPLIT PARTITION part01
AT (TO_DATE('2008-06-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
INTO ( PARTITION part01_1,PARTITION part01_2
);
一個分區一次性只能分割成兩個分區,at關鍵字後面指定的值爲第一個分區的range範圍,默認爲less than 。
二、list類型分區的分割
ALTER TABLE list_example
SPLIT PARTITION part01 VALUES('ME','PE')
INTO ( PARTITION part01_1, PARTITION part01_2
);
三、Range_Hash類型分區的分割 新分區會對原有分區的subpartition作rehash的動做。若是在分割是指定subpartition的個數,則按新規則rehash subpartition,若是沒有指定則保留原有subpartition的個數不變。
ALTER TABLE range_hash_example SPLIT PARTITION part_1
AT (TO_DATE('2008-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) INTO (
PARTITION part_1_1 SUBPARTITIONS 2 STORE IN (tbs01,tbs02),
PARTITION part_1_2
);
subpartitions 2 -- 指定新分區的subpartition的個數,store in 子句指定subpartition存儲的tablespace
分區索引
1.創建普通的索引
create index com_index_range_example_id on range_example(id);
2.創建本地分區索引
create index local_index_range_example_id on range_example(id)local;
3.創建全局分區索引
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)
);
對於分區索引的刪除,local index 不能指定分區名稱,單獨的刪除分區索引。local index 對應的分區會伴隨着data分區的刪除而一塊兒被刪除。
global partition index 能夠指定分區名稱,刪除某一分區。可是有一點要注意,若是該分區不爲空,則會致使更高一級的索引分區被置爲UNUSABLE 。
ALTER INDEX gidx_range_exampel_id drop partition part_01 ; 此句將致使part_02 狀態爲UNUSABLE 。
Oracle partition table 分區表詳解
分區表就是經過使用分區技術,將一張大表,拆分紅多個表分區(獨立的segment),從而提高數據訪問的性能,以及平常的可維護性。
分區表中,每一個分區的邏輯結構必須相同。如:列名、數據類型。
分區表中,每一個分區的物理存儲參數能夠不一樣。如:各個分區所在的表空間。
對於應用而言徹底透明,分區先後沒有變化,不須要進行修改。
分區表相關試圖
顯示錶分區信息 顯示數據庫全部分區表的詳細分區信息﹕
DBA_TAB_PARTITIONS
顯示子分區信息 顯示數據庫全部組合分區表的子分區信息﹕
DBA_TAB_SUBPARTITIONS
顯示分區列 顯示數據庫全部分區表的分區列信息﹕
DBA_PART_KEY_COLUMNS
顯示子分區列 顯示數據庫全部分區表的子分區列信息﹕
DBA_SUBPART_KEY_COLUMNS
分區表分爲四類:一、範圍分區表 二、列表分區表 三、哈希分區表 四、組合分區表
一、RANGE 範圍分區
說明:針對記錄字段的值在某個範圍。
規則:
(1)、每個分區都必須有一個VALUES LESS THEN子句,它指定了一個不包括在該分區中的上限值。
分區鍵的任何值等於或者大於這個上限值的記錄都會被加入到下一個高一些的分區中。
(2)、全部分區,除了第一個,都會有一個隱式的下限值,這個值就是此分區的前一個分區的上限值。
(3)、在最高的分區中,MAXVALUE被定義。MAXVALUE表明了一個不肯定的值。這個值高於其它分區中的任何分區鍵的值,
也能夠理解爲高於任何分區中指定的VALUE LESS THEN的值,同時包括空值。若不添加maxvalue的分區插入數值一旦超過設置的最大上限會報錯。
Example:
create table RPTUSER.RPT_TMP_10086BDL_bak
(
HANDLEDATE DATE,
TEL_CALLING VARCHAR2(15)
) TABLESPACE "IS_IEF_CBT"
PARTITION BY RANGE ("HANDLEDATE") --按date形式分區
( partition P201805 values less than (TO_DATE('2018-06-01 00:00:00','YYYY-MM-DD hh24:mi:ss')) tablespace IS_IEF_CBT,
partition P201806 values less than (TO_DATE('2018-07-01 00:00:00','YYYY-MM-DD hh24:mi:ss')) tablespace IS_IEF_CBT,
partition P201807 values less than (TO_DATE('2018-08-01 00:00:00','YYYY-MM-DD hh24:mi:ss')) tablespace IS_IEF_CBT,
partition pmax values less than (MAXVALUE) tablespace IS_IEF_CBT);
CREATE TABLE PART_TAB_CUSTOMER_BY_RANGE
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR2(30) NOT NULL,
LAST_NAME VARCHAR2(30) NOT NULL,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
SEX VARCHAR2(10),
STATUS VARCHAR2(10),
INSERT_DATE DATE
)
PARTITION BY RANGE (CUSTOMER_ID) --按number形式分區
(
PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE part_Data1,
PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE part_Data2,
PARTITION CUS_PART2 VALUES LESS THAN (maxvalue) TABLESPACE part_Data3
)
二、LIST 列表分區
說明:該分區的特色是某列的值只有有限個值,基於這樣的特色咱們能夠採用列表分區。
規則:默認分區爲DEFAULT,若不添加DEFAULT的分區插入數值不屬於所設置的分區會報錯。
在定義範圍分區時,每一個分區定義必須使用 values('value01','value02'....)子句。表示該分區存儲包含相關value值的數據行。
在定義範圍分區時,最後一個分區能夠是values(DEFAULT)。表示該分區存儲未在其餘分區定義的數據行。
Example:
CREATE TABLE PART_TAB_CUSTOMER_BY_LIST
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
SEX VARCHAR2(10),
CORP_ID VARCHAR2(3),
INSERT_DATE DATE,
SUM_DATE varchar2(4)
)
PARTITION BY LIST (SEX) --SEX列只有兩個值,採用列表分區
(
PARTITION MALE VALUES ('男') TABLESPACE part_Data1,
PARTITION FEMALE VALUES ('女') TABLESPACE part_Data2
)
CREATE TABLE PART_TAB_CUSTOMER_BY_LIST
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
SEX VARCHAR2(10),
CORP_ID VARCHAR2(3),
INSERT_DATE DATE,
SUM_DATE varchar2(4)
)
PARTITION BY LIST (SUM_DATE)
(
PARTITION SUM_DATE1 VALUES ('2012') TABLESPACE part_Data1,
PARTITION SUM_DATE2 VALUES ('2013') TABLESPACE part_Data2,
PARTITION SUM_DATE2 VALUES (DEFAULT) TABLESPACE part_Data2
)
也能夠VALUES裏面有多個值 如PARTITION EMPLOYEE_PART01 VALUES ('PRESIDENT','MANAGER','ANALYST')
三、HASH 散列分區
說明:這類分區是在列值上使用散列算法,以肯定將行放入哪一個分區中。
規則:當列的值沒有合適的條件,沒有範圍的規律,也沒有固定的值,建議使用散列分區。
散列分區爲經過指定分區編號來均勻分佈數據的一種分區類型,由於經過在I/O設備上進行散列分區,
使得這些分區大小一致。建議分區的數量採用2的n次方,這樣可使得各個分區間數據分佈更加均勻。
Example:
建立hash分區有兩種方法:一種方法是指定分區的名字,另外一種方法是指定分區數量。
例1、常規方法指定分區名字
CREATE TABLE PART_TAB_CUSTOMER_BY_HASH
(
CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR2(30) NOT NULL,
LAST_NAME VARCHAR2(30) NOT NULL,
PHONE VARCHAR2(15) NOT NULL,
EMAIL VARCHAR2(80),
SEX VARCHAR2(10),
STATUS VARCHAR2(10),
INSERT_DATE DATE
)
PARTITION BY HASH (CUSTOMER_ID) --按id散列
(
PARTITION hash1 TABLESPACE part_Data1,
PARTITION hash2 TABLESPACE part_Data2
)
例2、指定分區數量
PARTITION BY HASH (empno) PARTITIONS 2 STORE IN (part_Data1,part_Data2);
--每每咱們不須要知道bash分區的名字,由於數據放在哪一個分區是oracle根據bash算法存放的,並非用戶指定,
因此當用戶插入一條記錄,並不能肯定放在哪一個分區,這個不一樣於range和list
4.組合分區
組合分區中,主要經過在不一樣列上,使用「範圍分區」、「列表分區」以及「HASH分區」不一樣組合方式,進而實現組合分區。
組合分區中,分區自己沒有相應的segment,能夠認爲是一個邏輯容器,只有子分區擁有實際的segment,用於存放數據。
在11g之後,組合分區新增了四種組合方式:「RANGE-RANGE」、「LIST-RANGE」、「LIST-HASH」以及「LIST-LIST」。
Example:
以LIST-LIST的組合方式爲例,建立組合分區
CREATE TABLE "EMPLOYEE_LIST_LIST_PART"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0)
)
PARTITION BY LIST (DEPTNO) --LIST-LIST的組合方式,先分區DEPTNO再分區JOB
SUBPARTITION BY LIST (JOB)
(
PARTITION EMPLOYEE_DEPTNO_10 VALUES (10) TABLESPACE test_tbs_01
( SUBPARTITION EMPLOYEE_10_JOB_MAGAGER VALUES ('MANAGER'),
SUBPARTITION EMPLOYEE_10_JOB_DEFAULT VALUES (DEFAULT)
),
PARTITION EMPLOYEE_DEPTNO_20 VALUES (20) TABLESPACE test_tbs_02
( SUBPARTITION EMPLOYEE_20_JOB_MAGAGER VALUES ('MANAGER'),
SUBPARTITION EMPLOYEE_20_JOB_DEFAULT VALUES (DEFAULT)
),
PARTITION EMPLOYEE_DEPTNO_OTHERS VALUES (DEFAULT) TABLESPACE test_tbs_03
( SUBPARTITION EMPLOYEE_30_JOB_MAGAGER VALUES ('MANAGER'),
SUBPARTITION EMPLOYEE_30_JOB_DEFAULT VALUES (DEFAULT)
)
);
增長分區
-- range partitioned table
ALTER TABLE range_example ADD PARTITION part04 VALUES LESS THAN (TO_DATE('2008-10-1 00:00:00','yyyy-mm-dd hh24:mi:ss'));
--list partitioned table
ALTER TABLE list_example ADD PARTITION part04 VALUES ('TE');
--Adding Values for a List Partition
ALTER TABLE list_example MODIFY PARTITION part04 ADD VALUES('MIS');
--Dropping Values from a List Partition
ALTER TABLE list_example MODIFY PARTITION part04 DROP VALUES('MIS');
--hash partitioned table
ALTER TABLE hash_example ADD PARTITION part03;
--hash partitioned table 新增partition時,現有表的中全部data都有從新計算hash值,而後從新分配到分區中。
--因此被從新分配的分區的 indexes須要rebuild
--增長subpartition
ALTER TABLE range_hash_example MODIFY PARTITION part_1 ADD SUBPARTITION part_1_sub_4; --注意複合分區這裏是MODIFY
刪除分區
對range分區表刪除分區
ALTER TABLE PART_TAB_SALE_RANGE_LIST DROP PARTITION P3;
對range分區表list子分區刪除子分區
ALTER TABLE PART_TAB_SALE_RANGE_LIST DROP SUBPARTITION P4SUB1;
對於哈希分區表,哈希複合分區表,range-hash分區表
-- 減小hash 分區的個數,一次減小一個。不能指定減小partition的名稱。
ALTER TABLE hash_example COALESCE PARTITION ;
--subpartition 的語法對於以下
ALTER TABLE diving MODIFY PARTITION us_locations
COALESCE SUBPARTITION;
合併父分區
ALTER TABLE range_example
MERGE PARTITIONS part01_1,part01_2 INTO PARTITION part01
UPDATE INDEXES;
若是省略update indexes子句的話,必須重建受影響的分區的index 。
ALTER TABLE range_example MODIFY PARTITION part02 REBUILD UNUSABLE LOCAL INDEXES;
分割分區
一、range類型分區的分割
ALTER TABLE range_example
SPLIT PARTITION part01
AT (TO_DATE('2008-06-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
INTO ( PARTITION part01_1,PARTITION part01_2
);
一個分區一次性只能分割成兩個分區,at關鍵字後面指定的值爲第一個分區的range範圍,默認爲less than 。
二、list類型分區的分割
ALTER TABLE list_example
SPLIT PARTITION part01 VALUES('ME','PE')
INTO ( PARTITION part01_1, PARTITION part01_2
);
三、Range_Hash類型分區的分割 新分區會對原有分區的subpartition作rehash的動做。若是在分割是指定subpartition的個數,則按新規則rehash subpartition,若是沒有指定則保留原有subpartition的個數不變。
ALTER TABLE range_hash_example SPLIT PARTITION part_1
AT (TO_DATE('2008-07-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) INTO (
PARTITION part_1_1 SUBPARTITIONS 2 STORE IN (tbs01,tbs02),
PARTITION part_1_2
);
subpartitions 2 -- 指定新分區的subpartition的個數,store in 子句指定subpartition存儲的tablespace
分區索引
1.創建普通的索引
create index com_index_range_example_id on range_example(id);
2.創建本地分區索引
create index local_index_range_example_id on range_example(id)local;
3.創建全局分區索引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));對於分區索引的刪除,local index 不能指定分區名稱,單獨的刪除分區索引。local index 對應的分區會伴隨着data分區的刪除而一塊兒被刪除。global partition index 能夠指定分區名稱,刪除某一分區。可是有一點要注意,若是該分區不爲空,則會致使更高一級的索引分區被置爲UNUSABLE 。 ALTER INDEX gidx_range_exampel_id drop partition part_01 ; 此句將致使part_02 狀態爲UNUSABLE 。