暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase分区表使用

Ty3306 2023-01-26
1666

OceanBase Oracle租户创建分区表简述:
创建分区
创建时间分区,二级分区(分9个区)为KEY的 RANGE+HASH分区(HASH分区,不写分区数的默认一个分区(即不分区)一级需要加[PARTITIONS 分区数]、二级分区加 [SUBPARTITIONS 分区数]

CREATE TABLE TEST_1 (
C1 VARCHAR(10 ) ,
C2 VARCHAR(50 ) ,
C3 VARCHAR(50 ) ,
C4 VARCHAR(10 ) ,
C5 VARCHAR(10 ) ,
C6 DATE ,
C7 DECIMAL(18,5) ,,
C8 DATE )
partition by RANGE (C8)
SUBPARTITION BY HASH(C1,C2) SUBPARTITIONS 9
(
partition p0 values less than(TO_DATE('2021-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition p1 values less than(TO_DATE('2022-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition p2 values less than(TO_DATE('2023-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition p3 values less than(TO_DATE('2024-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
partition p4 values less than(TO_DATE('2025-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'))
);

 
查询二级分区表分区情况
SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_NAME FROM USER_TAB_SUBPARTITIONS WHERE TABLE_NAME = 'TEST_1'
TABLE_NAME |PARTITION_NAME|SUBPARTITION_NAME
----------------|--------------|-----------------
TEST_1|P0 |P0sp0
TEST_1|P0 |P0sp1
TEST_1|P0 |P0sp2
TEST_1|P0 |P0sp3
TEST_1|P0 |P0sp4
TEST_1|P0 |P0sp5
TEST_1|P0 |P0sp6
TEST_1|P0 |P0sp7
TEST_1|P0 |P0sp8
TEST_1|P1 |P1sp0
TEST_1|P1 |P1sp1
TEST_1|P1 |P1sp2
TEST_1|P1 |P1sp3
TEST_1|P1 |P1sp4
TEST_1|P1 |P1sp5
TEST_1|P1 |P1sp6
TEST_1|P1 |P1sp7
TEST_1|P1 |P1sp8
TEST_1|P2 |P2sp0
TEST_1|P2 |P2sp1
TEST_1|P2 |P2sp2
TEST_1|P2 |P2sp3
TEST_1|P2 |P2sp4
TEST_1|P2 |P2sp5
TEST_1|P2 |P2sp6
TEST_1|P2 |P2sp7
TEST_1|P2 |P2sp8
TEST_1|P3 |P3sp0
TEST_1|P3 |P3sp1
TEST_1|P3 |P3sp2
TEST_1|P3 |P3sp3
TEST_1|P3 |P3sp4
TEST_1|P3 |P3sp5
TEST_1|P3 |P3sp6
TEST_1|P3 |P3sp7
TEST_1|P3 |P3sp8
TEST_1|P4 |P4sp0
TEST_1|P4 |P4sp1
TEST_1|P4 |P4sp2
TEST_1|P4 |P4sp3
TEST_1|P4 |P4sp4
TEST_1|P4 |P4sp5
TEST_1|P4 |P4sp6
TEST_1|P4 |P4sp7
TEST_1|P4 |P4sp8

 
查询一级分区情况
SELECT TABLE_NAME,PARTITION_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'TEST_1'

SELECT DISTINCT TABLE_NAME,PARTITION_NAME FROM USER_TAB_SUBPARTITIONS WHERE TABLE_NAME = 'TEST_1'

TABLE_NAME |PARTITION_NAME|
----------------|--------------|
TEST_1|P0 |
TEST_1|P1 |
TEST_1|P2 |
TEST_1|P3 |
TEST_1|P4 |
 
删除一级分区
ALTER TABLE TEST_1 DROP PARTITION p4 UPDATE GLOBAL INDEXES;
 
注: 删除二级分区表中的一级分区时,请尽量避免该分区上存在活动的事务或查询,否则可能会导致 SQL 语句报错,或者出现一些异常情况。在
sys 租户下,通过事务状态表 __all_virtual_trans_stat 可以查询到当前还未结束的事务上下文状态。

删除一级分区会同时删除该一级分区的定义和其对应的二级分区及数据。

对于 Oracle 模式下有全局索引的二级分区表,删除一级分区时,需要通过在 ALTER TABLE 语句中添加 UPDATE GLOBAL
INDEXES 关键字的方式来更新全局索引信息;如果未添加 UPDATE GLOBAL INDEXES
关键字,则删除一级分区后,该分区表上的全局索引会处于不可用状态。

添加一级分区,二级分区模式化的无需特殊处理
ALTER TABLE TEST_1 ADD PARTITION p4 values less than(TO_DATE('2025-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'));
 
注:添加一级分区时无需收集全局索引

创建本地索引
CREATE INDEX IDX_TEST_1_CUSTNO ON TEST_1(C6) LOCAL;

有兴趣的可以参考官网资料:
创建一级分区表
CREATE INDEX





原文链接:https://blog.csdn.net/yang_song_yao/article/details/123839715

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论