能夠參考文檔:http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin001.htm#insertedID0 (支持11g和12c的文檔)算法
Oracle提供了分區技術以支持VLDB(Very Large DataBase)。分區表經過對分區列的判斷,把分區列不一樣的記錄,放到不一樣的分區中。分區徹底對應用透明。數據庫
Oracle的分區表能夠包括多個分區,每一個分區都是一個獨立的段(SEGMENT),能夠存放到不一樣的表空間中。查詢時能夠經過查詢表來訪問各個分區中的數據,也能夠經過在查詢時直接指定分區的方法來進行查詢。oracle
表空間:是一個或多個數據文件的集合,全部的數據對象都存放在指定的表空間中,但主要存放的是表,因此稱做表空間。less
分區表:當表中的數據量不斷增大,查詢數據的速度就會變慢,應用程序的性能就會降低,這時就應該考慮對錶進行分區。表進行分區後,邏輯上表仍然是一張完整的表,只是將表中的數據在物理上存放到多個表空間(物理文件上),這樣查詢數據時,不至於每次都掃描整張表。dom
段:分區功能可以將表、索引或索引組織表進一步細分爲段,這些數據庫對象的段叫作分區。每一個分區有本身的名稱,還能夠選擇本身的存儲特性。從數據庫管理員的角度來看,一個分區後的對象具備多個段,這些段既可進行集體管理,也可單獨管理,這就使數據庫管理員在管理分區後的對象時有至關大的靈活性。ide
(1)Tables greater than 2GB should always be considered for partitioning.表的大小超過2GB性能
(2)Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only.表中包含歷史數據,新的數據被增長都新的分區中。ui
(1)因爲將數據分散到各個分區中,減小了數據損壞的可能性;spa
(2)能夠對單獨的分區進行備份和恢復;.net
(3)能夠將分區映射到不一樣的物理磁盤上,來分散IO;
(4)提升可管理性、可用性和性能。
(1)範圍分區(range);
(2)哈希分區(hash);
(3)列表分區(list);
(4)範圍-哈希複合分區(range-hash);
(5)範圍-列表複合分區(range-list)。
ENABLE ROW MOVEMENT
clause is specified to allow the automatic migration of a row to a new partition if an update to a key value is made that would place the row in a different partition CREATE TABLE sales ( prod_id NUMBER(6) , cust_id NUMBER , time_id DATE , channel_id CHAR(1) , promo_id NUMBER(6) , quantity_sold NUMBER(3) , amount_sold NUMBER(10,2) ) PARTITION BY RANGE (time_id) ( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy')) TABLESPACE tsa , PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy')) TABLESPACE tsb , PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy')) TABLESPACE tsc , PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy')) TABLESPACE tsd );
INTERVAL分區是Oracle11g新增的特性,它是針對Range類型分區的一種功能拓展。對連續數據類型的Range分區,若是插入的新數據值與當前分區均不匹配,Interval-Partition特性能夠實現自動的分區建立。
createtable TMP_LXQ_1( proposalnovarchar2(22), startdatedate ) partitionby range(STARTDATE) interval(numtoyminterval(1,'year'))( partitionpart_t01 values less than(to_date('2008-01-01','yyyy-mm-dd')) , partitionpart_t02 values less than(to_date('2009-01-01','yyyy-mm-dd')) , partitionpart_t03 values less than(to_date('2010-01-01','yyyy-mm-dd')) , partitionpart_t04 values less than(to_date('2011-01-01','yyyy-mm-dd')) , partitionpart_t05 values less than(to_date('2012-01-01','yyyy-mm-dd')) , partitionpart_t06 values less than(to_date('2013-01-01','yyyy-mm-dd')) );
ALTER TABLE TMP_LXQ_1 SET INTERVAL (numtoyminterval(1,'year')); ALTER TABLE TMP_LXQ_1 SET INTERVAL ();
對於INTERVAL分區表,新增的超過度區上限的數據會自動致使對應的INTERVAL分區被創建。
一樣INTERVAL分區表能夠方便的轉化爲RANGE分區表,只須要不輸入INTERVAL的值便可.
1.由range分區派生而來
2.以定長寬度建立分區(好比年、月、具體的數字(好比100、500等))
3.分區字段必須是number或date類型
4.必須至少指定一個range分區(永久分區)
5.當有記錄插入時,系統根據須要自動建立新的分區和本地索引
6.已有的範圍分區可被轉換成間隔分區(經過ALTER TABLE SET INTERVAL選項完成)
7.IntervalPartitioning不支持支持索引組織表
8.在Interval Partitioning表上不能建立domain index
9.在oracle自動建立分區的時候,系統會默認指定一個分區名
CREATE TABLE q1_sales_by_region (deptno number, deptname varchar2(20), quarterly_sales number(10, 2), state varchar2(2)) PARTITION BY LIST (state) (PARTITION q1_northwest VALUES ('OR', 'WA'), PARTITION q1_southwest VALUES ('AZ', 'UT', 'NM'), PARTITION q1_northeast VALUES ('NY', 'VM', 'NJ'), PARTITION q1_southeast VALUES ('FL', 'GA'), PARTITION q1_northcentral VALUES ('SD', 'WI'), PARTITION q1_southcentral VALUES ('OK', 'TX'));
CREATE TABLE dept (deptno NUMBER, deptname VARCHAR(32)) STORAGE (INITIAL 10K) PARTITION BY HASH(deptno) (PARTITION p1 TABLESPACE ts1, PARTITION p2 TABLESPACE ts2, PARTITION p3 TABLESPACE ts1, PARTITION p4 TABLESPACE ts3);
CREATE TABLE emp (deptno NUMBER, empname VARCHAR(32), grade NUMBER) PARTITION BY RANGE(deptno) SUBPARTITION BY HASH(empname) SUBPARTITIONS 8 STORE IN (ts1, ts3, ts5, ts7) (PARTITION p1 VALUES LESS THAN (1000), PARTITION p2 VALUES LESS THAN (2000) STORE IN (ts2, ts4, ts6, ts8), PARTITION p3 VALUES LESS THAN (MAXVALUE) (SUBPARTITION p3_s1 TABLESPACE ts4, SUBPARTITION p3_s2 TABLESPACE ts5));
——顯示數據庫全部分區表的信息:select * from DBA_PART_TABLES
——顯示當前用戶可訪問的全部分區表信息:select * from ALL_PART_TABLES
——顯示當前用戶全部分區表的信息:select * from USER_PART_TABLES
——顯示錶分區信息 顯示數據庫全部分區表的詳細分區信息:select * from DBA_TAB_PARTITIONS
——顯示當前用戶可訪問的全部分區表的詳細分區信息:select * from ALL_TAB_PARTITIONS
——顯示當前用戶全部分區表的詳細分區信息:select * from USER_TAB_PARTITIONS
——顯示子分區信息 顯示數據庫全部組合分區表的子分區信息:select * from DBA_TAB_SUBPARTITIONS
——顯示當前用戶可訪問的全部組合分區表的子分區信息:select * from ALL_TAB_SUBPARTITIONS
——顯示當前用戶全部組合分區表的子分區信息:select * from USER_TAB_SUBPARTITIONS
——顯示分區列 顯示數據庫全部分區表的分區列信息:select * from DBA_PART_KEY_COLUMNS
——顯示當前用戶可訪問的全部分區表的分區列信息:select * from ALL_PART_KEY_COLUMNS
——顯示當前用戶全部分區表的分區列信息:select * from USER_PART_KEY_COLUMNS
——顯示子分區列 顯示數據庫全部分區表的子分區列信息:select * from DBA_SUBPART_KEY_COLUMNS
——顯示當前用戶可訪問的全部分區表的子分區列信息:select * from ALL_SUBPART_KEY_COLUMNS
——顯示當前用戶全部分區表的子分區列信息:select * from USER_SUBPART_KEY_COLUMNS
——怎樣查詢出oracle數據庫中全部的的分區表select * from user_tables a where a.partitioned='YES'