当前位置: 首页 > news >正文

OceanBase V4.2特性解析:简化分区表重命名功能

1. 背景

OceanBase数据库兼容hash、range、list等多种分区表类型,并支持二级分区,这些特性赋予了OceanBase数据库卓越的可扩展性。分区表的分区名称可由用户根据需求自行设定,或依据相应的命名规则由系统自动化生成。在实际的用户业务场景中,用户常会遇到需要调整或修改分区名称的情况。

在之前的OceanBase数据库版本中,要修改分区名,需要重建分区表并进行数据迁移,操作繁琐。在Oracle数据库中,分区表重命名功能只需要一条简单的SQL即可实现。所以,OceanBase 4.2.1 版本兼容了Oracle数据库的分区表重命名功能,提升分区表易用性。

2. 分区重命名

2.1. 语法说明

OceanBase数据库从 4.2.1 版本开始支持通过alter table rename的方式进行分区重命名,具体语法如下所示:

ALTER TABLE table_name RENAME { PARTITION | SUBPARITION } partition_name TO new_name

字段说明

字段名称描述
table_name指定要重命名分区的分区表名称。
partition指定要修改分区表的一级分区。
subpartition指定要修改分区表的二级分区。
partition_name指定要修改分区的分区名。
new_name指定要修改分区的新分区名。

可见性

分区重命名操作会修改主表的相关分区,但是不会影响到局部索引的分区名。在完成该操作后,可以在与主表分区相关的视图如USER_TAB_PARTITIONS,USER_TAB_SUBPARTITIONS确认分区名修改后的结果。

2.2. 功能实践

下面以range类型的二级分区表为例,展示分区重命名功能的实际操作及效果。

CREATE TABLE range_range_table(col1 INT, col2 INT, col3 INT)
PARTITION BY RANGE(col1)
SUBPARTITION BY RANGE(col2)
(PARTITION p0 VALUES LESS THAN(100)
(SUBPARTITION sp0 VALUES LESS THAN(100),
SUBPARTITION sp1 VALUES LESS THAN(200)
),
PARTITION p1 VALUES LESS THAN(200)
(SUBPARTITION sp2 VALUES LESS THAN(100),
SUBPARTITION sp3 VALUES LESS THAN(200),
SUBPARTITION sp4 VALUES LESS THAN(300)
)
);
CREATE INDEX local_idx_for_range_range_tb on range_range_table (col1) local;

场景1. 修改一级分区名

1.查看分区名
SELECT partition_name FROM SYS.USER_TAB_PARTITIONS WHERE table_name = 'RANGE_RANGE_TABLE';
+----------------+
| PARTITION_NAME |
+----------------+
| P0             |
| P1             |
+----------------+
2.重命名一级分区p0
ALTER TABLE range_range_table RENAME PARTITION p0 TO p10;
3.查看分区名
SELECT partition_name FROM SYS.USER_TAB_PARTITIONS WHERE table_name = 'RANGE_RANGE_TABLE';
+----------------+
| PARTITION_NAME |
+----------------+
| P10            |
| P1             |
+----------------+

场景2. 修改二级分区名

1.查看分区名
SELECT partition_name, subpartition_name FROM SYS.USER_TAB_SUBPARTITIONS WHERE table_name = 'RANGE_RANGE_TABLE';
+----------------+-------------------+
| PARTITION_NAME | SUBPARTITION_NAME |
+----------------+-------------------+
| P0             | SP1               |
| P0             | SP0               |
| P1             | SP4               |
| P1             | SP3               |
| P1             | SP2               |
+----------------+-------------------+
2.重命名二级分区sp0
ALTER TABLE range_range_table RENAME SUBPARTITION sp0 TO sp10;
3.查看新分区名
SELECT partition_name, subpartition_name FROM SYS.USER_TAB_SUBPARTITIONS WHERE table_name = 'RANGE_RANGE_TABLE';
+----------------+-------------------+
| PARTITION_NAME | SUBPARTITION_NAME |
+----------------+-------------------+
| P0             | SP1               |
| P0             | SP10              |
| P1             | SP4               |
| P1             | SP3               |
| P1             | SP2               |
+----------------+-------------------+

场景3. 修改分区名与已有分区名冲突时会报错

ALTER TABLE range_range_table RENAME PARTITION p0 TO p1;
ORA-14082: New partition name P1 must differ from that of any other partition or subpartition of the object.
ALTER TABLE range_range_table RENAME SUBPARTITION sp0 TO sp1;
ORA-14263: New subpartition name SP1 must differ from that of any other partition or subpartition of the object.

场景4. 修改分区的分区名不存在时报错

ALTER TABLE range_range_table RENAME PARTITION p10 TO p100;
ORA-02149: Specified partition does not exist
ALTER TABLE range_range_table RENAME SUBPARTITION sp11 TO sp111;
ORA-14251: Specified subpartition does not exist

