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

Oracle 普通表至分区表的分区交换

交换分区
这种方法只是对数据字典中分区和表的定义进行了修改,没有数据的修改或复制,效率最高。适用于包含大数据量的表转到分区表中的一个分区的操作。尽量在业务空闲的时候进行操作。

交换分区的操作步骤如下
1、创建分区表p_tb,假设有2个分区,P1,P2.
2、创建表tb_p1存放P1规则的数据。
3、创建表tb_p2 存放P2规则的数据。
4、用表tb_p1 和P1 分区交换,把表tb_p1的数据放到到P1分区
5、用表tb_p2和P2 分区交换,把表tb_p2的数据存放到P2分区。

测试交换
创建分区表:
create table p_tb
 (id number,time date)
 partition by range(time)
 (
 partition p1 values less than (to_date('2024-02-01', 'yyyy-mm-dd')),
 partition p2 values less than (to_date('2024-03-01', 'yyyy-mm-dd'))
 );

创建2个分别对应分区的基表并插入数据:
CREATE TABLE tb_p1(id number,t_time date);
CREATE TABLE tb_p2(id number,t_time date);
insert into tb_p1 values(1,to_date('2024-01-10','YYYY-MM-DD'));
insert into tb_p1 values(2,to_date('2024-01-20','YYYY-MM-DD'));
insert into tb_p2 values(1,to_date('2024-02-10','YYYY-MM-DD'));
insert into tb_p2 values(2,to_date('2024-02-20','YYYY-MM-DD'));
commit;

将2个普通表与2个分区进行交换
alter table p_tb exchange partition p1 with table tb_p1;
alter table p_tb exchange partition p2 with table tb_p2;

查询2个分区交换后的数据
select count(*) from p_tb partition(p1);
COUNT(*)
----------
       2
select count(*) from p_tb partition(p2);
COUNT(*)
----------
       2
注意:看到交换后数据和之前的基表数据一致

在查询原来的2个基表,发现数据已经没有了,数据已经交换至分区表对应的分区
select count(*) from tb_p2;
COUNT(*)
----------
       0
select count(*) from tb_p1;
COUNT(*)
----------
       0

注意:一般情况下,我们在创建分区表的时候,都会创建一个MAX分区,用来存放不匹配分区规则的数据。这里我只创建了2个分区,没有创建maxvalue分区。 现在我来插入一条不满足规则的数据,看结果
insert into p_tb values(3,to_date('2024-03-10','yyyy-mm-dd'));
*
第 1 行出现错误:
ORA-14400: 插入的分区关键字未映射到任何分区
注意:如果插入的数据不满足分区规则,并且没有MAX分区则会会报 ORA-14400 错误。


http://www.kler.cn/a/453872.html

相关文章:

  • chrome缓存机制以及验证缓存机制
  • springboot/ssm图书大厦图书管理系统Java代码编写web图书借阅项目
  • uniapp抖音小程序,如何一键获取用户手机号
  • ES学习module模块化(十二)
  • 新建一个springboot项目
  • 中关村科金智能客服机器人如何解决客户个性化需求与标准化服务之间的矛盾?
  • 深度学习实战103-基于KDD Cup 99数据集的搭建神经网络的检测系统(NIDS),通过对网络流量数据进行分析,提供完整代码
  • DALFox-一款XSS自动化扫描工具
  • GA-Kmeans-Transformer时序聚类+状态识别组合模型
  • vscode修改中文显示格式
  • transformer用作分类任务
  • Golang 的并发优势
  • 数据结构(哈希表(上)纯概念版)
  • 深入理解 MySQL 架构
  • (七)循环神经网络_LSTM长短期记忆网络
  • STM32单片机芯片与内部45 UART 不定长度接收 标志位结束 定时器超时 串口空闲中断
  • 【有作图代码】KL散度与自由能F:高斯分布下的“距离度量”与“能量计算”
  • 自定义 Celery的logging模块
  • asp.net 高校学生勤工俭学系统设计与实现
  • 【Emscripten执行遇到】emcc command not found