oracle表分區(qū)的幾種方法以及維護(hù)_第1頁(yè)
oracle表分區(qū)的幾種方法以及維護(hù)_第2頁(yè)
oracle表分區(qū)的幾種方法以及維護(hù)_第3頁(yè)
oracle表分區(qū)的幾種方法以及維護(hù)_第4頁(yè)
oracle表分區(qū)的幾種方法以及維護(hù)_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、表分區(qū)有以下優(yōu)點(diǎn): 1、數(shù)據(jù)查詢:數(shù)據(jù)被存儲(chǔ)到多個(gè)文件上,減少了I/O負(fù)載,查詢速度提高。 2、數(shù)據(jù)修剪:保存歷史數(shù)據(jù)非常的理想。 3、備份:將大表的數(shù)據(jù)分成多個(gè)文件,方便備份和恢復(fù)。 4、并行性:可以同時(shí)向表中進(jìn)行DML操作,并行性性能提高。 當(dāng)表中的數(shù)據(jù)量不斷增大,查詢數(shù)據(jù)的速度就會(huì)變慢,應(yīng)用程序的性能就會(huì)下降,這時(shí)就應(yīng)該考慮對(duì)表進(jìn)行分區(qū)。表進(jìn)行分區(qū)后,邏輯上表仍然是一張完整的表,只是將表中的數(shù)據(jù)在物理上存放到多個(gè)表空間(物理文件上),這樣查詢數(shù)據(jù)時(shí),不至于每次都掃描整張表。 Oracle中提供了以下幾種表分區(qū): 一、范圍分區(qū):這種類型的分區(qū)是使用列的一組值,通常將該列成為分區(qū)鍵。 示例1

2、:假設(shè)有一個(gè)CUSTOMER表,表中有數(shù)據(jù)行,我們將此表通過CUSTOMER_ID進(jìn)行分區(qū),每個(gè)分區(qū)存儲(chǔ)行,我們將每個(gè)分區(qū)保存到單獨(dú)的表空間中,這樣數(shù)據(jù)文件就可以跨越多個(gè)物理磁盤。下面是創(chuàng)建表和分區(qū)的代碼,如下: CREATE TABLE CUSTOMER ( CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY, FIRST_NAME VARCHAR2(30) NOT NULL, LAST_NAME VARCHAR2(30) NOT NULL, PHONE VARCHAR2(15) NOT NULL, EMAIL VARCHAR2(80), STATUS CHAR(

3、1) ) PARTITION BY RANGE (CUSTOMER_ID) ( PARTITION CUS_PART1 VALUES LESS THAN () TABLESPACE CUS_TS01, PARTITION CUS_PART2 VALUES LESS THAN () TABLESPACE CUS_TS02 ) 在創(chuàng)建表進(jìn)行分區(qū)時(shí),表空間必須先存在,而且建議將不同的分區(qū)放入不同的表空間中。 示例2:假設(shè)有ORDER_ACTIVITIES表,每6個(gè)月對(duì)訂單進(jìn)行清理,我們可以按月份對(duì)表進(jìn)行分區(qū),分區(qū)代碼如下: CREATE TABLE ORDER_ACTIVITIES ( ORDER_

4、ID NUMBER(7) NOT NULL, ORDER_DATE DATE, TOTAL_AMOUNT NUMBER, CUSTOTMER_ID NUMBER(7), PAID CHAR(1) ) PARTITION BY RANGE (ORDER_DATE) ( PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE(01-MAY-2003,DD-MON-YYYY) TABLESPACE ORD_TS01, PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE(01-JUN-2003,DD-MON

5、-YYYY) TABLESPACE ORD_TS02, PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE(01-JUL-2003,DD-MON-YYYY) TABLESPACE ORD_TS03 ) 二、列表分區(qū):該分區(qū)的特點(diǎn)是某列的值只有幾個(gè),基于這樣的特點(diǎn)我們可以采用列表分區(qū)。 示例1: CREATE TABLE PROBLEM_TICKETS ( PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR2(2000), CUSTOMER_ID NUMBER(7) NOT

6、 NULL, DATE_ENTERED DATE NOT NULL, STATUS VARCHAR2(20) ) PARTITION BY LIST (STATUS) ( PARTITION PROB_ACTIVE VALUES (ACTIVE) TABLESPACE PROB_TS01, PARTITION PROB_INACTIVE VALUES (INACTIVE) TABLESPACE PROB_TS02 ) 三、散列分區(qū):這類分區(qū)是在列值上使用散列算法,以確定將行放入哪個(gè)分區(qū)中。當(dāng)列的值沒有合適的條件時(shí),建議使用散列分區(qū)。請(qǐng)看下列示例: 示例1: CREATE TABLE HASH_

