Oracle11新特性——分割槽功能增強(二)
打算寫一系列的文章介紹11g的新特性和變化。
Oracle11g在分割槽方面做了很大的提高,不但新增了4種複合分割槽型別,還增加了虛擬列分割槽、系統分割槽、INTERVAL分割槽等功能。
這一篇介紹Oracle11g新增的INTERVAL分割槽功能。
Oracle11新特性——分割槽功能增強(一):http://yangtingkun.itpub.net/post/468/403962
在使用範圍分割槽表的時候,尤其是建立一個以時間進行分割槽的分割槽表,感覺最麻煩的事情就是需要不斷的ADD或者SPLIT新的分割槽。
無論是手工進行這個操作還是透過寫PL/SQL來執行,都是比較麻煩的事情。
在11g中,Oracle把這個麻煩解決掉了,新增的INTERVAL功能,可以在需要的時候自動的新增新的分割槽。
看一個簡單的例子:
SQL> CREATE TABLE T_INTERVAL
2 PARTITION BY RANGE (CREATED)
3 INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
4 (PARTITION P1 VALUES LESS THAN (TO_DATE('2007-9-1', 'YYYY-MM-DD')))
5 AS SELECT * FROM DBA_OBJECTS;
表已建立。
SQL> SELECT TO_CHAR(MAX(CREATED), 'YYYY-MM-DD HH24:MI:SS') FROM T_INTERVAL;
TO_CHAR(MAX(CREATED
-------------------
2007-10-10 05:01:57
在建立分割槽表的時候只指定了一個分割槽,上限為9月1日,但是資料的最大值已經達到了10月10日,Oracle這裡自動建立了兩個分割槽:
SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS
2 WHERE TABLE_NAME = 'T_INTERVAL'
3 ORDER BY 2;
TABLE_NAME PARTITION_NAME HIGH_VALUE
---------- -------------- --------------------------------------------------------------------------
T_INTERVAL P1 TO_DATE(' 2007-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA
T_INTERVAL SYS_P63 TO_DATE(' 2007-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORI
T_INTERVAL SYS_P64 TO_DATE(' 2007-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORI
使用INTERVAL分割槽,可以不再為分割槽的增長而發愁。而且,只需要執行普通的DML語句,Oracle會自動維護分割槽,不在需要發出DDL語句,也不會由於DDL影響到索引的狀態:
SQL> CREATE INDEX IND_INTERVAL_OWNER ON T_INTERVAL(OWNER) LOCAL;
索引已建立。
SQL> CREATE INDEX IND_INTERVAL_OBJECTNAME ON T_INTERVAL(OBJECT_NAME);
索引已建立。
SQL> INSERT INTO T_INTERVAL (OWNER, OBJECT_NAME, CREATED)
2 VALUES (USER, 'TEST', SYSDATE + 30);
已建立 1 行。
SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS
2 WHERE TABLE_NAME = 'T_INTERVAL'
3 ORDER BY 2;
TABLE_NAME PARTITION_NAME HIGH_VALUE
---------- -------------- --------------------------------------------------------------------------
T_INTERVAL P1 TO_DATE(' 2007-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')
T_INTERVAL SYS_P63 TO_DATE(' 2007-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORI
T_INTERVAL SYS_P64 TO_DATE(' 2007-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORI
T_INTERVAL SYS_P74 TO_DATE(' 2007-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORI
SQL> SELECT STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_INTERVAL';
STATUS
--------
VALID
N/A
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_INTERVAL';
INDEX_NAME STATUS
------------------------------ --------
IND_INTERVAL_OBJECTNAME VALID
IND_INTERVAL_OWNER N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS
2 WHERE INDEX_NAME = 'IND_INTERVAL_OWNER';
INDEX_NAME PARTITION_NAME STATUS
------------------------------ -------------- --------
IND_INTERVAL_OWNER P1 USABLE
IND_INTERVAL_OWNER SYS_P72 USABLE
IND_INTERVAL_OWNER SYS_P73 USABLE
IND_INTERVAL_OWNER SYS_P74 USABLE
最後看一個NUMBER型別INTERVAL的例子:
SQL> CREATE TABLE T_INTERVAL_NUMBER
2 PARTITION BY RANGE (ID)
3 INTERVAL (10000)
4 (PARTITION P1 VALUES LESS THAN (10000))
5 AS SELECT ROWNUM ID, A.* FROM DBA_OBJECTS A;
表已建立。
SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE FROM USER_TAB_PARTITIONS
2 WHERE TABLE_NAME = 'T_INTERVAL_NUMBER'
3 ORDER BY 2;
TABLE_NAME PARTITION_NAME HIGH_VALUE
-------------------- -------------- -------------------------------------------------------
T_INTERVAL_NUMBER P1 10000
T_INTERVAL_NUMBER SYS_P75 20000
T_INTERVAL_NUMBER SYS_P76 30000
T_INTERVAL_NUMBER SYS_P77 40000
T_INTERVAL_NUMBER SYS_P78 50000
T_INTERVAL_NUMBER SYS_P79 60000
T_INTERVAL_NUMBER SYS_P80 70000
已選擇7行。
由於其他資料型別沒有INTERVAL的概念,因此INTERVAL分割槽只支援NUMBER和DATE型別。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69453/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle11新特性——分割槽功能增強Oracle
- Oracle11新特性——分割槽功能增強(五)Oracle
- Oracle11新特性——分割槽功能增強(四)Oracle
- Oracle11新特性——分割槽功能增強(三)Oracle
- Oracle11新特性——分割槽功能增強(一)Oracle
- Oracle11新特性——備份恢復功能增強(二)Oracle
- Oracle11新特性——線上操作功能增強(二)Oracle
- Oracle11新特性——備份恢復功能增強Oracle
- Oracle11新特性——備份恢復功能增強(六)Oracle
- Oracle11新特性——備份恢復功能增強(五)Oracle
- Oracle11新特性——備份恢復功能增強(四)Oracle
- Oracle11新特性——備份恢復功能增強(三)Oracle
- Oracle11新特性——備份恢復功能增強(一)Oracle
- Oracle11新特性——備份恢復功能增強(十)Oracle
- Oracle11新特性——備份恢復功能增強(九)Oracle
- Oracle11新特性——備份恢復功能增強(八)Oracle
- Oracle11新特性——備份恢復功能增強(七)Oracle
- Oracle11新特性——備份恢復功能增強(十一)Oracle
- Oracle11新特性——線上操作功能增強(七)Oracle
- Oracle11新特性——線上操作功能增強(六)Oracle
- Oracle11新特性——線上操作功能增強(五)Oracle
- Oracle11新特性——線上操作功能增強(四)Oracle
- Oracle11新特性——線上操作功能增強(三)Oracle
- Oracle11新特性——線上操作功能增強(一)Oracle
- Oracle11新特性——PLSQL新特性(二)OracleSQL
- Oracle12c功能增強 新特性之管理功能的增強Oracle
- 【ORACLE新特性】11G 分割槽新特性Oracle
- Oracle11新特性——虛擬列(二)Oracle
- Oracle11新特性——撤銷事務(二)Oracle
- Oracle11新特性——PLSQL新特性(七)OracleSQL
- Oracle11新特性——PLSQL新特性(六)OracleSQL
- Oracle11新特性——PLSQL新特性(五)OracleSQL
- Oracle11新特性——PLSQL新特性(四)OracleSQL
- Oracle11新特性——PLSQL新特性(三)OracleSQL
- Oracle11新特性——PLSQL新特性(一)OracleSQL
- Oracle 12c新特性 - Active Data Guard功能增強Oracle
- Oracle11g新特性——LOB型別功能增強Oracle型別
- Oracle12c中效能最佳化&功能增強新特性之全域性索引DROP和TRUNCATE 分割槽的非同步維護Oracle索引非同步