この記事ではレンジパーティション表の追加方法について解説します。
レンジパーティション表の追加
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」を作成できました。