二十九、分割槽表的建立及清理
阿新 • • 發佈:2018-12-10
1、分割槽表建立
--範圍分割槽示例 drop table range_part_tab purge; --注意,此分割槽為範圍分割槽 create table range_part_tab (id number,deal_date date,area_code number,contents varchar2(4000)) partition by range (deal_date) ( partition p1 values less than (TO_DATE('2012-02-01', 'YYYY-MM-DD')), partition p2 values less than (TO_DATE('2012-03-01', 'YYYY-MM-DD')), partition p3 values less than (TO_DATE('2012-04-01', 'YYYY-MM-DD')), partition p4 values less than (TO_DATE('2012-05-01', 'YYYY-MM-DD')), partition p5 values less than (TO_DATE('2012-06-01', 'YYYY-MM-DD')), partition p6 values less than (TO_DATE('2012-07-01', 'YYYY-MM-DD')), partition p7 values less than (TO_DATE('2012-08-01', 'YYYY-MM-DD')), partition p8 values less than (TO_DATE('2012-09-01', 'YYYY-MM-DD')), partition p9 values less than (TO_DATE('2012-10-01', 'YYYY-MM-DD')), partition p10 values less than (TO_DATE('2012-11-01', 'YYYY-MM-DD')), partition p11 values less than (TO_DATE('2012-12-01', 'YYYY-MM-DD')), partition p12 values less than (TO_DATE('2013-01-01', 'YYYY-MM-DD')), partition p_max values less than (maxvalue) );
插入資料:
--以下是插入2012年一整年日期隨機數和表示福建地區號含義(591到599)的隨機數記錄,共有10萬條,如下: insert into range_part_tab (id,deal_date,area_code,contents) select rownum, to_date( to_char(sysdate-365,'J')+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J'), ceil(dbms_random.value(590,599)), rpad('*',400,'*') from dual connect by rownum <= 100000; commit;
2、
--分割槽原理分析之普通表插入 drop table norm_tab purge; create table norm_tab (id number,deal_date date,area_code number,contents varchar2(4000)); insert into norm_tab(id,deal_date,area_code,contents) select rownum, to_date( to_char(sysdate-365,'J')+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J'), ceil(dbms_random.value(590,599)), rpad('*',400,'*') from dual connect by rownum <= 100000; commit; --分割槽清除的方便例子 delete from norm_tab where deal_date>=TO_DATE('2012-09-01', 'YYYY-MM-DD') and deal_date <= TO_DATE('2012-09-30', 'YYYY-MM-DD'); --為了後續章節試驗的方便,本處暫且將刪除的記錄回退。 rollback; select * from range_part_tab partition(p9); alter table range_part_tab truncate partition p9; set linesize 1000 set autotrace on select count(*) from normal_tab where deal_date>=TO_DATE('2012-09-01', 'YYYY-MM-DD') and deal_date <= TO_DATE('2012-09-30', 'YYYY-MM-DD'); select count(*) from range_part_tab where deal_date>=TO_DATE('2012-09-01', 'YYYY-MM-DD') and deal_date <= TO_DATE('2012-09-30', 'YYYY-MM-DD');
3、分割槽交換的神奇例子
drop table mid_table purge;
create table mid_table (id number ,deal_date date,area_code number,contents varchar2(4000));
select count(*) from range_part_tab partition(p8);
---當然,除了上述用partition(p8)的指定分割槽名查詢外,也可以採用分割槽條件代入查詢:
select count(*) from range_part_tab where deal_date>=TO_DATE('2012-08-01', 'YYYY-MM-DD') and deal_date <= TO_DATE('2012-08-31', 'YYYY-MM-DD');
--以下命令就是經典的分割槽交換:
alter table range_part_tab exchange partition p8 with table mid_table;
--查詢發現分割槽8資料不見了。
select count(*) from range_part_tab partition(p8);
---而普通表記錄由剛才的0條變為8628條了,果然實現了交換。
select count(*) from mid_table ;