oracle数据库学习之表分区
2016-09-02 17:13
323 查看
先来看一个需求案例:
需求:在sales表中添加一个分区,最后这个分区信息为:
p1 less than(5000)
p2 less than(10000)
p3 less than(15000)
p4 less than(maxvalue)
要求以前的数据不能丢失。
分析:要更改后的分区信息不仅仅是多了p4分区,还要将原来的p3分区改成p4,所以这里要先备份原来 p3分区的信息,再添加。
先备份p3分区中的数据
删除最高的那个分区
查看现有的分区
创建新分区
查看索引
重建索引
将原来的数据还原
删除备份表
ok,到此已经完成了需求,现在可以查询一下是否已经更改了。
查看p3分区
另外还有几个分区操作:
截断分区 –删除指定分区中的数据
合并分区
拆分分区
经过对数据库进行分析发现这个时间的数据库资源使用非常严重, CPU的使用率达到了80%,但此时数据库的压力并不大,通过进一步的分析发现数据库中运行了
大量的这样的语句:
通过与开发单位联系知道他们有一个定时任务在凌晨2点后开始执行,删除1个月前的数据以便释放空间.
此时一个月差不多有1000W条数据这样删除的开销非常的大。
解决方案 : 可以使用分区来解决这个问题. 设定保留历史数据的规则是: 删除最早一个月的数据。 按照这个需求,将需要删除的数据的表修改为分区表,
按照每个月一个分区的方式来创建分区 这样删除操作就变成了删除分区了
需求:在sales表中添加一个分区,最后这个分区信息为:
p1 less than(5000)
p2 less than(10000)
p3 less than(15000)
p4 less than(maxvalue)
要求以前的数据不能丢失。
create table sales( pid number(10) primary key, sale number(8,2) )partition by range(sale)( --按销售额分区 partition p1 values less than(5000), partition p2 values less than(10000), partition p3 values less than(maxvalue) );
分析:要更改后的分区信息不仅仅是多了p4分区,还要将原来的p3分区改成p4,所以这里要先备份原来 p3分区的信息,再添加。
先备份p3分区中的数据
create table temp as select *from sales partition(p3); select *from temp;
删除最高的那个分区
alter table sales drop partition p3;
查看现有的分区
select *from user_tab_partitions where table_name='SALES';
创建新分区
alter table sales add partition p3 values less than(12000); alter table sales add partition p4 values less than(maxvalue);
查看索引
select *from user_indexes;
重建索引
alter index SYS_C0011609 rebuild;
将原来的数据还原
insert into sales select *from temp;
删除备份表
drop table temp;
ok,到此已经完成了需求,现在可以查询一下是否已经更改了。
查看p3分区
select *from sales partition(p3);
另外还有几个分区操作:
截断分区 –删除指定分区中的数据
alter table sales truncate partition p4;
合并分区
alter table sales merge partition p2,p3 into partition p3;
拆分分区
alter table sales split partition p3 at(8000) into (partition p2,partition p3);
海量数据优化_分区索引与删除的关系
案例: 有一个项目团队发现他们的项目上线后会在上午的时候接到用户投诉查询缓慢但并不阻塞只不过时间比正常时慢很多经过对数据库进行分析发现这个时间的数据库资源使用非常严重, CPU的使用率达到了80%,但此时数据库的压力并不大,通过进一步的分析发现数据库中运行了
大量的这样的语句:
delete from t_name where j_time<to_date( '2015-04-04','yyyy-mm-dd');
通过与开发单位联系知道他们有一个定时任务在凌晨2点后开始执行,删除1个月前的数据以便释放空间.
此时一个月差不多有1000W条数据这样删除的开销非常的大。
解决方案 : 可以使用分区来解决这个问题. 设定保留历史数据的规则是: 删除最早一个月的数据。 按照这个需求,将需要删除的数据的表修改为分区表,
按照每个月一个分区的方式来创建分区 这样删除操作就变成了删除分区了
相关文章推荐
- oracle三大分区(好久没碰数据库拉,今天突然有人问然后就重新学习了一下嘿嘿嘿嘿)
- 学习数据库分区和虚表(Oracle)
- oracle数据库的学习
- Oracle 数据库的8个学习点
- ORACLE DBA学习笔记--启动和关闭数据库
- Oracle基础学习----DDL与数据库对象
- ORACLE学习之路--数据库的存储结构
- 安装Oracle 9i数据库服务器-转载--数据库开发学习
- 深入学习Oracle分区表及分区索引
- 在校生如何开始学习数据库(五) oracle数据学习总结
- 在校生如何开始学习数据库(四) oracle创建oracle数据库对象
- 【转】深入学习Oracle分区表及分区索引
- 数据库复习及Oracle学习
- [学习笔记]java+oracle 存储图片到数据库中 a---存储
- Oracle学习应用之数据库性能优化策略
- oracle数据库学习总结:数据库概念及相关信息查看
- oracle数据库学习总结在(一)
- Oracle 9i & 10g编程艺术-深入数据库体系结构——第13章:分区
- oracle 学习笔记1:数据库概述
- ORACLE学习之路--使用LOGMNR查看数据库日志。