向一个【范围|列表|间隔】-哈希复合分区表添加一个分区如前所述。对于一个间隔-哈希分区表,间隔分区是自动创建的。你可以指定SUBPARTITIONS子句来指定子分区的数量,或者指定SUBPARTITION子句来命名具体子分区。如果没有指定SUBPARTITIONS子句或者SUBPARTITION子句,那么分区将继承表级别的默认属性。对于一个间隔-哈希分区表,你只能向范围或者已经物化的间隔分区添加子分区。
这个例子向一个范围-哈希分区表sales添加了一个范围分区q1_2000,该分区用来存储2000年第一季度的数据。其中,有8个子分区存储在tbs5表空间。子分区不能显式使用表压缩。在这个例子中,子分区会继承分区级别的压缩属性并以压缩形式存储。
ALTER TABLE sales ADD PARTITION q1_2000
VALUES LESS THAN (2000, 04, 01) COMPRESS
SUBPARTITIONS 8 STORE IN tbs5;
添加一个子分区
你可以在ALTER TABLE语句中使用MODIFY PARTITION ... ADD SUBPARTITION子句来向一个【范围|列表|间隔】-哈希复合分区表添加一个哈希子分区。数据库将会根据哈希函数,对同一分区内的一个已有子分区的所有数据行重新进行哈希排列,并将其中部分数据填充到新增子分区中。对于一个间隔-哈希分区表,你只能向范围分区或者已经物化的间隔分区添加子分区。
在下面的示例中,一个存储在us1表空间的新哈希子分区us_loc5, 被添加到diving表的范围分区locations_us中。
ALTER TABLE diving MODIFY PARTITION locations_us
ADD SUBPARTITION us_locs5 TABLESPACE us1;
除非你指定了UPDATE INDEXES子句,否则,必须重建和新增子分区以及重新进行哈希排列子分区相关的索引子分区。
向列表复合分区表添加分区
可以在分区和列表子分区两个级别来添加分区。
添加一个分区
向一个【范围|列表|间隔】-列表复合分区表添加一个分区如前所述。对于一个间隔-哈希分区表,间隔分区是自动创建的。你可以通过SUBPARTITION子句来给子分区命名和提供值列表。如果没有指定SUBPARTITION子句,那么子分区将继承子分区模板。如果没有子分区模板,那么将会创建一个单独的默认子分区。
如例子4-28所示,向范围-列表分区表quarterly_regional_sales增加一个新的分区,并且指定了一些新的物理属性,对于没有指定的其他属性则继承表的默认属性。
例4-28 向范围-列表分区表添加分区
ALTER TABLE quarterly_regional_sales
ADD PARTITION q1_2000 VALUES LESS THAN (TO_DATE('1-APR-2000','DD-MON-YYYY'))
STORAGE (INITIAL 20K NEXT 20K) TABLESPACE ts3 NOLOGGING
(
SUBPARTITION q1_2000_northwest VALUES ('OR', 'WA'),
SUBPARTITION q1_2000_southwest VALUES ('AZ', 'UT', 'NM'),
SUBPARTITION q1_2000_northeast VALUES ('NY', 'VM', 'NJ'),
SUBPARTITION q1_2000_southeast VALUES ('FL', 'GA'),
SUBPARTITION q1_2000_northcentral VALUES ('SD', 'WI'),
SUBPARTITION q1_2000_southcentral VALUES ('OK', 'TX')
);
添加一个子分区
你可以在ALTER TABLE语句中使用MODIFY PARTITION ... ADD SUBPARTITION子句来向一个【范围|列表|间隔】-列表复合分区表添加一个列表子分区。对于一个间隔-列表分区表,你只能向范围分区或者已经物化的间隔分区添加子分区。
在下面的示例中,向范围-列表分区表quarterly_regional_sales的子分区集合中新增一个子分区,新增子分区存储在ts2表空间。
ALTER TABLE quarterly_regional_sales
MODIFY PARTITION q1_1999
ADD SUBPARTITION q1_1999_south
VALUES ('AR','MS','AL') tablespace ts2;
向范围复合分区表添加分区
可以在分区和列表子分区两个级别来添加分区。
添加一个分区
向一个【范围|列表|间隔】-范围复合分区表添加一个分区如前所述。对于一个间隔-哈希分区表,间隔分区是自动创建的。你可以通过SUBPARTITION子句来给子分区命名和提供值列表。如果没有指定SUBPARTITION子句,那么子分区将继承子分区模板。如果没有子分区模板,那么将会创建一个单独的子分区,其最大值为MAXVALUE。
如例子4-29所示,向范围-范围分区表shipments增加一��新的范围分区p_2007_jan,新的分区将用来存储2007年1月份的数据。在这个例子中,新增分区包含3个子分区,子分区会继承分区级别的压缩属性并以压缩形式存储。
例4-29 向范围-范围分区表添加分区
ALTER TABLE shipments
ADD PARTITION p_2007_jan
VALUES LESS THAN (TO_DATE('01-FEB-2007','dd-MON-yyyy')) COMPRESS
( SUBPARTITION p07_jan_e VALUES LESS THAN (TO_DATE('15-FEB-2007','dd-MON-yyyy'))
, SUBPARTITION p07_jan_a VALUES LESS THAN (TO_DATE('01-MAR-2007','dd-MON-yyyy'))
, SUBPARTITION p07_jan_l VALUES LESS THAN (TO_DATE('01-APR-2007','dd-MON-yyyy'))
) ;
添加一个子分区