最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

使用split对分区表再分区

来源:动视网 责编:小OO 时间:2025-10-03 19:34:40
文档

使用split对分区表再分区

使用split对分区表再分区个人分类:原创表justin本来按月分区,但是进入7月份,数据量暴涨,每天都有百万条之多,应开发要求,将其7月份及其以后的分区都改为按天分区目前该表最大分区到8月1号首先需要对7月份现有分区执行split操作,然后添加8月份以后的分区执行split操作语法如下altertablejustinsplitpartitionp1107at(to_date('2011-07-02','yyyy-mm-dd'))into(partitionp110701,partitionp
推荐度:
导读使用split对分区表再分区个人分类:原创表justin本来按月分区,但是进入7月份,数据量暴涨,每天都有百万条之多,应开发要求,将其7月份及其以后的分区都改为按天分区目前该表最大分区到8月1号首先需要对7月份现有分区执行split操作,然后添加8月份以后的分区执行split操作语法如下altertablejustinsplitpartitionp1107at(to_date('2011-07-02','yyyy-mm-dd'))into(partitionp110701,partitionp
使用split对分区表再分区

个人分类:原创

表justin本来按月分区,但是进入7月份,数据量暴涨,每天都有百万条之多,应开发要求,将其7月份及其以后的分区都改为按天分区

目前该表最大分区到8月1号

首先需要对7月份现有分区执行split操作,然后添加8月份以后的分区

执行split操作语法如下

alter table justin split partition p1107 at (to_date('2011-07-02','yyyy-mm-dd')) into (partition p110701,partition p1107);

该语句会使p1107和p110701上的索引全部失效,且生成大量redo

生成脚本

declare

v_date date;

v_cnt number := 0;

v_cur varchar2(5);

v_mon varchar2(5);--number := 0;

v_day varchar2(5);--number := 0;

begin

v_date := to_date('2011-07-01','yyyy-mm-dd');

for i in 1..30 loop

v_cur := to_char(v_date,'dd');

v_date := v_date + 1;

v_mon := to_char(v_date,'mm');

v_day := to_char(v_date,'dd');

dbms_output.put_line('alter table justin split partition p1107 at (to_date(''2011-'||v_mon||'-'||v_day||''',''yyyy-mm-dd'')) into (partition p11'||v_mon||v_cur||',partition p1107);');

dbms_output.put_line('exec dbms_lock.sleep(10);');

end loop;

end;

生成的脚本如下

alter table justin split partition p1107 at (to_date('2011-07-30','yyyy-mm-dd')) into (partition p110729,partition p1107);

exec dbms_lock.sleep(10);

alter table justin split partition p1107 at (to_date('2011-07-31','yyyy-mm-dd')) into (partition p110730,partition p1107);

exec dbms_lock.sleep(10);

执行完毕后 需要重建索引

declare

begin

for i in (select index_name,table_name from user_indexes where status ='UNUSABLE') loop

execute immediate 'alter index '||i.index_name||' rebuild online';

end loop;

for j in (select u.index_name,u.partition_name,ui.table_name from user_ind_partitions u,user_indexes ui where u.status ='UNUSABLE' and u.index_name = ui.index_name) loop

execute immediate 'alter index '||j.index_name|| ' rebuild partition '||j.partition_name||' online';

end loop;

end;

该表到8月1号过期,为其新增一年的分区

declare

v_date date;

v_cnt number := 0;

v_year varchar2(2);

v_curday varchar2(2);

v_mon varchar2(2);--number := 0;

v_day varchar2(2);--number := 0;

begin

v_date := to_date('2011-08-01','yyyy-mm-dd');

for i in 1..365 loop

v_year := to_char(v_date,'yy');

v_curday := to_char(v_date,'dd');

v_date := v_date + 1;

v_mon := to_char(v_date,'mm');

v_day := to_char(v_date,'dd');

dbms_output.put_line('alter table justin add partition P'||v_year||v_mon||v_curday||' values less than (to_date(''20'||v_year||'-'||v_mon||'-'||v_day||''',''yyyy-mm-dd''));');-- into (partition p11'||v_mon||v_curday||',partition p1107);');

end loop;

end;

输出结果如下

alter table justin add partition P110801 values less than (to_date('2011-08-02','yyyy-mm-dd'));

alter table justin add partition P110802 values less t

han (to_date('2011-08-03','yyyy-mm-dd'));

alter table justin add partition P110803 values less than (to_date('2011-08-04','yyyy-mm-dd'));

文档

使用split对分区表再分区

使用split对分区表再分区个人分类:原创表justin本来按月分区,但是进入7月份,数据量暴涨,每天都有百万条之多,应开发要求,将其7月份及其以后的分区都改为按天分区目前该表最大分区到8月1号首先需要对7月份现有分区执行split操作,然后添加8月份以后的分区执行split操作语法如下altertablejustinsplitpartitionp1107at(to_date('2011-07-02','yyyy-mm-dd'))into(partitionp110701,partitionp
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top