Oracle 11g维护分区(五)(2)

你可以将两个相邻的间隔分区的内容合并到一个分区。不相邻的间隔分区不能合并。第一个间隔分区也能喝最高的范围分区进行合并。合并生成的分区继承了这两个合并分区中更高的上限。

合并间隔分区总是导致转换点移动到这两个合并分区中更高的上限。结果是间隔分区表的范围分区扩展到这两个合并分区中更高的上限。任何边界低于新合并生成分区的物化间隔分区,都会自动转化到范围分区,并且使用它们的间隔分区上限定义作为范围分区上限。

例如,考虑一下间隔分区transactions

CREATE TABLE transactions

( id NUMBER

, transaction_date DATE

, value NUMBER

)

PARTITION BY RANGE (transaction_date)

INTERVAL (NUMTODSINTERVAL(1,'DAY'))

( PARTITION p_before_2007 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy')));

把数据插入到该表的间隔分区部分,这将会创建这些日期的间隔分区。需要注意的是,2007115日和2007116日的数据被存储到相邻的间隔分区。

INSERT INTO transactions VALUES (1,TO_DATE('15-JAN-2007','dd-MON-yyyy'),100);

INSERT INTO transactions VALUES (2,TO_DATE('16-JAN-2007','dd-MON-yyyy'),600);

INSERT INTO transactions VALUES (3,TO_DATE('30-JAN-2007','dd-MON-yyyy'),200);

接下来,合并两个相邻的间隔分区。新分区会再有一个系统生成的名称。

ALTER TABLE transactions

MERGE PARTITIONS FOR(TO_DATE('15-JAN-2007','dd-MON-yyyy'))

, FOR(TO_DATE('16-JAN-2007','dd-MON-yyyy'));

对于transactions表而言,转换点现在已经移动到了2007117日。该间隔分区表的范围分区部分包含两个范围分区:值小于200711日,以及值小于2007117日。值大于2007117日的数据将会存储在间隔分区表的间隔分区部分。 

合并列表分区

当你合并列表分区时,本合并的分区可以是任意两个分区。它们不必像范围分区那样必须是相邻的,因为列表分区默认是没有顺序的。生成的分区由原来两个分区的数据组成。如果你将默认分区和其他分区进行合并,那么新生成的分区是默认分区。

下面的语句合并了一个列表分区表的两个分区,新生成的分区继承了所有表级别的默认属性。语句指定了MAXEXTENTS子句。

ALTER TABLE q1_sales_by_region

   MERGE PARTITIONS q1_northcentral, q1_southcentral

   INTO PARTITION q1_central

      STORAGE(MAXEXTENTS 20);

原来的两个分区的值列表如下:

PARTITION q1_northcentral VALUES ('SD','WI')

PARTITION q1_southcentral VALUES ('OK','TX')

由此生成的sales_west分区值列表包括这两个分区值列表的集合,更具体的说:

('SD','WI','OK','TX')

合并复合哈希分区

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

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