亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

什么是Oracle的分區(qū)表 (轉(zhuǎn) 作者 陳字文)

系統(tǒng) 1764 0

假設(shè)我們現(xiàn)在正在醞釀經(jīng)營一家圖書館,最初,我們只有十本書提供給大家來閱讀和購買。對于十本書而言,我們可能只需要一個(gè)書架格子將其作為保存這十本書的容器就足夠了,因?yàn)槿魏我粋€(gè)人都可以很輕松的掃一眼就可以將這十本書的書名大概記住,并且挑選出合適自己的書籍來看。

? ? 但是隨著我們書籍越來越多,我們需要更大的容器來保存我們的科教類、IT類、歷史類、人文類等等書籍,大家都知道的一個(gè)生活常識就是,我們肯定不能夠?qū)⑺蓄愋偷臅既拥揭粋€(gè)書架容器上擺著,最科學(xué)的,就是分區(qū),將不同的書籍放到不同的地方去,這樣,假如我們在西安五路口的新華書店,那么就只需要跑到四樓的IT分區(qū),去找相關(guān)的IT書籍。
? ? 在生活中是這個(gè)樣子,在數(shù)據(jù)庫中呢?
? ? 現(xiàn)在的數(shù)據(jù)庫業(yè)務(wù)數(shù)據(jù)和日志數(shù)據(jù),以幾何級數(shù)的速度在增長著。以我之前從事社保行業(yè)為例,社保的日志動(dòng)輒幾十G,其實(shí),其中幾乎涵蓋了從系統(tǒng)試運(yùn)行到運(yùn)行一兩年之后的數(shù)據(jù),這樣一個(gè)巨大的表,讓數(shù)據(jù)的邏輯備份、查詢、甚至基于日志表的回退都產(chǎn)生了巨大的效率問題。
? ? 如何能夠快速有效的刪除三個(gè)月之前的日志信息,如何能夠快速的檢索當(dāng)前月份的信息,如何充分利用多塊磁盤空間(裸設(shè)備)的物理環(huán)境,增加并行度平衡I/O從而改善性能增強(qiáng)數(shù)據(jù)庫的可用性?Oracle在8.0版本之后提出的表的分區(qū)功能就是一個(gè)非常關(guān)鍵的實(shí)用技術(shù)。
? ? 早在8.0.5版本中,Oracle就將范圍分區(qū)技術(shù)引入,現(xiàn)在分區(qū)功能已經(jīng)越來越強(qiáng)大,包括支持?jǐn)U展分區(qū)功能、Interval分區(qū)、外鍵分區(qū)、模擬列分區(qū)、以及分區(qū)建議器等。那么,分區(qū)到底有什么好處呢?我們?yōu)槭裁匆褂梅謪^(qū)呢?在什么環(huán)境下使用分區(qū)比較合適呢?在金牌管理群中,有一個(gè)哥們請教一個(gè)多用戶下一張10W頻繁表的增加、刪除、修改表的問題,很多朋友給出了修改其成為分區(qū)表的建議。其實(shí),這張表能否將其設(shè)置為分區(qū)表,是需要看具體的業(yè)務(wù)使用環(huán)境的,多用戶下頻繁的增刪改查,我認(rèn)為應(yīng)當(dāng)使用全局臨時(shí)表而非使用分區(qū)表,這個(gè)并不是分區(qū)表的典型應(yīng)用環(huán)境,相反,應(yīng)當(dāng)是全局臨時(shí)表的應(yīng)用環(huán)境,并且在一本參考書中,找到了一位大牛的建議作為佐證:“分區(qū)表應(yīng)用在大表更合適,至少要大于100萬條的記錄才可以考慮使用分區(qū)表”,例如社保系統(tǒng)中,使用分區(qū)表解決日志問題冗余問題就是一個(gè)最佳使用場景。
? ? 這個(gè)結(jié)論是非常容易理解的,就類似于我們最前面引入的一個(gè)例子,我們開書店,只有十本書,假設(shè)未來也只會(huì)有那么幾本,那么我們?yōu)槭裁匆M(fèi)盡心思的分成不同的區(qū)域呢?那豈不是畫蛇添足了么?既不經(jīng)濟(jì)也不和諧,只有當(dāng)我們采購的書籍的量非常大的時(shí)候,我們才會(huì)去考慮使用分區(qū)技術(shù)來解決查找效率問題。
? ? 假設(shè)現(xiàn)在用戶希望找到一本《數(shù)據(jù)結(jié)構(gòu)》的教科書,我們在100W本書籍里面大海撈針的去找快呢?還是在10W本IT類書籍中去查找快呢?答案是顯而易見的。當(dāng)我們只有10本書呢?我們還會(huì)建立分區(qū)嗎?我們直接肉眼全部掃描一下,直接得到這本書就好了。因此我們需要在特定的環(huán)境下選擇特定的技術(shù)解決方案,目的是追求更高的效能,更高的性能帶來的必然是用戶更高的滿意度,更高的滿意度帶來的必然是更好的經(jīng)濟(jì)效益,更好的經(jīng)濟(jì)效益帶來的必然是圖書管理員們更美好的生活。
?
那么就讓我們看一下Oracle提供的分區(qū)功能到底有什么樣子的好處呢?
?
1)由于Oracle數(shù)據(jù)庫可以將分區(qū)指定為不同的表空間,而不同的表空間是可以指向不同的磁盤設(shè)備的,在很多時(shí)候,磁盤設(shè)備的I/O速度是系統(tǒng)進(jìn)行數(shù)據(jù)操作的瓶頸,而分區(qū)并行,則起到了優(yōu)化物理硬件資源,從而縮短了執(zhí)行的時(shí)間的作用。
2)分區(qū),就類似于我們將圖書分類放到了不同的區(qū)間中,這個(gè)時(shí)候,我們就可以只針對其中的某一類圖書進(jìn)行操作,比如進(jìn)行該類書籍的查詢、上架、下架、甚至將該類圖書付之一炬,這帶來了兩個(gè)特別大的優(yōu)勢,第一,我們無視其他分區(qū)的數(shù)據(jù);第二,我們可以很方便的對本區(qū)的數(shù)據(jù)進(jìn)行刪除操作。
3)提高了特定的查詢速度,比如我們現(xiàn)在只需要查找IT類圖書的數(shù)量,因?yàn)槲覀兡軌蛟诘谝灰庾R中,排除其他非IT類書籍,必然會(huì)提高查詢的性能。
4)節(jié)約維護(hù)的成本,傳統(tǒng)的維護(hù)操作,例如重建索引等,因?yàn)橛墟i機(jī)制的存在,是會(huì)影響到其他人的讀取和更新刪除操作的,但是由于有了分區(qū),我們在維護(hù)IT類書籍的時(shí)候,就不會(huì)對其他分類的數(shù)據(jù)造成影響,這個(gè)時(shí)候,可以降低因?yàn)榫S護(hù)數(shù)據(jù)而對其他系統(tǒng)數(shù)據(jù)產(chǎn)生的各種影響。
5)從安全的角度上而言,我們將不同的分區(qū)放在不同的表空間當(dāng)中,就類似于我們沒有將所有的雞蛋放到一個(gè)籃子里面,必然會(huì)帶來安全方面的提升。
?
Oracle提供了下面幾種比較常見的分區(qū)方式:
?
1)范圍分區(qū)(partition by range)
?
? ? 我們可以想象范圍分區(qū)的前提,假如我們現(xiàn)在有100W本書,如果分成10個(gè)分區(qū),能夠比較平均的將每一類維持在10W本左右,是最理想不過了,這樣看起來即工整又漂亮。因此,我們在建立范圍分區(qū)的時(shí)候,如何選擇范圍分區(qū)的依據(jù)從而能夠讓數(shù)據(jù)均勻分布,是一個(gè)需要重點(diǎn)關(guān)注的問題。
? ? 在很多情況下,例如上述提到的社保系統(tǒng)中的日志表,使用日期進(jìn)行分類就是一個(gè)比較好的分區(qū)方案,因?yàn)槊總€(gè)月產(chǎn)生的數(shù)據(jù)量都是大致相同的。下面,我們通過腳本來創(chuàng)建一個(gè)基于月份的范圍分區(qū)表(假設(shè)插入的數(shù)據(jù)全部都是2013年的數(shù)據(jù)):
DROP TABLE PART_LOG_CHENZW PURGE;
?
CREATE TABLE PART_LOG_CHENZW(
? ? ? ?LOG_ID NUMBER(20) PRIMARY KEY,
? ? ? ?LOG_DATE DATE,
? ? ? ?LOG_DESC VARCHAR2(20)
)
PARTITION BY RANGE(LOG_DATE)
(
?PARTITION PART_LOG_01 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) TABLESPACE DATA,
?PARTITION PART_LOG_02 VALUES LESS THAN (TO_DATE('2013-03-01','YYYY-MM-DD')) TABLESPACE DATA,
?PARTITION PART_LOG_03 VALUES LESS THAN (TO_DATE('2013-05-01','YYYY-MM-DD')) TABLESPACE DATA,
?PARTITION PART_LOG_04 VALUES LESS THAN (TO_DATE('2013-07-01','YYYY-MM-DD')) TABLESPACE DATA,
?PARTITION PART_LOG_05 VALUES LESS THAN (TO_DATE('2013-09-01','YYYY-MM-DD')) TABLESPACE DATA,
?PARTITION PART_LOG_06 VALUES LESS THAN (TO_DATE('2013-10-01','YYYY-MM-DD')) TABLESPACE DATA,
?PARTITION PART_LOG_07 VALUES LESS THAN (MAXVALUE) TABLESPACE DATA
);
?
? ? 上面的例子就是一個(gè)使用范圍分區(qū)的典型例子,在創(chuàng)建表的時(shí)候使用PARTITION BY RANGE關(guān)鍵字來指出進(jìn)行分區(qū)的策略,其中PARTITION BY LOG(LOG_DATE)指的是使用LOG_DATE來作為分區(qū)的字段,里面根據(jù)取值的大小,命名了7個(gè)分區(qū)來存放數(shù)據(jù),每個(gè)分區(qū)還可以指定不同的表空間,第七個(gè)分區(qū)使用MAXVALUE來避免有數(shù)值沒有被上面的范圍圈定,這個(gè)就類似于SWITCH語法中的DEFAULT,不同的,這個(gè)并不是fall through的。
?
? ? 下面,我們來生成10萬條數(shù)據(jù)來插入到表中,查看一下表中發(fā)生了什么樣子的變化?
INSERT INTO PART_LOG_CHENZW
? ? (LOG_ID, LOG_DATE, LOG_DESC)
? ? SELECT LEVEL,
? ? ? ? ? ?TO_DATE('2013-01-01', 'YYYY-MM-DD') +
? ? ? ? ? ?NUMTODSINTERVAL(CEIL(DBMS_RANDOM.VALUE(0, 365)), 'DAY'),
? ? ? ? ? ?LEVEL || 'DESC'
? ? ? FROM DUAL
? ? CONNECT BY LEVEL <= 100000;
?
? ? 首先,我們可以查詢一下落在7、8月份的日志記錄,就如同我們?nèi)バ氯A書店只是去查找IT類的書籍一樣,我們知道我們應(yīng)當(dāng)去那里尋找名字為PART_LOG_05分區(qū)的數(shù)據(jù):
SELECT COUNT(1) FROM PART_LOG_CHENZW PARTITION (PART_LOG_05);
下面是在我本機(jī)的顯示結(jié)果:
06:50:40 ChenZw> SELECT COUNT(1) FROM PART_LOG_CHENZW PARTITION (PART_LOG_05);
?
? COUNT(1)
----------
? ? ?16981
? ? 通過上面的結(jié)果可以很明顯的看出,有16981條數(shù)據(jù)落在了7、8月份的分區(qū)中。我們通過指定分區(qū),將全部的注意力只放到此1.6W條左右的數(shù)據(jù)而不是全部的10W條數(shù)據(jù)上,可以很明顯帶來效能的提升。
?
? ? 有一個(gè)問題隨之而來,我們應(yīng)當(dāng)如何知道,圖書館里面都有什么樣子的分區(qū)呢?我們?nèi)绾尾拍苤勒_的分區(qū)呢?在新華書店中,往往在上電梯的時(shí)候,都會(huì)有一個(gè)指示牌,告訴你,IT類書籍在4樓,人文社科類圖書在1樓....其實(shí),Oracle數(shù)據(jù)庫也提供了這個(gè)指引牌,那就是下面兩個(gè)數(shù)據(jù)字典:DBA_PART_TABLES和DBA_TAB_PARTITIONS,下面我們就翻一下兩個(gè)“指示牌”中的內(nèi)容:
?
SQL>?
SELECT T.OWNER AS "所有者",
? ? ? ?T.TABLE_NAME AS "表名",
? ? ? ?T.PARTITIONING_TYPE AS "分區(qū)類型",
? ? ? ?T.SUBPARTITIONING_TYPE AS "子分區(qū)類型",
? ? ? ?T.PARTITION_COUNT AS "子分區(qū)數(shù)量",
? ? ? ?T.PARTITIONING_KEY_COUNT AS "分區(qū)鍵中列的數(shù)量",
? ? ? ?T.SUBPARTITIONING_KEY_COUNT AS "子分區(qū)鍵中列的數(shù)量",
? ? ? ?T.STATUS AS "分區(qū)表狀態(tài)",
? ? ? ?T.DEF_TABLESPACE_NAME AS "默認(rèn)表空間"
? FROM DBA_PART_TABLES T
?WHERE T.TABLE_NAME IN ('PART_LOG_CHENZW');
?
所有者 ? ?表名 ? ? ? ? ? ? ? 分區(qū)類型 ?子分區(qū)類型 子分區(qū)數(shù)量 分區(qū)鍵中列的數(shù)量 子分區(qū)鍵中列的數(shù)量 分區(qū)表狀態(tài) 默認(rèn)表空間
-------- ----------------- ?------- ---------- ---------- -------------- ---------------- ---------- ------------------------------
CHENZW ? PART_LOG_CHENZW ? ?RANGE ? ? NONE ? ? 7 ? ? ? ? ?1 ? ? ? ? ? ? ?0 ? ? ? ? ? ? ? ?VALID ? ? ?DATA
?
? ? 通過上面我們可以看到,表PART_LOG_CHENZW現(xiàn)在有7個(gè)分區(qū),但是,我們并不能知道這7個(gè)分區(qū)都是存放什么樣子的數(shù)據(jù)的?我們到什么地方去找到我們希望的7、8月的數(shù)據(jù)呢?
SQL>?
SELECT T.TABLE_OWNER AS "所有者",
? ? ? T.TABLE_NAME AS "表名",
? ? ? T.COMPOSITE AS "是否組合分區(qū)",
? ? ? T.PARTITION_NAME AS "分區(qū)名",
? ? ? T.SUBPARTITION_COUNT AS "子分區(qū)數(shù)",
? ? ? T.HIGH_VALUE AS "分區(qū)上限",
? ? ? T.HIGH_VALUE_LENGTH AS "分區(qū)上限長度",
? ? ? T.PARTITION_POSITION AS "分區(qū)在表中位置",
? ? ? T.TABLESPACE_NAME AS "所在表空間"
?FROM DBA_TAB_PARTITIONS T
WHERE T.TABLE_NAME IN ('PART_LOG_CHENZW')
/
?
所有者 ?表名 ? ? ? ? ? ? 是否組合分區(qū) 分區(qū)名 ? ? ? ? 子分區(qū)數(shù) 分區(qū)上限 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 分區(qū)上限長度 分區(qū)在表中位置 所在表空間
------- ---------------- ------------ ------------ ---------- -------------------------------------------------------------------------------- ------------ -------------- ----------
CHENZW ?PART_LOG_CHENZW ?NO ? ? ? ? ? PART_LOG_01 ? ? ? ? ? 0 TO_DATE(' 2013-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA ? ? ? ? ? 83 ? ? ? ? ? ? ?1 DATA
CHENZW ?PART_LOG_CHENZW ?NO ? ? ? ? ? PART_LOG_02 ? ? ? ? ? 0 TO_DATE(' 2013-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA ? ? ? ? ? 83 ? ? ? ? ? ? ?2 DATA
CHENZW ?PART_LOG_CHENZW ?NO ? ? ? ? ? PART_LOG_03 ? ? ? ? ? 0 TO_DATE(' 2013-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA ? ? ? ? ? 83 ? ? ? ? ? ? ?3 DATA
CHENZW ?PART_LOG_CHENZW ?NO ? ? ? ? ? PART_LOG_04 ? ? ? ? ? 0 TO_DATE(' 2013-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA ? ? ? ? ? 83 ? ? ? ? ? ? ?4 DATA
CHENZW ?PART_LOG_CHENZW ?NO ? ? ? ? ? PART_LOG_05 ? ? ? ? ? 0 TO_DATE(' 2013-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA ? ? ? ? ? 83 ? ? ? ? ? ? ?5 DATA
CHENZW ?PART_LOG_CHENZW ?NO ? ? ? ? ? PART_LOG_06 ? ? ? ? ? 0 TO_DATE(' 2013-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA ? ? ? ? ? 83 ? ? ? ? ? ? ?6 DATA
CHENZW ?PART_LOG_CHENZW ?NO ? ? ? ? ? PART_LOG_07 ? ? ? ? ? 0 MAXVALUE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?8 ? ? ? ? ? ? ?7 DATA
?
7 rows selected
????從上面的結(jié)果可以看到,如果我們希望找到7、8月份的數(shù)據(jù),就可以根據(jù)分區(qū)上限定位到PART_LOG_05分區(qū)。
?
? ? 最后,我們可以通過查詢數(shù)據(jù)字典USER_SEGMENTS來查看分區(qū)表占用的磁盤空間信息,如下:
SELECT T.SEGMENT_NAME AS "段名",
? ? ? ?T.PARTITION_NAME AS "分區(qū)名",
? ? ? ?T.SEGMENT_TYPE AS "分區(qū)類型",
? ? ? ?T.BYTES / POWER(1024, 2) || 'M' AS "分區(qū)大小",
? ? ? ?T.TABLESPACE_NAME AS "表空間"
? FROM USER_SEGMENTS T
?WHERE T.SEGMENT_NAME IN ('PART_LOG_CHENZW');
?
? ? 得到的結(jié)果如下:
段名 ? ? ? ? ? ? 分區(qū)名 ? ? ? 分區(qū)類型 ? ? ? ? ? 分區(qū)大小 ? 表空間
---------------- ------------ ------------------ ---------- -------
PART_LOG_CHENZW ?PART_LOG_01 ?TABLE PARTITION ? ?.0625M ? ? DATA
PART_LOG_CHENZW ?PART_LOG_02 ?TABLE PARTITION ? ?.5625M ? ? DATA
PART_LOG_CHENZW ?PART_LOG_03 ?TABLE PARTITION ? ?.5625M ? ? DATA
PART_LOG_CHENZW ?PART_LOG_04 ?TABLE PARTITION ? ?.5625M ? ? DATA
PART_LOG_CHENZW ?PART_LOG_05 ?TABLE PARTITION ? ?.625M ? ? ?DATA
PART_LOG_CHENZW ?PART_LOG_06 ?TABLE PARTITION ? ?.3125M ? ? DATA
PART_LOG_CHENZW ?PART_LOG_07 ?TABLE PARTITION ? ?.875M ? ? ?DATA
?
7 rows selected
?
2)列表分區(qū)(partition by list)
? ?假設(shè)我們現(xiàn)在只有四種類型的10W本圖書,分別為0 教育類、1 IT類、2 人文類、3社科類,只有這四種情況,我們就可以通過圖書的類型進(jìn)行分區(qū)。通常情況下,如果你的數(shù)據(jù)中的某一項(xiàng)是可以被枚舉的,那么,此列就可以用作列表分區(qū)的分區(qū)字段。
DROP TABLE PART_BOOK_CHENZW PURGE;
?
CREATE TABLE PART_BOOK_CHENZW(
? ? ? ?BOOK_ID NUMBER(20) PRIMARY KEY,
? ? ? ?BOOK_DATE DATE,
? ? ? ?BOOK_TYPE NUMBER(2) NOT NULL,
? ? ? ?BOOK_DESC VARCHAR2(20)
)
PARTITION BY LIST(BOOK_TYPE)
(
?PARTITION PART_BOOK_01 VALUES(0) TABLESPACE DATA,
?PARTITION PART_BOOK_02 VALUES(1) TABLESPACE DATA,
?PARTITION PART_BOOK_03 VALUES(2) TABLESPACE DATA,
?PARTITION PART_BOOK_04 VALUES(3) TABLESPACE DATA
);
?
下面的腳本用于生成相應(yīng)的數(shù)據(jù):
INSERT INTO PART_BOOK_CHENZW
? ? (BOOK_ID, BOOK_DATE, BOOK_TYPE,BOOK_DESC)
? ? SELECT LEVEL,
? ? ? ? ? ?TO_DATE('2013-01-01', 'YYYY-MM-DD') +
? ? ? ? ? ?NUMTODSINTERVAL(CEIL(DBMS_RANDOM.VALUE(0, 365)), 'DAY'),
? ? ? ? ? ?MOD(LEVEL,4),
? ? ? ? ? ?LEVEL || 'DESC'
? ? ? FROM DUAL
? ? CONNECT BY LEVEL <= 100000;
?
3)散列分區(qū)(partition by hash)
? ? 個(gè)人覺著散列分區(qū)的更多的作用在于分散數(shù)據(jù),通過將數(shù)據(jù)均勻分布從而規(guī)避I/O瓶頸,但是這個(gè)在平時(shí)的生產(chǎn)中確實(shí)比較少用到,所以,建議僅僅作為了解了。
DROP TABLE PART_BOOK_CHENZW PURGE;
?
CREATE TABLE PART_BOOK_CHENZW(
? ? ? ?BOOK_ID NUMBER(20) PRIMARY KEY,
? ? ? ?BOOK_DATE DATE,
? ? ? ?BOOK_TYPE NUMBER(2) NOT NULL,
? ? ? ?BOOK_DESC VARCHAR2(20)
)
PARTITION BY HASH(BOOK_ID)
(
?PARTITION PART_BOOK_01 TABLESPACE DATA,
?PARTITION PART_BOOK_02 TABLESPACE DATA,
?PARTITION PART_BOOK_03 TABLESPACE DATA,
?PARTITION PART_BOOK_04 TABLESPACE DATA
);
?
INSERT INTO PART_BOOK_CHENZW
? ? (BOOK_ID, BOOK_DATE, BOOK_TYPE,BOOK_DESC)
? ? SELECT LEVEL,
? ? ? ? ? ?TO_DATE('2013-01-01', 'YYYY-MM-DD') +
? ? ? ? ? ?NUMTODSINTERVAL(CEIL(DBMS_RANDOM.VALUE(0, 365)), 'DAY'),
? ? ? ? ? ?MOD(LEVEL,4),
? ? ? ? ? ?LEVEL || 'DESC'
? ? ? FROM DUAL
? ? CONNECT BY LEVEL <= 100000;
?
4)組合分區(qū)(partition by xxx subpartition by xxx)
? ? 假如我們現(xiàn)在有10W本月刊類雜志提供給消費(fèi)者查看和購買,我們?nèi)绾巫龇謪^(qū)合適呢?首先我們可以先將圖書根據(jù)種類進(jìn)行分區(qū),然后再對每個(gè)分區(qū)進(jìn)行月份的分區(qū),這樣對于大量的圖書而言,我們就可以根據(jù)實(shí)際的業(yè)務(wù)需要,將一大堆數(shù)據(jù)通過分區(qū)拆解為若干個(gè)小標(biāo)進(jìn)行管理,從而降低了管理的粒度,做到“精細(xì)化管理”。
?
? ? 下面是一個(gè)進(jìn)行組合分區(qū)的例子:
--刪除測試表
DROP TABLE PART_BOOK_CHENZW PURGE;
?
--創(chuàng)建列表-范圍組合分區(qū)
CREATE TABLE PART_BOOK_CHENZW(
? ? ? ?BOOK_ID NUMBER(20) PRIMARY KEY,
? ? ? ?BOOK_DATE DATE,
? ? ? ?BOOK_TYPE NUMBER(2) NOT NULL,
? ? ? ?BOOK_DESC VARCHAR2(20)
)
PARTITION BY LIST(BOOK_TYPE)
SUBPARTITION BY RANGE(BOOK_DATE)
SUBPARTITION TEMPLATE
(
?SUBPARTITION PART_LOG_01 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD')) TABLESPACE DATA,
?SUBPARTITION PART_LOG_02 VALUES LESS THAN (TO_DATE('2013-03-01','YYYY-MM-DD')) TABLESPACE DATA,
?SUBPARTITION PART_LOG_03 VALUES LESS THAN (TO_DATE('2013-05-01','YYYY-MM-DD')) TABLESPACE DATA,
?SUBPARTITION PART_LOG_04 VALUES LESS THAN (TO_DATE('2013-07-01','YYYY-MM-DD')) TABLESPACE DATA,
?SUBPARTITION PART_LOG_05 VALUES LESS THAN (TO_DATE('2013-09-01','YYYY-MM-DD')) TABLESPACE DATA,
?SUBPARTITION PART_LOG_06 VALUES LESS THAN (TO_DATE('2013-10-01','YYYY-MM-DD')) TABLESPACE DATA,
?SUBPARTITION PART_LOG_07 VALUES LESS THAN (MAXVALUE) TABLESPACE DATA
)
(
?PARTITION PART_BOOK_01 VALUES(0) TABLESPACE DATA,
?PARTITION PART_BOOK_02 VALUES(1) TABLESPACE DATA,
?PARTITION PART_BOOK_03 VALUES(2) TABLESPACE DATA,
?PARTITION PART_BOOK_04 VALUES(3) TABLESPACE DATA
);
--生成測試數(shù)據(jù)
INSERT INTO PART_BOOK_CHENZW
? ? (BOOK_ID, BOOK_DATE, BOOK_TYPE,BOOK_DESC)
? ? SELECT LEVEL,
? ? ? ? ? ?TO_DATE('2013-01-01', 'YYYY-MM-DD') +
? ? ? ? ? ?NUMTODSINTERVAL(CEIL(DBMS_RANDOM.VALUE(0, 365)), 'DAY'),
? ? ? ? ? ?MOD(LEVEL,4),
? ? ? ? ? ?LEVEL || 'DESC'
? ? ? FROM DUAL
? ? CONNECT BY LEVEL <= 100000;
?
上面的組合分區(qū)和單一的范圍分區(qū)有什么區(qū)別呢?我們通過查詢數(shù)據(jù)字典看一下:
SQL>
SELECT T.TABLE_OWNER AS "所有者",
? ? ? T.TABLE_NAME AS "表名",
? ? ? T.COMPOSITE AS "是否組合分區(qū)",
? ? ? T.PARTITION_NAME AS "分區(qū)名",
? ? ? T.SUBPARTITION_COUNT AS "子分區(qū)數(shù)",
? ? ? T.HIGH_VALUE AS "分區(qū)上限",
? ? ? T.HIGH_VALUE_LENGTH AS "分區(qū)上限長度",
? ? ? T.PARTITION_POSITION AS "分區(qū)在表中位置",
? ? ? T.TABLESPACE_NAME AS "所在表空間"
?FROM DBA_TAB_PARTITIONS T
WHERE T.TABLE_NAME IN ('PART_BOOK_CHENZW')
/
?
所有者 ?表名 ? ? ? ? ? ? ?是否組合分區(qū) 分區(qū)名 ? ? ? ? ?子分區(qū)數(shù) 分區(qū)上限 分區(qū)上限長度 分區(qū)在表中位置 所在表空間
------- ----------------- ------------ ------------- ---------- -------- ------------ -------------- -----------
CHENZW ?PART_BOOK_CHENZW ?YES ? ? ? ? ?PART_BOOK_01 ? ? ? ? ? 7 0 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ?1 DATA
CHENZW ?PART_BOOK_CHENZW ?YES ? ? ? ? ?PART_BOOK_02 ? ? ? ? ? 7 1 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ?2 DATA
CHENZW ?PART_BOOK_CHENZW ?YES ? ? ? ? ?PART_BOOK_03 ? ? ? ? ? 7 2 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ?3 DATA
CHENZW ?PART_BOOK_CHENZW ?YES ? ? ? ? ?PART_BOOK_04 ? ? ? ? ? 7 3 ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? ? ?4 DATA ?
?
重點(diǎn)在上述分區(qū)的“子分區(qū)數(shù)”,我們可以看到,每一個(gè)按照列表的分區(qū)下面,又被按照日期被分為7個(gè)分區(qū)。

什么是Oracle的分區(qū)表 (轉(zhuǎn) 作者 陳字文)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 香蕉免费在线视频 | 亚洲性视频网站 | 国产福利一区二区精品视频 | 国产精品久久久久久麻豆一区 | 久久精品卫校国产小美女 | 精品免费久久久久久影院 | 性生活国产 | 深夜影院在线视频观看 | 青青爽| 在线播放国产精品 | 99久久99久久免费精品蜜桃 | 亚洲欧美另类在线视频 | 九九视频免费在线 | 日本色图在线 | 女人十八一级毛片 | 亚洲国产精品日韩在线观看 | 免费看成人国产一区二区三区 | 色综合中文字幕天天在线 | 老子影院午夜伦手机在线看 | ijzzijzz精的女人美女 | 一区二区三区网站在线免费线观看 | 嫩草嫩草55av | 欧美午夜寂寞影院安卓列表 | 澳门成人免费永久视频 | 久久精品国产99国产精品澳门 | 日产精品久久久一区二区 | 婷婷色九月 | 波多野结衣中文字幕久久 | 精品一区二区三区在线观看l | 久久一本精品久久精品66 | 中文字幕不卡在线播放 | 九九成人 | 国产精品第1页在线播放 | jazz欧美人免费xxxxxx | 欧美在线观看一区 | 日本最新免费二区 | 五月婷婷激情六月 | 国产日韩一区二区三区在线观看 | 深夜影院深a久久 | 91在线播放国产 | 国产亚洲情侣久久精品 |