パーティションテーブルを作成した後、パーティションテーブルまたはサブパーティションテーブルのパーティション名を変更できます。
注意点
パーティションの名前変更は、メインテーブルのパーティション名のみを変更し、そのメインテーブルに属するローカルインデックスのパーティション名は変更しません。ただし、パーティション名を変更した後、そのパーティションテーブルに対して列の削除などローカルインデックスが再構築される操作を実行すると、ローカルインデックスのパーティション名はメインテーブルのパーティション名と一致します。
パーティションの名前を変更する際、新しいパーティション名はテーブル内に既に存在するパーティション名(パーティションまたはサブパーティション)と同じにすることはできません。
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