以前的分区表,需要指定一个或多个分区字段,并根据这个分区字段的值,按照一定的算法(RANGE、HASH和LIST)来决定一条记录属于那个分区。
从11g开始,Oracle允许用户不指定分区列,完全根据程序来控制数据存储在那个分区中。这就是11g提供的系统分区功能。
在以前,确定了分区列和分区方式,那么一条数据属于哪个分区也就被确定下来。而对于系统分区而言,分区是分区,数据是数据,二者没有对应的关系。
数据可以被放在任意一个分区中,这不是由数据本身决定的,而是应用程序在插入时确定的。
示例:
CREATE TABLE T_SYSTEM
(ID NUMBER,
NAME VARCHAR2(30)
)
PARTITION BY SYSTEM
(PARTITION P1,
PARTITION P2,
PARTITION P3,
PARTITION P4
);
这里需要注意的是在插入时必须指定分区
SQL> INSERT INTO T_SYSTEM VALUES (1, 'ABC');
INSERT INTO T_SYSTEM VALUES (1, 'ABC')
ORA-14701: 对于按“系统”方法进行分区的表, 必须对 DML 使用分区扩展名或绑定变量
SQL> INSERT INTO T_SYSTEM PARTITION (P1) VALUES (1, 'ABC');
1 row inserted
SQL> INSERT INTO T_SYSTEM PARTITION (P2) VALUES (1, 'ABC');
1 row inserted
|