業務上の必要に応じて、パーティションテーブル内のパーティションデータを削除し、パーティション構造を保持することができます。
パーティションテーブルに対するTRUNCATEパーティション操作のサポート状況
OceanBaseデータベースのOracleモードでは:
パーティションテーブルについては、現在RangeパーティションとListパーティションに対してのみTRUNCATEパーティション操作をサポートしており、Hashパーティションに対するTRUNCATEパーティション操作はまだサポートされていません。
サブパーティションテーブルについては、現在RangeパーティションとListパーティション(組み合わせ)に対してのみTRUNCATEパーティション操作をサポートしています。
OceanBaseデータベースのOracleモードにおける、パーティションテーブルとサブパーティションテーブルに対するTRUNCATEパーティション操作の具体的なサポート状況は、以下の表のとおりです。
| パーティションテーブル | パーティションタイプ | Truncate 1次パーティション | Truncate 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 | サポートなし | サポートなし |
Truncateパーティション操作の説明
Truncateパーティション操作を実行する前に、以下の情報を理解しておく必要があります:
Truncateパーティション時は、Truncate対象のパーティション上にアクティブなトランザクションやクエリが存在しないようにしてください。そうでない場合、SQLステートメントでエラーが発生したり、異常が発生したりする可能性があります。
sysテナント内のビューoceanbase.GV$OB_TRANSACTION_PARTICIPANTSを使用して、現在終了していないトランザクションのコンテキスト状態を照会できます。Oracleモードでは、グローバルインデックスを持つパーティションテーブルまたはコンポジット・パーティションテーブルをTruncateする際には、
ALTER TABLEステートメントにUPDATE GLOBAL INDEXESキーワードを追加してグローバルインデックス情報を更新する必要があります。UPDATE GLOBAL INDEXESキーワードを追加しない場合、Truncate後のパーティションテーブル上のグローバルインデックスは利用不可となります。
パーティションのトランケーション
ビジネスニーズに応じて、パーティションテーブルまたはコンポジット・パーティションテーブル内のパーティションをトランケーションできます。
構文
ALTER TABLE table_name TRUNCATE PARTITION partition_name_list [UPDATE GLOBAL INDEXES];
partition_name_list:
partition_name [, partition_name ...]
説明
パーティションをTRUNCATEする際、1つまたは複数のパーティションのデータを削除できます。
サブパーティションテーブルのパーティションをTRUNCATEすると、そのパーティションおよび対応するサブパーティションのデータがすべて削除されます。
例
パーティションテーブル
tbl1_r内のM202001およびM202002パーティションのデータを削除し、グローバルインデックス情報を更新します。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 TRUNCATE PARTITION M202001,M202002 UPDATE GLOBAL INDEXES; Query OK, 0 rows affectedRange + Listパーティションのサブパーティションテーブル
t2_f_rlのパーティションp0およびp1を削除します。obclient> ALTER TABLE t2_f_rl TRUNCATE PARTITION p0,p1;
サブパーティションのTRUNCATE
ビジネスニーズに応じて、サブパーティションテーブル内のサブパーティションをTRUNCATEできます。
構文
ALTER TABLE table_name TRUNCATE SUBPARTITION subpartition_name_list[ UPDATE GLOBAL INDEXES ];
subpartition_name_list:
subpartition_name[, subpartition_name ...]
説明
サブパーティションをTRUNCATEする際、1つまたは複数のサブパーティションのデータをすべて削除することができます。
例
パーティションテーブルt2_f_lrのパーティションp1下のサブパーティションsp3とsp4を削除し、グローバルインデックス情報を更新します。
obclient> CREATE TABLE t2_f_rl(col1 INT,col2 VARCHAR2(50))
PARTITION BY RANGE(col1)
SUBPARTITION BY LIST(col2)
(PARTITION p0 VALUES LESS THAN(100)
(SUBPARTITION sp0 VALUES('01'),
SUBPARTITION sp1 VALUES('02')
),
PARTITION p1 VALUES LESS THAN(200)
(SUBPARTITION sp2 VALUES('01'),
SUBPARTITION sp3 VALUES('02'),
SUBPARTITION sp4 VALUES('03')
)
);
Query OK, 0 rows affected
obclient> ALTER TABLE t2_f_rl TRUNCATE SUBPARTITION sp3,sp4 UPDATE GLOBAL INDEXES;
Query OK, 0 rows affected