
工作中遇到一張表每天都插入很多數據,隨著時間的推移數據量會變的很大上百萬條甚至上千萬條記錄。這樣我們能不能把表進行拆分呢,答案是肯定的Oracle 很早就考慮到這個問題提供了水平拆分。 Oracle 10 g 中提供下面三中分區: 1)范圍分區(Range partition)
工作中遇到一張表每天都插入很多數據,隨著時間的推移數據量會變的很大上百萬條甚至上千萬條記錄。這樣我們能不能把表進行拆分呢,答案是肯定的Oracle 很早就考慮到這個問題提供了水平拆分。
Oracle 10 g 中提供下面三中分區:
1)范圍分區(Range partition)
2) 哈希分區(Hash partition)
-
3)列表分區(List partition)
由于水平有限下面重點介紹范圍分區
范圍分區,顧名思義,就是根據表的某個字段的值,以固定的一個范圍作為一個分區來劃分數據
1.1可以根據序號分區建表
create table test1
1.(
2. ID NUMBER not null, 3. JQBH VARCHAR2(20),
4. FJH VARCHAR2(20)
5.)
6.partition by range (ID) 7.(
8. partition part_01 values less than(30000000) tablespace WLKP_FP_DATA_2011, 9. partition part_02 values less than(60000000) tablespace WLKP_FP_DATA_2012, 10. partition part_03 values less than(maxvalue) tablespace WLKP_FP_DATA_2013 11. );
從上面我們看出按照序號分區1-30000000數據存儲在part_01分區表中,30000000-60000000數據存儲在第part_02分區表中。這樣就達到水平拆分表的目的
1.2可以根據日期分區建表
create table test2
1.(
2. ID NUMBER not null, 3. JQBH VARCHAR2(20),
4. FJH VARCHAR2(20),
5. KPRQ DATE 6.)
7.partition by range (KPRQ) 8.(
9. partition part_01 values less than(TO_DATE('2012-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) tablespace WLKP_FP_DATA_2011, 10. partition part_02 values less than(TO_DATE('2013-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) tablespace WLKP_FP_DATA_2012, 11. partition part_03 values less than(MAXVALUE) tablespace WLKP_FP_DATA_2013 12. );
從上面建表語句我們可以看到通過時間按照年存儲數據表。
通過以上方式以上方式我們可以將數據比較大的表根據ID 時間自動拆分的其他分區表中。
以上方式在系統設計表結構的時候就考慮到分表情況,實際工作中由于對系統數據量的遇見不足,沒有在設計表的時候考慮的表水平切分情況。那么我們有沒有辦法對現有表進行拆分和改造呢。答案是肯定的。
現在對表WLKP_FP_KJ進行擴展改造
1.創建新表空間
CREATE TABLESPACE "WLKP_FP_DATA_2010"
表空間創建代碼
1.LOGGING
2.DATAFILE 'E:\Oracle\product\10.2.0\oradata\wlkp\WLKP_FP_DATA_2010.ORA' 3.SIZE 5M REUSE AUTOEXTEND
4.ON NEXT 1024K MAXSIZE 32767M EXTENT MANAGEMENT LOCAL
5.SEGMENT SPACE MANAGEMENT AUTO ;
6.commit;
這里我們新建WLKP_FP_DATA_2010表空間,按照年來存儲擴展WLKP_FP_KJ表當然也可以建立2011、2012、2013...表空間存儲未來的數據
2創建新表WLKP_FP_KJ_TEST
表結構按照1.2日期分區建表
3.新表建立后,復制老表數據
insert into wlkp_fp_kj_test select* from wlkp_fp_kj
4.將老表wlkp_fp_kj 刪除
5.重命名wlkp_fp_kj_test 為wlkp_fp_kj
這樣通過以上方式我們可以講原來wlkp_fp_kj 按照時間水平分割存儲到不同的表空間了.
通過分區表查詢數據分別存儲在哪個分區表中.
select * from WLKP_FP_KJ partition(WLKP_FP_DATA_2011) ;
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com