パーティションテーブルを作成した後、パーティションテーブルまたはサブパーティションテーブルのパーティション名を変更できます。
注意点
パーティションの名前変更は、親テーブルのパーティション名のみを変更し、親テーブルが属するローカルインデックスのパーティション名は変更しません。ただし、パーティションの名前を変更した後、そのパーティションテーブルに対して列の削除などローカルインデックスを再構築する操作を実行すると、ローカルインデックスのパーティション名も親テーブルのパーティション名と一致します。
パーティションの名前を変更する際、新しいパーティション名はテーブル内に既に存在するパーティション名(パーティションまたはサブパーティション)と同じにすることはできません。
OceanBaseデータベースでは、パーティション名は大文字小文字を区別しないため、元のパーティション名と大文字小文字が異なる名前に変更することはサポートされていません。
パーティション名の変更
RENAME PARTITION 句を使用してパーティションの名前を変更できます。ステートメントは以下のとおりです:
ALTER TABLE table_name RENAME PARTITION partition_name TO new_partition_name;
パーティション名の変更操作を実行した後、パーティションテーブルの場合は USER_TAB_PARTITIONS ビュー、サブパーティションテーブルの場合は USER_TAB_SUBPARTITIONS ビューを参照して、パーティション名が正常に変更されたかどうかを確認できます。
例:
非テンプレートのサブパーティションテーブル
t2_f_rrを作成します。obclient> CREATE TABLE t2_f_rr(col1 INT,col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) (PARTITION p0 VALUES LESS THAN(100) (SUBPARTITION sp0 VALUES LESS THAN(2020), SUBPARTITION sp1 VALUES LESS THAN(2021) ), PARTITION p1 VALUES LESS THAN(200) (SUBPARTITION sp2 VALUES LESS THAN(2020), SUBPARTITION sp3 VALUES LESS THAN(2021), SUBPARTITION sp4 VALUES LESS THAN(2022) ) );作成が成功したら、パーティションテーブルのパーティション名を確認します。
obclient> SELECT table_name,partition_name,subpartition_name FROM USER_TAB_SUBPARTITIONS WHERE table_name = 'T2_F_RR';クエリ結果は次のとおりです:
+------------+----------------+-------------------+ | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | +------------+----------------+-------------------+ | T2_F_RR | P0 | SP0 | | T2_F_RR | P0 | SP1 | | T2_F_RR | P1 | SP2 | | T2_F_RR | P1 | SP3 | | T2_F_RR | P1 | SP4 | +------------+----------------+-------------------+ 5 rows in setパーティション
P0の名前をNEW_P0に変更します。ALTER TABLE T2_F_RR RENAME PARTITION P0 TO NEW_P0;再度パーティション名を確認すると、パーティション名が正常に変更されていることが確認できます。
obclient> SELECT table_name,partition_name,subpartition_name FROM SYS.USER_TAB_SUBPARTITIONS WHERE table_name = 'T2_F_RR';クエリ結果は次のとおりです:
+------------+----------------+-------------------+ | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | +------------+----------------+-------------------+ | T2_F_RR | NEW_P0 | SP0 | | T2_F_RR | NEW_P0 | SP1 | | T2_F_RR | P1 | SP2 | | T2_F_RR | P1 | SP3 | | T2_F_RR | P1 | SP4 | +------------+----------------+-------------------+ 5 rows in set
セカンダリパーティション名の変更
セカンダリパーティション名を変更するステートメントは次のとおりです:
ALTER TABLE table_name RENAME SUBPARTITION partition_name TO new_partition_name;
セカンダリパーティション名の変更操作後、ビュー USER_TAB_SUBPARTITIONS をクエリすることで、パーティション名が正常に変更されたかどうかを確認できます。
例:
非テンプレートのセカンダリパーティションテーブル
t3_f_rrを作成します。obclient> CREATE TABLE t3_f_rr(col1 INT,col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) (PARTITION p0 VALUES LESS THAN(100) (SUBPARTITION sp0 VALUES LESS THAN(2020), SUBPARTITION sp1 VALUES LESS THAN(2021) ), PARTITION p1 VALUES LESS THAN(200) (SUBPARTITION sp2 VALUES LESS THAN(2020), SUBPARTITION sp3 VALUES LESS THAN(2021), SUBPARTITION sp4 VALUES LESS THAN(2022) ) );作成が成功した後、パーティションテーブルのパーティション名を確認します。
obclient> SELECT table_name,partition_name,subpartition_name FROM USER_TAB_SUBPARTITIONS WHERE table_name = 'T3_F_RR';クエリ結果は次のとおりです:
+------------+----------------+-------------------+ | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | +------------+----------------+-------------------+ | T3_F_RR | P0 | SP0 | | T3_F_RR | P0 | SP1 | | T3_F_RR | P1 | SP2 | | T3_F_RR | P1 | SP3 | | T3_F_RR | P1 | SP4 | +------------+----------------+-------------------+ 5 rows in setセカンダリパーティション
SP1の名前をNEW_SP1に変更します。ALTER TABLE T3_F_RR RENAME SUBPARTITION SP1 TO NEW_SP1;再度パーティション名を確認すると、パーティション名が正常に変更されていることが確認できます。
obclient> SELECT table_name,partition_name,subpartition_name FROM SYS.USER_TAB_SUBPARTITIONS WHERE table_name = 'T3_F_RR';クエリ結果は次のとおりです:
+------------+----------------+-------------------+ | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | +------------+----------------+-------------------+ | T3_F_RR | P0 | SP0 | | T3_F_RR | P0 | NEW_SP1 | | T3_F_RR | P1 | SP2 | | T3_F_RR | P1 | SP3 | | T3_F_RR | P1 | SP4 | +------------+----------------+-------------------+ 5 rows in set