Oracle 11g维护分区(五)

使用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;

合并间隔分区

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6003536050b81005c7f502be55dc5508.html