7、TABLE ( COL NUMBER(8), INF VARCHAR2(100) ) PARTITION BY HASH (COL) ( PARTITION PART01 TABLESPACE HASH_TS01, PARTITION PART02 TABLESPACE HASH_TS02, PARTITION PART03 TABLESPACE HASH_TS03 ) 四、復(fù)合范圍列表分區(qū):這種分區(qū)是基于范圍分區(qū)和列表分區(qū),表首先按某列進(jìn)行范圍分區(qū),然后再按某列進(jìn)行列表分區(qū),分區(qū)之中的分區(qū)被稱為子分區(qū)。 示例1: CREATE TABLE SALES ( PRODUCT_ID VARCHAR

8、2(5), SALES_DATE DATE, SALES_COST NUMBER(10), STATUS VARCHAR2(20) ) PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS) ( PARTITION P1 VALUES LESS THAN (TO_DATE(2003-01-01,YYYY-MM-DD) TABLESPACE P1_TS ( SUBPARTITION P1SUB1 VALUES (ACTIVE) TABLESPACE SUBP1_TS1, SUBPARTITION P1SUB2 VALUES (IN

9、ACTIVE) TABLESPACE SUBP1_TS2 ), PARTITION P2 VALUES LESS THAN (TO_DATE(2003-03-01,YYYY-MM-DD) TABLESPACE P2_TS ( SUBPARTITION P2SUB1 VALUES (ACTIVE) TABLESPACE SUBP2_TS1, SUBPARTITION P2SUB2 VALUES (INACTIVE) TABLESPACE SUBP2_TS2 ) ) 示例2:使用TEMPLATE模板 CREATE TABLE SALES ( PRODUCT_ID VARCHAR2(5), SALE

10、S_DATE DATE, SALES_COST NUMBER(10), STATUS VARCHAR2(20) ) PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS) SUBPARTITION TEMPLATE ( SUBPARTITION SUB1 VALUES (ACTIVE) TABLESPACE SUBP1_TS1, SUBPARTITION SUB2 VALUES (INACTIVE) TABLESPACE SUBP2_TS2 ) ( PARTITION P1 VALUES LESS THAN (TO_DATE(2

11、003-01-01,YYYY-MM-DD) TABLESPACE P1_TS, PARTITION P2 VALUES LESS THAN (TO_DATE(2003-03-01,YYYY-MM-DD) TABLESPACE P2_TS ) 五、復(fù)合范圍散列分區(qū):這種分區(qū)是基于范圍分區(qū)和散列分區(qū),表首先按某列進(jìn)行范圍分區(qū),然后再按某列進(jìn)行散列分區(qū)。與上面的定義方式非常的類似,在此不單獨(dú)舉例。 表分區(qū)對(duì)于用戶來說是透明的,在插入數(shù)據(jù)時(shí)Oracle會(huì)自動(dòng)判斷插入的數(shù)據(jù),然后放入相應(yīng)的表分區(qū)中。但有時(shí)想單獨(dú)查詢某個(gè)分區(qū)中的數(shù)據(jù)時(shí),就必須手工指定分區(qū)的名稱。 示例1:(此示例基于:四、復(fù)合范圍列表分區(qū)

12、的示例一) 向SALES表插入記錄,不必指定表分區(qū)。 INSERT INTO SALES VALUES(00001,01-1月-02,100,ACTIVE) / INSERT INTO SALES VALUES(00002,01-1月-01,200,ACTIVE) / INSERT INTO SALES VALUES(00003,01-2月-03,300,INACTIVE) / INSERT INTO SALES VALUES(00004,04-2月-03,300,INACTIVE) / INSERT INTO SALES VALUES(00005,04-2月-02,300,INACTIVE)

13、 / 不指定表分區(qū)查看SALES表信息: SELECT * FROM SALES; 結(jié)果如下所示: 指定P1表分區(qū)查詢SALES表信息: SELECT * FROM SALES PARTITION(P1); 結(jié)果如下所示: 指定P1SUB1子分區(qū)查詢SALES表信息: SELECT * FROM SALES SUBPARTITION(P1SUB1); 結(jié)果如下所示: 示例2:(此示例基于:四、復(fù)合范圍列表分區(qū)的示例二) 示例2基于TEMPLATE模板的表分區(qū),查詢稍稍煩瑣一點(diǎn)。 指定P1表分區(qū)查詢SALES表信息: SELECT * FROM SALES PARTITION(P1); 結(jié)果如下

14、所示,和剛才查詢一致。 指定SUB1子分區(qū)查詢SALES表信息: SELECT * FROM SALES SUBPARTITION(SUB1); 出現(xiàn)如下錯(cuò)誤信息: 怎么解決以上問題呢?我們通過sys模式查看分區(qū)信息的數(shù)據(jù)字典,如下: 可以看出子分區(qū)不叫SUB1,而是P1_SUB1,重新查詢信息,如下圖所示: 有關(guān)表分區(qū)的一些維護(hù)性操作: 一、添加分區(qū) 以下代碼給SALES表添加了一個(gè)P3分區(qū) ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE(2003-06-01,YYYY-MM-DD); 注意:以上添加的分區(qū)界限應(yīng)該高于最

15、后一個(gè)分區(qū)界限。 以下代碼給SALES表的P3分區(qū)添加了一個(gè)P3SUB1子分區(qū) ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES(COMPLETE); 二、刪除分區(qū) 以下代碼刪除了P3表分區(qū): ALTER TABLE SALES DROP PARTITION P3; 在以下代碼刪除了P4SUB1子分區(qū): ALTER TABLE SALES DROP SUBPARTITION P4SUB1; 注意:如果刪除的分區(qū)是表中唯一的分區(qū),那么此分區(qū)將不能被刪除,要想刪除此分區(qū),必須刪除表。 三、截?cái)喾謪^(qū) 截?cái)嗄硞€(gè)分區(qū)

16、是指刪除某個(gè)分區(qū)中的數(shù)據(jù),并不會(huì)刪除分區(qū),也不會(huì)刪除其它分區(qū)中的數(shù)據(jù)。當(dāng)表中即使只有一個(gè)分區(qū)時(shí),也可以截?cái)嘣摲謪^(qū)。通過以下代碼截?cái)喾謪^(qū): ALTER TABLE SALES TRUNCATE PARTITION P2; 通過以下代碼截?cái)嘧臃謪^(qū): ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2; 四、合并分區(qū) 合并分區(qū)是將相鄰的分區(qū)合并成一個(gè)分區(qū),結(jié)果分區(qū)將采用較高分區(qū)的界限,值得注意的是,不能將分區(qū)合并到界限較低的分區(qū)。以下代碼實(shí)現(xiàn)了P1 P2分區(qū)的合并: ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO

