ビジネスニーズに応じて、パーティションテーブルからパーティションを削除できます。パーティションを削除すると、そのパーティションの定義とデータが同時に削除されます。
パーティションテーブルにおけるパーティション削除操作のサポート状況
OceanBaseデータベースのOracleモードでは:
パーティションテーブルについては、現在RangeパーティションとListパーティションでのみパーティション削除操作をサポートしており、Hashパーティションに対するサポートは提供されていません。
サブパーティションテーブルについては、現在Range/Listタイプ(組み合わせ)のパーティションでのみパーティション削除操作をサポートしています。
OceanBaseデータベースのOracleモードにおける、パーティションテーブルとサブパーティションテーブルのパーティション削除操作に関するサポート状況は、次の表のとおりです。
パーティションテーブル |
パーティションタイプ |
1次パーティションの削除 |
2次パーティションの削除 |
|---|---|---|---|
| 1次パーティションテーブル | Range / List | サポート | - |
| 1次パーティションテーブル | Hash | サポートなし | - |
| 2次パーティションテーブル | Range + Range / Range + List | サポート | サポート |
| 2次パーティションテーブル | Range + Hash | サポート | サポートなし |
| 2次パーティションテーブル | List + Range / List + List | サポート | サポート |
| 2次パーティションテーブル | List + Hash | サポート | サポートなし |
| 2次パーティションテーブル | Hash + Range / Hash + List | サポートなし | サポート |
| 2次パーティションテーブル | Hash + Hash | サポートなし | サポートなし |
パーティション削除操作の説明
パーティション削除操作を実行する前に、以下の点にご注意ください:
パーティションを削除する際は、削除対象のパーティションにアクティブなトランザクションやクエリが存在しないようにしてください。存在すると、SQLステートメントでエラーが発生したり、異常が発生したりする可能性があります。
sysテナントで、ビューoceanbase.GV$OB_TRANSACTION_PARTICIPANTSを使用して、現在終了していないトランザクションのコンテキスト状態を確認できます。Oracleモードでは、グローバルインデックスを持つパーティションテーブルまたはサブパーティションテーブルを削除する場合、
ALTER TABLEステートメントにUPDATE GLOBAL INDEXESキーワードを追加してグローバルインデックス情報を更新する必要があります。UPDATE GLOBAL INDEXESキーワードを追加しない場合、パーティションを削除すると、そのパーティションテーブルのグローバルインデックスは使用不可状態になります。Range、Interval、またはListパーティション(パーティションおよびサブパーティションを含む)を使用し、かつパーティション削除操作をサポートするテーブルについて、
UPDATE GLOBAL INDEXESを指定すると、システムはグローバルインデックスを再構築せず、バックグラウンドでのメジャーコンパクションによるデータ削除を通じて、遅延(lazy)メンテナンス戦略でインデックスの有効性を維持します。これにより、インデックスの無効化によるクエリの中断やパフォーマンスの低下を回避できます。ただし、この最適化は通常のグローバルインデックスにのみ適用されます。以下のシナリオではこの最適化はトリガーされません:- パーティションがHashパーティションであり、サブパーティションがRangeまたはListである場合、そのサブパーティションに対してTruncate操作を実行する場合。
- パーティションキーが通常の列ではなく式である場合。
- フルテキストインデックス、非構造化型などの特殊なグローバルインデックスについては、
UPDATE GLOBAL INDEXESを使用してもインデックスは使用不可状態になります。
説明
V4.4.2バージョンでは、V4.4.2 BP1バージョンから INTERVAL パーティションテーブルが 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