使用ALTER TABLE ... MERGE PARTITION语句将两个分区的内容合并到一个分区。原来的两个分区将会被删除,相关的本地索引也会被删除。对于哈希分区表或者复合哈希分区表的哈希子分区,你不能使用这个语句。
对于引用分区表,你不能合并分区。相反,父表的合并操作会级联到所有子表。尽管如此,当你在父表执行合并分区或者子分区操作时,你也可以使用DEPENDENT TABLES子句来为相关表设置特定属性。
如果涉及到的分区或者子分区包含数据,那么索引可能被标识为UNUSABLE,如下表所述:
表类型
索引操作
普通表(堆表)
除非你在ALTER TABLE语句中指定UPDATE INDEXES字句:
l 数据库将生成的所有相关本地索引分区或者子分区标识为UNUSABLE。
l 全局索引,或者分区全局索引的所有分区,被标识为UNUSABLE,必须重建。
索引组织表
l 生成的所有相关本地索引分区标识为UNUSABLE。
l 所有全局索引保持可用。
合并范围分区
你可以将两个相邻的范围分区的内容合并到一个分区。不相邻的范围分区不能合并。合并生成的分区继承了这两个合并分区中更高的上限。
合并范围分区的一个原因是保持在线历史数据在较大的分区。例如,你可以有每日分区,然后将最旧的分区聚合为周分区,进而周分区可以聚合为月分区,等等。
例4-31显示了一个合并范围分区的例子。
例4-31 合并范围分区
-- First, create a partitioned table with four partitions, each on its own
-- tablespace partitioned by range on the data column
--
CREATE TABLE four_seasons
(
one DATE,
two VARCHAR2(60),
three NUMBER
)
PARTITION BY RANGE ( one )
(
PARTITION quarter_one
VALUES LESS THAN ( TO_DATE('01-apr-1998','dd-mon-yyyy'))
TABLESPACE quarter_one,
PARTITION quarter_two
VALUES LESS THAN ( TO_DATE('01-jul-1998','dd-mon-yyyy'))
TABLESPACE quarter_two,
PARTITION quarter_three
VALUES LESS THAN ( TO_DATE('01-oct-1998','dd-mon-yyyy'))
TABLESPACE quarter_three,
PARTITION quarter_four
VALUES LESS THAN ( TO_DATE('01-jan-1999','dd-mon-yyyy'))
TABLESPACE quarter_four
);
--
-- Create local PREFIXED index on Four_Seasons
-- Prefixed because the leftmost columns of the index match the
-- Partitioning key
--
CREATE INDEX i_four_seasons_l ON four_seasons ( one,two )
LOCAL (
PARTITION i_quarter_one TABLESPACE i_quarter_one,
PARTITION i_quarter_two TABLESPACE i_quarter_two,
PARTITION i_quarter_three TABLESPACE i_quarter_three,
PARTITION i_quarter_four TABLESPACE i_quarter_four
);
-- Next, merge the first two partitions
ALTER TABLE four_seasons
MERGE PARTITIONS quarter_one, quarter_two INTO PARTITION quarter_two
UPDATE INDEXES;
如果你省略了上述语句中的UPDATE INDEXES子句,那么你必须重建受影响分区的本地索引。
-- Rebuild index for quarter_two, which has been marked unusable
-- because it has not had all of the data from Q1 added to it.
-- Rebuilding the index corrects this.
--
ALTER TABLE four_seasons MODIFY PARTITION
quarter_two REBUILD UNUSABLE LOCAL INDEXES;
合并间隔分区