17、PARTITION P2; 五、拆分分區(qū) 拆分分區(qū)將一個(gè)分區(qū)拆分兩個(gè)新分區(qū),拆分后原來分區(qū)不再存在。注意不能對(duì)HASH類型的分區(qū)進(jìn)行拆分。 ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE(2003-02-01,YYYY-MM-DD) INTO (PARTITION P21,PARTITION P22); 六、接合分區(qū)(coalesca) 結(jié)合分區(qū)是將散列分區(qū)中的數(shù)據(jù)接合到其它分區(qū)中,當(dāng)散列分區(qū)中的數(shù)據(jù)比較大時(shí),可以增加散列分區(qū),然后進(jìn)行接合,值得注意的是,接合分區(qū)只能用于散列分區(qū)中。通過以下代碼進(jìn)行接合分區(qū): ALTER TABLE SALES

18、COALESCA PARTITION; 七、重命名表分區(qū) 以下代碼將P21更改為P2 ALTER TABLE SALES RENAME PARTITION P21 TO P2; 九、跨分區(qū)查詢 select sum( *) from ( (select count(*) cn from t_table_SS PARTITION (P_1) union all select count(*) cn from t_table_SS PARTITION (P_2); 十、查詢表上有多少分區(qū) SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME=tabl

19、eName 十一、查詢索引信息 select object_name,object_type,tablespace_name,sum(value) from v$segment_statistics where statistic_name IN (physical reads,physical write,logical reads)and object_type=INDEX group by object_name,object_type,tablespace_name order by 4 desc -顯示數(shù)據(jù)庫(kù)所有分區(qū)表的信息: select * from DBA_PART_TABLE

20、S -顯示當(dāng)前用戶可訪問的所有分區(qū)表信息: select * from ALL_PART_TABLES -顯示當(dāng)前用戶所有分區(qū)表的信息: select * from USER_PART_TABLES -顯示表分區(qū)信息 顯示數(shù)據(jù)庫(kù)所有分區(qū)表的詳細(xì)分區(qū)信息: select * from DBA_TAB_PARTITIONS -顯示當(dāng)前用戶可訪問的所有分區(qū)表的詳細(xì)分區(qū)信息: select * from ALL_TAB_PARTITIONS -顯示當(dāng)前用戶所有分區(qū)表的詳細(xì)分區(qū)信息: select * from USER_TAB_PARTITIONS -顯示子分區(qū)信息 顯示數(shù)據(jù)庫(kù)所有組合分區(qū)表的子分區(qū)信息: select * from DBA_TAB_SUB

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論