查询分区
数据字典:dba_tab_pattitions
SELECT * FROM SYS.DBA_TAB_PARTITIONS WHERE TABLE_OWNER='TEST';
添加分区
ALTER TABLE TEST.T1 ADD PARTITION Pn VALUES LESS THAN(MAXVALUE);
删除分区
ALTER TABLE TEST.T1 DROP PARTITION Pn;
合并分区
ALTER TABLE TEST.T1 MERGE PARTITIONS P2,P3 INTO PARTITION P2_3;
拆分分区
ALTER TABLE TEST.T1 SPLIT PARTITION P2_3 AT(200) INTO (PARTITION P2,PARTITION P3);
交换分区
使用分区交换exchange需注意:
1.分区交换仅支持范围和列表分区,不支持HASH分区。
2.分区交换可以将非分区表的数据交换到分区表,也可以将分区表的数据交换到非分区表,本质上是源表和目标表数据的互换。
3.分区交换要求分区表与交换表具有相同的结构(相同的表类型、相同的BRANCH选项、相同的列结构、相同的索引、相同的分布方式),否则会报“[-7000]:交换对象不匹配”的错误。
4.不支持含全局索引的分区表与普通表进行交换分区操作。
5.分区交换时不会进行数据校验,如果交换表的数据不符合分区范围,数据仍然会进入该分区。此时如果是范围分区可以使用split拆分分区,系统会自动对数据进行重组。
6.在生产环境中,为保证数据安全,建议对源表的数据备份后再做分区交换。
ALTER TABLE TEST.T1 EXCHANGE PARTITION P2 WITH TABLE TEST.T2;
案例:
新建表T9,将T2里的P2数据交换
CREATE TABLE TEST.T9(
ID INTEGER,
NAME VARCHAR(20)
);
INSERT INTO TEST.T9 VALUES(162,'zhangwu');
INSERT INTO TEST.T9 VALUES(163,'saan');
INSERT INTO TEST.T9 VALUES(164,'sansn');
INSERT INTO TEST.T9 VALUES(165,'sn');
COMMIT;
原始数据:
交换数据
ALTER TABLE TEST.T2 EXCHANGE PARTITION P2 WITH TABLE TEST.T9;
将非分区表转换成分区表
1.创建表
2.插入数据
3.备份数据
4.删除表
5.创建分区
6.导入数据
创建表并插入数据
CREATE TABLE TEST.T10(ID INT);
BEGIN
FOR i in 1..10000 LOOP
INSERT INTO TEST.T10 VALUES(i);
END loop;
end;
COMMIT;
备份数据
dexp sysdba file=/dm8/data/t10.dmp tables=test.t10
删除表
DROP TABLE TEST.T10;
创建分区表
CREATE TABLE TEST.T10(ID INT)
PARTITION BY RANGE(ID)
(
PARTITION P1 VALUES LESS THAN (1000),
PARTITION P2 VALUES LESS THAN (2000),
PARTITION P3 VALUES LESS THAN (3000),
PARTITION P4 VALUES LESS THAN (4000),
PARTITION P5 VALUES LESS THAN (5000),
PARTITION P6 VALUES LESS THAN (MAXVALUE)
);
还原表
dimp sysdba file=/dm8/data/t10.dmp tables=test.t10 ignore=y