添加分区
本节将介绍如何手动添加新的分区到分区表,并解释了为什么分区不能被指定添加到大部分分区索引。
向范围分区表添加一个分区
使用ALTER TABLE ... ADD PARTITION语句来添加一个新的分区到“高”端(表中最后一个分区的’HighValue’)。要在开始或在表的中间添加一个分区,使用SPLIT PARTITION子句。
例如,考虑这么一张表,sales,除了包含当前月份的数据,还包含之前12个月份的数据。 1999年1月1日,你增加一个分区月份,存储在表空间TSX。
ALTER TABLE sales
ADD PARTITION jan99 VALUES LESS THAN ( '01-FEB-1999' )
TABLESPACE tsx;
另外,和范围分区表相关的本地索引和全局索引仍然可用。
向哈希分区表添加一个分区
当你向一个哈希分区表添加分区时,数据库会对一个现有分区(由数据库选择)的所有数据行按照哈希函数进行重新排列,并将数据填充到新增的分区中。因此,如果表非空的话,添加一个哈希分区可能比较费时。
下面的语句显示了向scubagear表添加一个哈希分区的两种方式。选择第一条语句来添加哈希分区,分区名称由系统自动生成,并且分区存放在默认表空间。第二条语句同样也是增加一个分区,但是,明确指定了分区名称p_named和表空间名称gear5。
ALTER TABLE scubagear ADD PARTITION;
ALTER TABLE scubagear
ADD PARTITION p_named TABLESPACE gear5;
索引可能被标识为UNUSABLE,如下表所述:
表类型
索引操作
普通表(堆表)
除非你在ALTER TABLE语句中指定UPDATE INDEXES字句:
对于新增分区和重新分配的现有分区的本地索引,被标识为UNUSABLE,必须重建。
所有全局索引,或者分区全局索引的所有分区,被标识为UNUSABLE,必须重建。
索引组织表
对于本地索引,和普通表的处理方式一样。
所有全局索引保持可用;
向列表分区表添加一个分区
下面的语句说明了如何向列表分区表添加一个新的分区,在示例中,指定了新增分区的存储属性和NOLOGGING属性。
ALTER TABLE q1_sales_by_region
ADD PARTITION q1_nonmainland VALUES ('HI', 'PR')
STORAGE (INITIAL 20K NEXT 20K) TABLESPACE tbs_3
NOLOGGING;
描述新增分区的集合内的所有值不能存在于表的其他分区。
如果一个列表分区表包含默认分区,那