レンジパーティション表の追加方法

この記事ではレンジパーティション表の追加方法について解説します。

 レンジパーティション表の追加

Oracle Partitioningにおいてレンジパーティションを後から新規に追加することができます。

新しいパーティションを追加するには、ALTER TABLE ADD PARTITION文を使用します

ALTER TABLE <テーブル名> ADD PARTITION
 <追加するパーティション名> VALUES LESS THAN (XXX);

新規に追加する場合はもともと存在する最上位のパーティションよりも上位の範囲を設定する必要があります。

例えば下記のようなパーティション表があるとします。

SQL>  select TABLE_NAME, PARTITION_NAME, HIGH_VALUE ,PARTITION_POSITION from USER_TAB_PARTITIONS;
TABLE_NAME PARTITION_NAME HIGH_VALUE                                                                           PARTITION_POSITION
---------- -------------- ----------------------------------------------------------------------------------- -------------------
SALES      SALES_2020     TO_DATE(' 2021-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                      1
SALES      SALES_2021     TO_DATE(' 2022-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                      2
SALES      SALES_2022     TO_DATE(' 2023-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                      3
SALES      SALES_2023     TO_DATE(' 2024-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                      4

このSALES表は日付データをもとに年ごとにパーティションを作成しています。

この場合はパーティションを追加できるのは2024年など2023年以降のパーティションに限られます。

2019年などのパーティションを作成しようとするとエラーとなります。

ORA-14074: パーティション・バウンドは最終のものより上位に設定する必要があります


 レンジパーティション表の分割

最上位にあるパーティションよりも小さい範囲でパーティションを作成するにはパーティションを分割します。

パーティションの分割はALTER TABLE文のSPLIT PARTITION句を使用して行います。

ALTER TABLE <テーブル名> SPLIT PARTITION <分割するパーティション名> INTO 
  (PARTITION <新規に追加するパーティション名1> VALUES LESS THAN (XXX),
   PARTITION <分割するパーティション名>);

上記のパーティション表で「SALES_2020」パーティションを分割して「SALES_2019」を作成します。

SQL> ALTER TABLE sales SPLIT PARTITION sales_2020 INTO
  2    (PARTITION sales_2019 VALUES LESS THAN ('20200101'),
  3     PARTITION sales_2020);

表が変更されました。

SQL> select TABLE_NAME, PARTITION_NAME, HIGH_VALUE ,PARTITION_POSITION from USER_TAB_PARTITIONS;
TABLE_NAME PARTITION_NAME HIGH_VALUE                                                                           PARTITION_POSITION
---------- -------------- ----------------------------------------------------------------------------------- -------------------
SALES      SALES_2019     TO_DATE(' 2020-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                      1
SALES      SALES_2020     TO_DATE(' 2021-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                      2
SALES      SALES_2021     TO_DATE(' 2022-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                      3
SALES      SALES_2022     TO_DATE(' 2023-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                      4
SALES      SALES_2023     TO_DATE(' 2024-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA                      5

パーティションを分割して新規に「SALES_2019」を作成できました。