業務上の必要に応じて、パーティションテーブル内のパーティションを削除できます。パーティションを削除すると、そのパーティションの定義とデータが同時に削除されます。
パーティションテーブルにおけるパーティション削除操作のサポート状況
OceanBaseデータベースのOracleモードでは:
プライマリパーティションテーブルについては、現在RangeパーティションとListパーティションに対するパーティション削除操作のみがサポートされており、Hashパーティションに対する削除操作はまだサポートされていません。
セカンダリパーティションテーブルについては、現在RangeパーティションとListパーティション(組み合わせ)に対するパーティション削除操作のみがサポートされています。
OceanBaseデータベースのOracleモードにおける、プライマリパーティションテーブルとセカンダリパーティションテーブルのパーティション削除操作の具体的なサポート状況は以下の表のとおりです。
| パーティションテーブル | パーティションタイプ | パーティションの削除 | サブパーティションの削除 |
|---|---|---|---|
| パーティションテーブル | Range / List | サポート | - |
| パーティションテーブル | Hash | サポートなし | - |
| サブパーティションテーブル | Range + Range / Range + List | サポート | サポート |
| サブパーティションテーブル | Range + Hash | サポート | サポートなし |
| サブパーティションテーブル | List + Range / List + List | サポート | サポート |
| サブパーティションテーブル | List + Hash | サポート | サポートなし |
| サブパーティションテーブル | Hash + Range / Hash + List | サポートなし | サポート |
| サブパーティションテーブル | Hash + Hash | サポートなし | サポートなし |
パーティションの削除操作の説明
パーティションの削除操作を実行する前に、以下の点にご注意ください:
パーティションを削除する際は、削除対象のパーティション上にアクティブなトランザクションやクエリが存在しないようにしてください。そうでない場合、SQLステートメントエラーが発生したり、異常が発生したりする可能性があります。
sysテナント内のビューoceanbase.GV$OB_TRANSACTION_PARTICIPANTSを使用して、現在終了していないトランザクションのコンテキスト状態を確認できます。Oracleモードでは、グローバルインデックスを持つパーティションテーブルまたはコンポジット・パーティションテーブルを削除する際には、
ALTER TABLEステートメントにUPDATE GLOBAL INDEXESキーワードを追加してグローバルインデックス情報を更新する必要があります。UPDATE GLOBAL INDEXESキーワードを追加しないと、パーティションを削除した後、そのパーティションテーブル上のグローバルインデックスは利用不可になります。
パーティションの削除
業務上の必要に応じて、パーティションテーブルまたはコンポジット・パーティションテーブル内のパーティションを削除できます。
構文
ALTER TABLE table_name DROP PARTITION partition_name_list [UPDATE GLOBAL INDEXES];
partition_name_list:
partition_name [, partition_name ...]
説明
パーティションを削除する際は、1つまたは複数のパーティションを削除できますが、すべてのパーティションを一度に削除することはできません。
パーティションを削除すると、そのパーティション内のデータも同時に削除されます。データのみを削除したい場合は、
TRUNCATEステートメントを使用してください。
例
パーティションテーブル
tbl1_r内のパーティションM202005とM202006を削除します。obclient> CREATE TABLE tbl1_r(log_id INT,log_date DATE NOT NULL DEFAULT SYSDATE) PARTITION BY RANGE(log_date) (PARTITION M202001 VALUES LESS THAN(TO_DATE('2020/02/01','YYYY/MM/DD')) , PARTITION M202002 VALUES LESS THAN(TO_DATE('2020/03/01','YYYY/MM/DD')) , PARTITION M202003 VALUES LESS THAN(TO_DATE('2020/04/01','YYYY/MM/DD')) , PARTITION M202004 VALUES LESS THAN(TO_DATE('2020/05/01','YYYY/MM/DD')) , PARTITION M202005 VALUES LESS THAN(TO_DATE('2020/06/01','YYYY/MM/DD')) , PARTITION M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD')) , PARTITION M202007 VALUES LESS THAN(TO_DATE('2020/08/01','YYYY/MM/DD')) , PARTITION M202008 VALUES LESS THAN(TO_DATE('2020/09/01','YYYY/MM/DD')) , PARTITION M202009 VALUES LESS THAN(TO_DATE('2020/10/01','YYYY/MM/DD')) , PARTITION M202010 VALUES LESS THAN(TO_DATE('2020/11/01','YYYY/MM/DD')) , PARTITION M202011 VALUES LESS THAN(TO_DATE('2020/12/01','YYYY/MM/DD')) , PARTITION M202012 VALUES LESS THAN(TO_DATE('2021/01/01','YYYY/MM/DD')) , PARTITION MMAX VALUES LESS THAN (MAXVALUE) ); Query OK, 0 rows affected obclient> ALTER TABLE tbl1_r DROP PARTITION M202005,M202006; Query OK, 0 rows affectedパーティションテーブル
t2_f_rrのパーティションp0を削除します。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) ) ); Query OK, 0 rows affected obclient> ALTER TABLE t2_f_rr DROP PARTITION p0; Query OK, 0 rows affected
サブパーティションの削除
業務上の必要に応じて、サブパーティションテーブル内のサブパーティションを削除できます。サブパーティションを削除すると、そのパーティションの定義とデータも同時に削除されます。
構文
ALTER TABLE table_name DROP SUBPARTITION subpartition_name_list [ UPDATE GLOBAL INDEXES ];
subpartition_name_list:
subpartition_name[, subpartition_name ...]
例
パーティションテーブル t2_f_rr 内のパーティション p1 のサブパーティション sp5 および sp6 を削除し、グローバルインデックス情報を更新します。
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),
SUBPARTITION sp5 VALUES LESS THAN(2023),
SUBPARTITION sp6 VALUES LESS THAN(2024)
)
);
Query OK, 0 rows affected
obclient> ALTER TABLE t2_f_rr DROP SUBPARTITION sp5,sp6 UPDATE GLOBAL INDEXES;
Query OK, 0 rows affected