oracle partition table 分區表詳解


Oracle partition table 分區表詳解

分區表就是通過使用分區技術,將一張大表,拆分成多個表分區(獨立的segment),從而提升數據訪問的性能,以及日常的可維護性。
分區表中,每個分區的邏輯結構必須相同。如:列名、數據類型。
分區表中,每個分區的物理存儲參數可以不同。如:各個分區所在的表空間。
對於應用而言完全透明,分區前后沒有變化,不需要進行修改。

分區表相關試圖
顯示表分區信息 顯示數據庫所有分區表的詳細分區信息﹕
DBA_TAB_PARTITIONS

顯示子分區信息 顯示數據庫所有組合分區表的子分區信息﹕
DBA_TAB_SUBPARTITIONS

顯示分區列 顯示數據庫所有分區表的分區列信息﹕
DBA_PART_KEY_COLUMNS

顯示子分區列 顯示數據庫所有分區表的子分區列信息﹕
DBA_SUBPART_KEY_COLUMNS

分區表分為四類:1、范圍分區表 2、列表分區表 3、哈希分區表 4、組合分區表
1、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
)

2、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')

3、HASH 散列分區
說明:這類分區是在列值上使用散列算法,以確定將行放入哪個分區中。
規則:當列的值沒有合適的條件,沒有范圍的規律,也沒有固定的值,建議使用散列分區。
散列分區為通過指定分區編號來均勻分布數據的一種分區類型,因為通過在I/O設備上進行散列分區,
使得這些分區大小一致。建議分區的數量采用2的n次方,這樣可以使得各個分區間數據分布更加均勻。

Example:
創建hash分區有兩種方法:一種方法是指定分區的名字,另一種方法是指定分區數量。


例一、常規方法指定分區名字
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
)


例二、指定分區數量
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;

分割分區
1、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 。
2、list類型分區的分割
ALTER TABLE list_example
SPLIT PARTITION part01 VALUES('ME','PE')
INTO ( PARTITION part01_1, PARTITION part01_2
);
3、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

分區表分為四類:1、范圍分區表 2、列表分區表 3、哈希分區表 4、組合分區表
1、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
)

2、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')

3、HASH 散列分區
說明:這類分區是在列值上使用散列算法,以確定將行放入哪個分區中。
規則:當列的值沒有合適的條件,沒有范圍的規律,也沒有固定的值,建議使用散列分區。
散列分區為通過指定分區編號來均勻分布數據的一種分區類型,因為通過在I/O設備上進行散列分區,
使得這些分區大小一致。建議分區的數量采用2的n次方,這樣可以使得各個分區間數據分布更加均勻。

Example:
創建hash分區有兩種方法:一種方法是指定分區的名字,另一種方法是指定分區數量。


例一、常規方法指定分區名字
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
)


例二、指定分區數量
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;

分割分區
1、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 。
2、list類型分區的分割
ALTER TABLE list_example
SPLIT PARTITION part01 VALUES('ME','PE')
INTO ( PARTITION part01_1, PARTITION part01_2
);
3、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 。







































免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM