ALTER
TABLE
EXCHANGE
PARTITION
文のセマンティックは、「ハッシュ・パーティション表と* - ハッシュ・パーティションの交換」で説明されているセマンティックと同じです。次の例では、order_date
で時間隔パーティション化され、order_total
のレンジでサブパーティション化されたorders
表を示します。この例では、単一の月単位の時間隔をレンジ・パーティション表と交換する方法を示します。
CREATE TABLE orders_mar_2007 ( id NUMBER , cust_id NUMBER , order_date DATE , order_total NUMBER ) PARTITION BY RANGE (order_total) ( PARTITION p_small VALUES LESS THAN (1000) , PARTITION p_medium VALUES LESS THAN (10000) , PARTITION p_large VALUES LESS THAN (100000) , PARTITION p_extraordinary VALUES LESS THAN (MAXVALUE) );
表に2007年5月の注文を移入します。次に時間隔 - レンジ・パーティション表を作成します。
CREATE TABLE orders ( id NUMBER , cust_id NUMBER , order_date DATE , order_total NUMBER ) PARTITION BY RANGE (order_date) INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) SUBPARTITION BY RANGE (order_total) SUBPARTITION TEMPLATE ( SUBPARTITION p_small VALUES LESS THAN (1000) , SUBPARTITION p_medium VALUES LESS THAN (10000) , SUBPARTITION p_large VALUES LESS THAN (100000) , SUBPARTITION p_extraordinary VALUES LESS THAN (MAXVALUE) ) (PARTITION p_before_2007 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd- MON-yyyy')));
orders_mar_2007
表のパーティション化キーが、orders
表のサブパーティション化キーと一致していることが重要です。
次に、パーティションを交換します。時間隔パーティションを交換するため、まずパーティションをロックしてパーティションが作成されることを確認する必要があります。
LOCK TABLE orders PARTITION FOR (TO_DATE('01-MAR-2007','dd-MON-yyyy')) IN SHARE MODE; ALTER TABLE orders EXCHANGE PARTITION FOR (TO_DATE('01-MAR-2007','dd-MON-yyyy')) WITH TABLE orders_mar_2007 WITH VALIDATION;