使用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 than (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'));
目前該表最大分割槽到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 than (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'));
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-703351/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 範圍分割槽表和INTERVAL分割槽表對於SPLIT分割槽的區別
- oracle分割槽表和分割槽表exchangeOracle
- 全面學習分割槽表及分割槽索引(13)--分隔表分割槽索引
- 如何查詢分割槽表的分割槽及子分割槽
- Oracle分割槽表及分割槽索引Oracle索引
- INTERVAL分割槽表鎖分割槽操作
- 分割槽表split操作及maxvalue處理
- oracle分割槽表和非分割槽表exchangeOracle
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引
- 全面學習分割槽表及分割槽索引(11)--合併表分割槽索引
- 全面學習分割槽表及分割槽索引(12)--修改list表分割槽索引
- 學習筆記】分割槽表和分割槽索引——新增表分割槽(二)筆記索引
- 全面學習分割槽表及分割槽索引(10)--交換分割槽索引
- PLSQL根據分割槽表的分割槽名批次truncate分割槽SQL
- 對刪除分割槽的分割槽表執行TSPITR
- 對分割槽表的部分分割槽執行TSPITR
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- rebuild分割槽表分割槽索引的方法Rebuild索引
- 分割槽表及分割槽索引建立示例索引
- Oracle帶區域性分割槽索引的分割槽表刪除舊分割槽新增新分割槽Oracle索引
- split 分割槽的簡單研究
- 全面學習分割槽表及分割槽索引(8)--增加和收縮表分割槽索引
- 【學習筆記】分割槽表和分割槽索引——分割槽表的其他管理(三)筆記索引
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- 非分割槽錶轉換成分割槽表
- 分割槽表分割槽索引查詢效率探究索引
- 【學習筆記】分割槽表和分割槽索引——管理索引分割槽(四)筆記索引
- Oracle分割槽表的使用Oracle
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- 全面學習分割槽表及分割槽索引(15)--修改表分割槽屬性和模板索引
- 【MYSQL】 分割槽表MySql
- postgresql分割槽表SQL
- Oracle 表分割槽Oracle
- MySQL 分割槽表MySql
- oracle分割槽表Oracle
- MySQL分割槽表MySql
- oracle表分割槽Oracle