2.3. 使用限制

  • 分区重命名过程中,如果与持有相关分区锁资源的DML产生冲突会阻塞分区名修改操作,直到DML释放相关分区锁资源。
  • 由于Oracle对于分区名的辨别是大小写敏感的,而OB对于分区名的辨别是大小写不敏感的。因此在Oracle中,可以将分区重命名为大小写不同的分区名,而在OB中进行该操作会报错分区名已存在。
ALTER TABLE range_range_table RENAME PARTITION p0 to "p0";
ORA-14082: New partition name p0 must differ from that of any other partition or subpartition of the object.
  • 分区重命名只修改主表分区名,不会修改主表所属局部索引的分区名。分区重命名后进行drop column等会重建局部索引的行为时,局部索引的分区名会变为跟主表分区名一致。
1.查看分区名
SELECT partition_name, subpartition_name FROM SYS.USER_TAB_SUBPARTITIONS WHERE table_name = 'RANGE_RANGE_TABLE';
+----------------+-------------------+
| PARTITION_NAME | SUBPARTITION_NAME |
+----------------+-------------------+
| P0             | SP1               |
| P0             | SP0               |
| P1             | SP4               |
| P1             | SP3               |
| P1             | SP2               |
+----------------+-------------------+
2.重命名一级分区p0和二级分区sp0
ALTER TABLE range_range_table RENAME PARTITION p0 TO p10;
ALTER TABLE range_range_table RENAME SUBPARTITION sp0 TO sp10;
3.查看主表新分区名
SELECT partition_name, subpartition_name FROM SYS.USER_TAB_SUBPARTITIONS WHERE table_name = 'RANGE_RANGE_TABLE';
+----------------+-------------------+
| PARTITION_NAME | SUBPARTITION_NAME |
+----------------+-------------------+
| P10            | SP1               |
| P10            | SP10              |
| P1             | SP4               |
| P1             | SP3               |
| P1             | SP2               |
+----------------+-------------------+
4.查看局部索引分区名
SELECT partition_name, subpartition_name FROM SYS.USER_IND_SUBPARTITIONS WHERE index_name = 'LOCAL_IDX_FOR_RANGE_RANGE_TB';
+----------------+-------------------+
| PARTITION_NAME | SUBPARTITION_NAME |
+----------------+-------------------+
| P0             | SP1               |
| P0             | SP0               |
| P1             | SP4               |
| P1             | SP3               |
| P1             | SP2               |
+----------------+-------------------+
5.删列触发数据重整
ALTER TABLE range_range_table DROP COLUMN col3;
6.查看局部索引分区名
SELECT partition_name, subpartition_name FROM SYS.USER_IND_SUBPARTITIONS WHERE index_name = 'LOCAL_IDX_FOR_RANGE_RANGE_TB';
+----------------+-------------------+
| PARTITION_NAME | SUBPARTITION_NAME |
+----------------+-------------------+
| P10            | SP1               |
| P10            | SP10              |
| P1             | SP4               |
| P1             | SP3               |
| P1             | SP2               |
+----------------+-------------------+
  • mysql租户暂不支持该功能。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 0101中文乱码-BufferedImage-图片处理
  • 搭载海光3350处理器的高速流量处理模块(用于高速网络数据处理设备应用)
  • Java设计模式-抽象工厂模式-一次性理解透
  • 爬虫配置代理:保护隐私有效地抓取数据
  • C#多线程并发编程深度探索:解锁async、await、Task与lock等关键字的奥秘
  • 【生成式人工智能-八-大型语言模型的能力评估】
  • JAVA集中学习第五周学习记录(二)
  • Spring Boot 快速入门样例【后端 3】
  • Linux Shell实例
  • Python 通过UDP传输超过64k的信息
  • 深度学习入门案例:运用神经网络实现价格分类
  • linux中守护进程管理方式
  • 【学习笔记】Day 14
  • 和等于 k 的最长子数组长度(LeetCode)
  • MySQL windows版本安装
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 「译」Node.js Streams 基础
  • Angular2开发踩坑系列-生产环境编译
  • extjs4学习之配置
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript创建对象的四种方式
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Markdown 语法简单说明
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Spring-boot 启动时碰到的错误
  • Web Storage相关
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我是如何设计 Upload 上传组件的
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 选择阿里云数据库HBase版十大理由
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • (26)4.7 字符函数和字符串函数
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (论文阅读30/100)Convolutional Pose Machines
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • ***监测系统的构建(chkrootkit )
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .net访问oracle数据库性能问题
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日
  • [java刷算法]牛客—剑指offer链表有环的入口、反转链表、合并排序链表
  • [Linux] 文件/目录命令
  • [Linux](16)网络编程:网络概述,网络基本原理,套接字,UDP,TCP,并发服务器编程,守护(精灵)进程
  • [Linux安全运维] OpenVPN部署
  • [MT8766][Android12] 取消WIFI热点超过10分钟没有连接自动关闭设定
  • [Perl] Find Shell on your Wordpress site
  • [Poj 1015] Jury Compromise 解题报告 (完全背包)