對分區表的使用做一個簡單的記錄。
創建簡單的範圍分區表
CREATE TABLE PART_TABLENAME (
COLUMN_1 NUMBER(20),
COLUMN_2 VARCHAR2(10),
COLUMN_3 DATE)
PARTITION BY RANGE(COLUMN_3)
(
PARTITION P_201801 VALUES LESS THAN (TO_DATE('2018-02-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')) TABLESPACE USERS,
PARTITION P_201802 VALUES LESS THAN (TO_DATE('2018-03-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')) TABLESPACE USERS,
PARTITION P_201803 VALUES LESS THAN (TO_DATE('2018-04-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')) TABLESPACE USERS,
PARTITION P_201804 VALUES LESS THAN (TO_DATE('2018-05-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')) TABLESPACE USERS,
PARTITION P_201805 VALUES LESS THAN (TO_DATE('2018-06-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')) TABLESPACE USERS,
PARTITION P_201806 VALUES LESS THAN (TO_DATE('2018-07-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')) TABLESPACE USERS,
PARTITION P_MAX VALUES LESS THAN (MAXVALUE) TABLESPACE USERS
);
TRUNCATE指定分區
ALTER TABLE PART_TABLENAME TRUNCATE PARTITION P_201802 REUSE STORAGE;--空間不回收,且只能被本表使用
ALTER TABLE PART_TABLENAME TRUNCATE PARTITION P_201802 DROP STORAGE;--空間回收,可以被其他表使用
DROP指定分區
ALTER TABLE PART_TABLENAME DROP PARTITION P_201801;
注意:如果刪除的分區不是最後一個分區,則不能重新添加被刪除的分區
追加新分區
- 如果有最大分區需要先刪除最大分區
ALTER TABLE PART_TABLENAME DROP PARTITION P_MAX;
- 添加新分區
ALTER TABLE PART_TABLENAME ADD PARTITION P_201807 VALUES LESS THAN (TO_DATE('2018-08-01 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN')) TABLESPACE USERS;
- 重新添加最大分區
ALTER TABLE PART_TABLENAME ADD PARTITION P_MAX VALUES LESS THAN (MAXVALUE) TABLESPACE USERS;
交換分區
修改了數據字典,沒有移動數據
- 創建同結構的包含符合特定分區條件的普通表
CREATE TABLE TABLENAME_201804 AS SELECT * FROM PART_TABLENAME WHERE 1=2;
- 向普通表中插入一條符合分區條件的測試數據
INSERT INTO TABLENAME_201804 VALUES(123,'HHH',DATE'2018-4-25');
- 實施分區交換
ALTER TABLE PART_TABLENAME EXCHANGE PARTITION P_201804 WITH TABLE TABLENAME_201804;
- 驗證數據是否導入
SELECT COUNT(*) FROM PART_TABLENAME;
拆分分區
- 向分區表插入一條測試數據
INSERT INTO PART_TABLENAME VALUES(124,'HHH',DATE'2018-4-10');
- 現分區P_201804中共兩條數據
SELECT * FROM PART_TABLENAME PARTITION (P_201804);
COLUMN_1 | COLUMN_2 | COLUMN_3 |
---|---|---|
124 | HHH | 2018/4/10 |
123 | HHH | 2018/4/25 |
- 拆分分區P_201804
ALTER TABLE PART_TABLENAME SPLIT PARTITION P_201804
AT (TO_DATE('2018-04-15','YYYY-MM-DD'))
INTO (PARTITION P_201804_01, PARTITION P_201804_02);
- 分別查詢拆分後的分區
SELECT * FROM PART_TABLENAME PARTITION (P_201804_01);
COLUMN_1 | COLUMN_2 | COLUMN_3 |
---|---|---|
124 | HHH | 2018/4/10 |
SELECT * FROM PART_TABLENAME PARTITION (P_201804_02);
COLUMN_1 | COLUMN_2 | COLUMN_3 |
---|---|---|
123 | HHH | 2018/4/25 |
合併分區
- 合併2個分區P_201804_01、P_201804_02到P_201804
ALTER TABLE PART_TABLENAME MERGE PARTITIONS P_201804_01, P_201804_02 INTO PARTITION P_201804;
- 查看分區數據
SELECT * FROM PART_TABLENAME PARTITION (P_201804);
COLUMN_1 | COLUMN_2 | COLUMN_3 |
---|---|---|
124 | HHH | 2018/4/10 |
123 | HHH | 2018/4/25 |