[转载]将按月分区的表改为按天分区

今天在找数据库分区表按月分区转成按天分区的方案,找到了原团队老友的文章.   想想我们大团队以前对整个数据库行业也算一定影响力的. 可惜现在都各散东西了.

---转原文

随着业务的快速发展,数据库中表的数据增量也会明显上升,之前一个月只有10w数据的,现在可能一天就有10w,这个时候如果还是按照以前按月分区的策略进行访问,那么sql扫描单个分区要访问300w的数据,为了保证效率,可以将表改为按天分区,并对sql谓词条件进行调整使得只访问单天的一个分区,这样性能就得到了保证。


一般来说,按月分区的表都是range分区,下面来介绍将按月分区改为按天分区的方法:


1.range间隔分区的情况


间隔分区无法手工add partition ,会出现如下报错:

ORA-14760 ADD PARTITION is not permitted on Interval partitioned objects 
思路是先改为非间隔(Interval)分区 ,然后手工按天add partition ,并建议再改成按天间隔,详见如下案列:
create table tmp_test_range
(
id number,
name varchar2(30),
int_date date
)
PARTITION BY RANGE(int_date)
interval(NUMTOYMINTERVAL (1,'MONTH'))
(
partition P201511 values less than(to_date('20151201','yyyymmdd')),
partition P201512 values less than(to_date('20160101','yyyymmdd')));



ALTER TABLE tmp_test_range SET INTERVAL ();


alter table tmp_test_range add partition P20160101 values less than(to_date('20160102','yyyymmdd'));

ALTER TABLE tmp_test_range SET INTERVAL (NUMTODSINTERVAL(1,'DAY'));


2.range非间隔分区的情况

思路是删除一些还没有使用的月分区,然后手工按天add partition ,并建议再改成按天间隔


create table tmp_test_range
(
id number,
name varchar2(30),
int_date date
)
PARTITION BY RANGE(int_date)
(
partition P201511 values less than(to_date('20151201','yyyymmdd')),
partition P201512 values less than(to_date('20160101','yyyymmdd')),

partition P201601 values less than(to_date('20160201','yyyymmdd')));

alter table tmp_test_range drop partition P201601;

alter table tmp_test_range add partition P20160101 values less than(to_date('20160102','yyyymmdd')); --新增一个起始分区


ALTER TABLE tmp_test_range SET INTERVAL (NUMTODSINTERVAL(1,'DAY')); 


注意range分区表添加分区并不影响全局索引和本地分区索引,也不影响当前分区表的任何操作

但修改interval的属性会造成短暂的锁并引起相关sql游标失效 
找个业务低峰,没啥问题.大胆干


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10248702/viewspace-2146318/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10248702/viewspace-2146318/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值