当你合并复合哈希分区时,子分区会根据哈希函数重新分布到由SUBPARTITIONS n或者SUBPARTITIONS子句指定数量的分区。如果两个都没有指定,那么就使用表级别的默认值。
需要注意的是,分割一个复合哈希分区(在“分割一个复合哈希分区”章节讨论)和合并两个复合哈希分区,在属性的继承方面是不一样的。当一个分区被分割时,新的分区可以继承原分区的属性,因为只有一个父节点。但是,当合并分区时,必须继承表级别属性。
对于间隔哈希分区表,你只能合并两个相邻的间隔分区,或者时最高范围分区和第一个间隔分区。如“合并间隔分区”所述,当你在间隔哈希分区表合并分区时,转换点时会移动的。
下面的例子合并了两个范围哈希分区:
点击(此处)折叠或打开
ALTER TABLE all_seasons
MERGE PARTITIONS quarter_1, quarter_2 INTO PARTITION quarter_2
SUBPARTITIONS 8;
合并复合列表分区你可以在分区级别合并分区,也可以在列表子分区级别合并子分区。
在一个复合列表分区表中合并分区在复合列表分区表中合并分区如前面所论述的“合并范围分区”。但是,当你合并两个复合列表分区时,生成的新分区将继承子分区模版的子分区描述,前提是该模版存在。如果不存在子分区模版,那么将为新分区创建一个默认子分区。
对于间隔哈希分区表,你只能合并两个相邻的间隔分区,或者时最高范围分区和第一个间隔分区。如“合并间隔分区”所述,当你在间隔哈希分区表合并分区时,转换点时会移动的。
下面的语句合并了范围列表分区表stripe_regional_sales的两个分区。该表存在一个子分区模版。
ALTER TABLE stripe_regional_sales
MERGE PARTITIONS q1_1999, q2_1999 INTO PARTITION q1_q2_1999
STORAGE(MAXEXTENTS 20);
对于新的分区,我们指定了一些新的物理属性,同时,对于那些没有指定的属性将会继承表级别的默认值。新生成的分区q1_q2_1999将会继承q2_1999分区的上限边界,并且子分区的值列表描述将会继承该表的子分区模版描述。
新生成分区的数据由两个分区的数据组成。但是,可能存在数据库返回错误的情况。这个之所以会发生,可能是因为当同时满足下列条件时,数据可能会映射到新分区之外:
合并后子分区的一些值可能并不属于子分区模版。
子分区模版不包含默认分区定义。
我们可以通过在默认子分区模版中指定一个默认分区来消除这个错误条件。
在一个复合列表分区表中合并子分区你可以合并同一分区中的任意两个列表子分区的内容。由此生成的子分区值列表描述包括所有被合并分区的值。
下面的语句合并了范围列表分区表的两个子分区,并将新生成的子分区保存到表空间ts4:
ALTER TABLE quarterly_regional_sales
MERGE SUBPARTITIONS q1_1999_northwest, q1_1999_southwest
INTO SUBPARTITION q1_1999_west
TABLESPACE ts4;
原始的两个分区的值列表如下:
子分区q1_1999_northwest被描述为('WA','OR')
子分区q1_1999_southwest被描述为('AZ','NM','UT')
新生成子分区的值列表由上述两个子分区值列表的合集构成:
子分区q1_1999_west被描述为('WA','OR','AZ','NM','UT')
新生成子分区的存储表空间以及子分区属性都由分区级别的默认属性决定,除非你显式地指定。
如果任何现有地子分区名称被重复使用,那么新生成子分区将会继承名称被重复使用子分区的属性。
合并复合范围分区你可以在分区级别合并分区,也可以在范围子分区级别合并子分区。
在一个复合范围分区表中合并分区