Oracle_为分区表添加新分区
关键字:
- exchange partition
- unused
- ORA-14097
- ORA-14323
- CTAS
需求:添加分区
离线消息表OFFLMG,在原有分区的基础上添加一个分区。
分析:数据量大
1.该表有50张,从OFFLMG_0到OFFLMG_49,数据量比较大,最少的一张有几千万数据,50G左右,最大的一张有几亿数据,超过300G.
2.该表为list分区表,有default分区,且default分区数据量比较大,占全表数据量的95%以上
3.该表在三个月前做了联机重定义,将原来未分区的表做了分区,分区后存量数据放在default分区,新写入的数据都在其他分区中
4.default分区数据现在在业务中基本上不用(业务上离线消息只取7天前的),当前default分区只作为历史数据保存
操作:
- 尝试一:add
直接add分区
alter table OFFLMG_0
add partition P_10
values(10);
执行报错,错误代码ORA-14323:list分区表中有default分区存在情况下不能add分区
尝试二:split
spilt分区(P_D分区为default分区)
alter table OFFLMG_0
split partition P_D
values (10)
into (
partition P_10,partition P_D
);
执行成功,但是比较慢(17301165条数据,34.79G,耗时162.07秒),如果在生产上这样搞的话,估计投产当天跑一天都跑不完,这是无法接受的情况,只能另寻他路了
尝试三:exchange
交换分区,创建一张结构相同的表OFFLMG_0_DEFAULT,将default分区交换到新表。
create table OFFLMG_0_DEFAULT
tablespace IMLOG
as (
select * from OFFLMG_0 where 1=2
);
alter table OFFLMG_0
exchange partition P_D
with table OFFLMG_0_DEFAULT;
执行报错,错误代码ORA-14097: ALTER TABLE EXCHANGE PARTITION 中的列类型或大小不匹配
这我就不能忍了,CTAS的表竟然说表结构不相同,经过分析,可能这张表维护时间超过了三年,可能之前经过了字段的添加和删除,有一些unused的字段存在
执行查询:
select table_name,column_name,data_type,data_length,column_id
from user_tab_cols
where table_name = 'OFFLMG_0';
果然,有一行记录明显不对
OFFLMG_0 SYS_C00011_15072514:46:10$ VARCHAR2 255
这个字段SYS_C00011_15072514:46:10$说明在2015年7月25号的时候确实删除了一个字段,只能看到这个字段是VARCHAR2类型的,大小255,不能看到字段名.
怎么办,怎么办,几个人合计了下,要不把新表也加个相同类型的字段,然后给set unused得了,试一试
--建新表前判断有则删除
DROP TABLE OFFLMG_0_DEFAULT CASCADE CONSTRAINTS;
--按照原有表结构创建新表
create table OFFLMG_0_DEFAULT
tablespace IMLOG
as (
select * from OFFLMG_0 where 1=2);
--添加一个字段,名字随意,用来set unused的
ALTER TABLE OFFLMG_0_DEFAULT
ADD (TEST VARCHAR2(255));
--将这个字段set unused
alter table OFFLMG_0_DEFAULT set unused(TEST);
--交换原表的default分区到新表
alter table OFFLMG_0
exchange partition P_D
with table OFFLMG_0_DEFAULT;
--删除原表default分区
alter table OFFLMG_0
drop partition P_D;
--为原表添加新分区
alter table OFFLMG_0
add partition P_10
values(10);
--为原表添加default分区
alter table OFFLMG_0
add partition P_D
values(default);
执行成功(17301165条数据,34.79G,耗时3毫秒)
Oracle_为分区表添加新分区相关推荐
- Ubuntu下添加新分区并设置挂载点
Ubuntu下添加新分区并设置挂载点 最近在做Android项目,可是解压根文件系统以后,就报警说硬盘不够.当初设置使用的大小为15G.不过扩展分区还是很方便的.当然首先你得设置添加使用的硬盘大小,这 ...
- oracle无法分区,oracle已存在的表添加新分区的方法
现在有一张表如下: create table WRITE_USER ( area_code VARCHAR2(8), user_no VARCH ...
- Android11.0(R) MTK平台添加新分区
mtk 平台增加一个新分区test,修改文件列表如下 modified: device/mediatek/mt6765/init.mt6765.rcmodified: device/mediatek/ ...
- AndroidQ(10.0) MTK平台添加新分区
65 平台增加一个新分区,用于保存特殊数据,修改文件列表如下 modified: build/make/core/Makefilemodified: build/make/core/config.mk ...
- linux新建挂载目录命令,告诉你Ubuntu添加新分区并设置挂载点的方法及命令
最近在Ubuntu下做Android项目,可是解压根文件系统以后,就报警说硬盘不够.当初设置使用的大小为15G.不过扩展分区还是很方便的.当然首先你得设置添加使用的硬盘大小,这次我一下提高到了30G, ...
- Centos 7 添加新磁盘
==========运维之路 环境如下 [root@Centos ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [r ...
- vmware添加新硬盘 挂载新硬盘 硬盘扩容
vmware添加新硬盘 挂载新硬盘 硬盘扩容 平时都用虚拟机做实验,做一些linux方面的开发应用,但是很烦人的是经常遇到预先装好的linux虚拟机的硬盘空间过小 现在好多软件都没法安装了.自己重新装 ...
- Mysql分区表概述、分区类型、分区管理
另有一篇简单易懂的好文章帮助学习 Mysql分区表的原理和优缺点以及注意点 一.分区概述 分区是指根据一定的规则,数据库把一个表分解成多个更小的.更容易管理的部分.分区有利于管理非常大的表. MySQ ...
- 计算机里有个不能进入的磁盘分区,新电脑只有一个分区怎么办? 教你们如何不进pe给硬盘创建新分区!...
很多朋友新电脑刚买回来打开发现明明自己机械硬盘1T或者1T机械加128G固态,但是却只有一个或者两个分区,但是又不会分区 现在教大家如何不用老毛桃大白菜之类的进pe系统里面就能直接创建新分区 1 Wi ...
- 计算机只有一块硬盘分区,如果新计算机只有一个分区怎么办?教您如何在不输入pe的情况下为硬盘创建新分区!...
许多朋友刚买了一台新计算机并打开它,发现他们的机械硬盘1T或1T机械加128G固态硬盘,但是只有一个或两个分区,但是它们不会分区 现在教您如何在不进入pe系统的情况下直接创建新分区,例如旧的毛桃大白菜 ...
最新文章
- 2022秋招算法岗卷成人间地狱!高薪惹眼,招录比100:1
- linux将字符串转小写_Python教程第10讲:字符串的使用
- 大数开方(C++版)
- 2015蓝桥杯省赛---java---A---2(星系炸弹)
- VUE 解决:Property or method “deleteFun“ is not defined on the instance but referenced during render.
- 三个关键词,看懂AI未来趋势丨不仅仅是高薪
- 瑞星对Windows7捆绑杀毒软件等消息的回应
- 编程细节 —— 按值传递、按引用传递(final、const)
- 语音识别asr是什么
- ajax同步时,loading加载不显示(谷歌浏览器)
- [poj3252]Round Numbers_数位dp
- c语言语法——c语言时间类型
- 超好用的开源 IP 地址管理系统,告别传统 Excel 统计方式!
- viper4android脉冲样本,V4A脉冲反馈样本第一弹 爽爆
- linux 压缩文件 zip,linux zip命令压缩zip文件详解
- 魔兽争霸3地图加密,支持重制版-魔兽争霸3地图加密实操,魔兽地图加密工具
- springboot集成solr实现全局搜索系列
- abp 使用mysql_ABP Vnext使用mysql数据库
- 小程序记账项目源码-采用云开发
- 工程师的基本功是什么?该如何练习?
热门文章
- mac mysql read only_mac Read-Only filesystem
- DataSet自定义添加table并添加数据
- linux分区用来支持虚拟内存,Linux分区方案
- 大专php应用开发期末考试,php程序员笔试题及答案1.doc
- Mysql将多个查询结果并列显示
- tcp程序——回声客户端
- matlab条形图颜色矩阵,Matlab条形图 – 根据符号和大小填充不同颜色的条形图
- java代码如何降低重复率_JAVA 如何实现大文本去除重复行
- 管理新语:年龄经验并不能让一个医生律师厉害,而是他本来就厉害
- 同样是百度输入法,定制远没有原版好用