打算寫一系列的文章介紹11g的新特性和變化。
Oracle11g在分區方面做了很大的提高,不但新增了4種複合分區類型,還增加了虛拟列分區、系統分區、INTERVAL分區等功能。
這一篇介紹Oracle11g的系統分區功能。
Oracle11新特性——分區功能增強(一):http://yangtingkun.itpub.net/post/468/403962
Oracle11新特性——分區功能增強(二):http://yangtingkun.itpub.net/post/468/404223
Oracle11新特性——分區功能增強(三):http://yangtingkun.itpub.net/post/468/404694
Oracle11新特性——分區功能增強(四):http://yangtingkun.itpub.net/post/468/410604
11g以前的分區表,需要指定一個或多個分區字段,并根據這個分區字段的值,按照一定的算法(RANGE、HASH和LIST)來決定一條記錄屬于那個分區。
從11g開始,Oracle允許使用者不指定分區列,完全根據程式來控制資料存儲在那個分區中。這就是11g提供的系統分區功能。
在以前,确定了分區列和分區方式,那麼一條資料屬于哪個分區也就被确定下來。而對于系統分區而言,分區是分區,資料是資料,二者沒有對應的關系。資料可以被放在任意一個分區中,這不是由資料本身決定的,而是應用程式在插入時确定的。
SQL> CREATE TABLE T_SYSTEM
2 (ID NUMBER, NAME VARCHAR2(30))
3 PARTITION BY SYSTEM
4 (PARTITION P1, PARTITION P2, PARTITION P3, PARTITION P4);
表已建立。
SQL> INSERT INTO T_SYSTEM VALUES (1, 'ABC');
INSERT INTO T_SYSTEM VALUES (1, 'ABC')
*第 1 行出現錯誤:
ORA-14701: 對于按“系統”方法進行分區的表, 必須對 DML 使用分區擴充名或綁定變量
對于系統分區表,插入的時候必須指定分區:
SQL> INSERT INTO T_SYSTEM PARTITION (P1) VALUES (1, 'ABC');
已建立 1 行。
SQL> INSERT INTO T_SYSTEM PARTITION (P2) VALUES (1, 'ABC');
已建立 1 行。
SQL> SELECT ROWID, ID, NAME FROM T_SYSTEM;
ROWID ID NAME
------------------ ---------- ------------------------------
AAARcdAAFAAAB2nAAA 1 ABC
AAARceAAFAAAB2vAAA 1 ABC
SQL> SELECT ID, NAME,
2 (SELECT SUBOBJECT_NAME FROM USER_OBJECTS WHERE DATA_OBJECT_ID = DBMS_ROWID.ROWID_OBJECT(A.ROWID))
3 FROM T_SYSTEM A;
ID NAME (SELECTSUBOBJECT_NAMEFROMUSER_
---------- ------------------------------ ------------------------------
1 ABC P1
1 ABC P2
從上面可以看到,對于SYSTEM分區方式,完全相同的資料也可以插入到兩個不同的分區中。資料和分區沒有任何關系。
對于系統分區表可以使用絕大部分分區維護功能,除了ALTER TABLE SPLIT PARTITION功能。因為沒有分區列,Oracle無法将分區中的資料配置設定到兩個新的分區中。
同樣的道理,采用了系統分區的分區表是不能通過CREATE TABLE AS SELECT方式建立的。
而且,由于沒有分區列,是以無法建立唯一的LOCAL索引。
系統分區方式繼承了分區帶來的可用性和易維護性的好處,但是分區消除對于系統分區是無效的。由于不清楚資料存放在那個分區,是以對于系統分區中資料的查找需要在所有分區中進行。
系統分區要求INSERT語句必須包括分區描述語句,SELECT、UPDATE和DELETE語句則不需要。如果考慮到分區消除對系統分區無效,那麼如果了解資料存儲在哪個分區中,最好在DML的時候指定分區,這樣可以提供查詢的性能,避免全表掃描的産生。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69489/,如需轉載,請注明出處,否則将追究法律責任。
轉載于:http://blog.itpub.net/4227/viewspace-69489/