--1 创建分区表t_partition_rang
SQL> DROP TABLE t_partition_rang PURGE;
表已删除。
SQL> CREATE TABLE t_partition_rang(ID NUMBER ,NAME varchar2(10))
2 PARTITION BY range(ID)(
3 PARTITION t_range_p1 VALUES LESS THAN(10) ,
4 PARTITION t_range_p2 VALUES LESS THAN(20) ,
5 PARTITION t_range_p3 VALUES LESS THAN(30) ,
6 PARTITION t_range_pMAX VALUES LESS THAN(MAXVALUE)
7 );
表已创建。
--2 创建global索引
SQL> CREATE INDEX idx_pr_id ON t_partition_rang(ID)
2 GLOBAL PARTITION BY RANGE(ID) (
3 PARTITION i_rang_p1 VALUES LESS THAN(10),
4 PARTITION i_rang_p2 VALUES LESS THAN(20),
5 PARTITION i_rang_p3 VALUES LESS THAN(30),
6 PARTITION i_rang_pmax VALUES LESS THAN(MAXVALUE));
索引已创建。
-- 3.向分区表 t_partition_rang中插入数据
SQL> INSERT INTO t_partition_rang VALUES(1,'a');
SQL> INSERT INTO t_partition_rang VALUES(10,'b');
SQL> INSERT INTO t_partition_rang VALUES(20,'c');
SQL> INSERT INTO t_partition_rang VALUES(30,'d');
SQL> INSERT INTO t_partition_rang VALUES(40,'e');
SQL> INSERT INTO t_partition_rang VALUES(50,'f');
已创建 1 行。
SQL> COMMIT;
--4. 查看分区t_range_pMAX中的记录
SQL> SELECT * FROM t_partition_rang partition(t_range_pMAX);
ID NAME
---------- ----------
30 d
40 e
50 f
--5. 尝试添加新的分区 t_range_p6
由于在创建分区表时指定了maxvalue,在添加新的分区时报错ORA-14074。
SQL> ALTER TABLE t_partition_rang ADD PARTITION t_range_p6 VALUES LESS THAN(70);
ALTER TABLE t_partition_rang ADD PARTITION t_range_p6 VALUES LESS THAN(70)
*
第 1 行出现错误:
ORA-14074: partition bound must collate higher than that of the last partition
--6. 解决方法:使用split将maxvalue分区中的数据转移到新的的分区中。
SQL> ALTER TABLE t_partition_rang SPLIT PARTITION t_range_pmax AT (70)
2 INTO (PARTITION t_range_p6, PARTITION t_range_pmax) UPDATE GLOBAL INDEXES ;
表已更改。
--7.转移后maxvalue分区中没有数据
SQL> SELECT * FROM t_partition_rang partition(t_range_pMAX);
未选定行
--8.数据被转移到了新的分区中(t_range_p6)
SQL> SELECT * FROM t_partition_rang partition(t_range_p6);
ID NAME
---------- ----------
30 d
40 e
50 f
SQL>