您可以根据业务需要,清空分区表中分区的数据,保留分区结构。
分区表对 Truncate 分区操作的支持情况
OceanBase 数据库的 Oracle 模式中:
对于一级分区表,当前仅支持对 Range 分区和 List 分区执行 Truncate 分区操作,暂不支持对 Hash 分区执行 Truncate 分区操作。
对于二级分区表,当前仅支持对 Range/List 类型(组合)的分区执行 Truncate 分区操作。
OceanBase 数据库的 Oracle 模式中,一级分区表和二级分区表对 Truncate 分区操作的具体支持情况如下表所示。
分区表 | 分区类型 | Truncate 一级分区 | Truncate 二级分区 |
---|---|---|---|
一级分区表 | Range / List | 支持 | - |
一级分区表 | Hash | 不支持 | - |
二级分区表 | Range + Range / Range + List | 支持 | 支持 |
二级分区表 | Range + Hash | 不支持 | 不支持 |
二级分区表 | List + Range / List + List | 支持 | 支持 |
二级分区表 | List + Hash | 不支持 | 不支持 |
二级分区表 | Hash + Range / Hash + List / Hash + Hash | 不支持 | 不支持 |
Truncate 分区操作说明
在执行 Truncate 分区操作前,需要了解以下信息:
Truncate 分区时,请尽量保证待 Truncate 的分区上不存在活动的事务或查询,否则可能会导致 SQL 语句报错,或者出现一些异常情况。您可以在
sys
租户下,通过视图oceanbase.GV$OB_TRANSACTION_PARTICIPANTS
查询当前还未结束的事务上下文状态。Oracle 模式下,对于有全局索引的一级或二级分区表,Truncate 分区时,需要通过在
ALTER TABLE
语句中添加UPDATE GLOBAL INDEXES
关键字的方式来更新全局索引信息;如果未添加UPDATE GLOBAL INDEXES
关键字,则 Truncate 分区后,该分区表上的全局索引会处于不可用状态。
Truncate 一级分区
您可以根据业务需要,Truncate 一级分区表或二级分区表中的一级分区。
语法
ALTER TABLE table_name TRUNCATE PARTITION partition_name_list [UPDATE GLOBAL INDEXES]; partition_name_list: partition_name [, partition_name ...]
复制
说明
Truncate 一级分区时,支持将一个或多个分区中的数据清空。
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 affected
复制清空 Range + 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 二级分区时,支持将一个或多个二级分区中的数据全部清空。
示例
清空分区表 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_lr TRUNCATE SUBPARTITION sp3,sp4 UPDATE GLOBAL INDEXES; Query OK, 0 rows affected
复制
评论
