DATE型別INTERVAL分割槽
11g新增的INTERVAL分割槽使得RANGE分割槽的新建分割槽工作大為簡化,這個工作將隨著資料的插入由Oracle自動完成。
顧名思義INTERVAL分割槽需要提供一個INTERVAL,而對於字元型別是不存在INTERVAL的,因此只有NUMBER型別和DATE型別支援INTERVAL分割槽。
其中NUMBER型別的INTERVAL分割槽很簡單,因此這裡僅描述相對複雜一點的DATE型別的INTERVAL分割槽。需要注意這裡的DATE是泛指,包括DATE、TIMESTANP、TIMESTAMP WITH ZONE和TIMESTAMP WITH LOCAL ZONE多個日期相關的資料型別。
對於INTERVAL值的限定,有兩種方法,一種是透過NUMTOYMINTERVAL或NUMTODSINTERAL函式:
SQL> CREATE TABLE T_PART_INTER_MONTH
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
7 (PARTITION P1 VALUES LESS THAN (TO_DATE('2010-1', 'YYYY-MM')));
表已建立。
SQL> CREATE TABLE T_PART_INTER_DAY
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 INTERVAL (NUMTODSINTERVAL(1, 'DAY'))
7 (PARTITION P1 VALUES LESS THAN (TO_DATE('2010-1-1', 'YYYY-MM-DD')));
表已建立。
另一種等價的方法是直接利用INTERVAL表示式:
SQL> DROP TABLE T_PART_INTER_MONTH PURGE;
表已刪除。
SQL> DROP TABLE T_PART_INTER_DAY PURGE;
表已刪除。
SQL> CREATE TABLE T_PART_INTER_MONTH
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 INTERVAL (INTERVAL '1' MONTH)
7 (PARTITION P1 VALUES LESS THAN (TO_DATE('2010-1', 'YYYY-MM')));
表已建立。
SQL> CREATE TABLE T_PART_INTER_DAY
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 INTERVAL (INTERVAL '1' DAY)
7 (PARTITION P1 VALUES LESS THAN (TO_DATE('2010-1-1', 'YYYY-MM-DD')));
表已建立。
無論使用哪種方法,其實都是INTERVAL的方式,這種方式和ADD_MONTHS函式不同,不會自動處理月末的問題,因此以月為單位的INTERVAL不能以超過28日的日期作為最後一個範圍分割槽的上限:
SQL> CREATE TABLE T_PART_TEST
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 INTERVAL (INTERVAL '1' MONTH)
7 (PARTITION P1 VALUES LESS THAN (TO_DATE('2010-3-29', 'YYYY-MM-DD')));
CREATE TABLE T_PART_TEST
*
第 1 行出現錯誤:
ORA-14767: 無法使用現有上限指定此間隔
避免這種錯誤其實很簡單,最簡單的是利用28日作為分割槽上限:
SQL> CREATE TABLE T_PART_TEST
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 INTERVAL (INTERVAL '1' MONTH)
7 (PARTITION P1 VALUES LESS THAN (TO_DATE('2010-3-28', 'YYYY-MM-DD')));
表已建立。
或者再建立一個最高分割槽,避免超過28日的日誌作為最後一個分割槽的上限出現:
SQL> DROP TABLE T_PART_TEST PURGE;
表已刪除。
SQL> CREATE TABLE T_PART_TEST
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CREATE_DATE DATE)
5 PARTITION BY RANGE (CREATE_DATE)
6 INTERVAL (INTERVAL '1' MONTH)
7 (PARTITION P1 VALUES LESS THAN (TO_DATE('2010-3-28', 'YYYY-MM-DD')),
8 PARTITION P2 VALUES LESS THAN (TO_DATE('2010-4-1', 'YYYY-MM-DD')));
表已建立。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-628017/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- INTERVAL分割槽表鎖分割槽操作
- 範圍分割槽表和INTERVAL分割槽表對於SPLIT分割槽的區別
- Oracle11g INTERVAL分割槽新增分割槽策略Oracle
- Windows分割槽型別Windows型別
- Mysql 的分割槽型別MySql型別
- ORACLE 11g 範圍分割槽錶轉換INTERVAL分割槽表Oracle
- 定期truncate 歷史間隔分割槽INTERVAL PARTITION
- Oracle Interval Partition 自動分割槽表-實驗Oracle
- 11g分割槽新特性之interval partition
- Interval資料型別資料型別
- MySQL表的四種分割槽型別MySql型別
- Oracle查詢Interval partition分割槽表內資料Oracle
- 使用Oracle Database 11g建立Interval分割槽表OracleDatabase
- date型別型別
- Oracle分割槽技術-- interval parition實驗及總結Oracle
- Oracle Interval Partition 預設分割槽重新命名-指令碼Oracle指令碼
- 11g分佈表新特性——Interval分割槽(上)
- 11g分佈表新特性——Interval分割槽(下)
- 時間型別interval year to month型別
- Date型別和Regex型別型別
- Oracle INTERVAL YEAR TO MONTH 和INTERVAL DAY TO SECOND 資料型別Oracle資料型別
- 詳解Apache Hudi如何配置各種型別分割槽Apache型別
- 時間型分割槽欄位不走分割槽的解決
- INTERVAL分割槽插入大量資料導致ORA-4031錯誤
- Oracle INTERVAL DAY TO SECOND資料型別Oracle資料型別
- oracle下interval型別的用法總結Oracle型別
- 固態硬碟分割槽與不分割槽的區別 秒懂SSD要不要分割槽硬碟
- 將timestamp型別轉換為date型別型別
- 用perl指令碼檢測即將到期的date分割槽指令碼
- interval partition自動新增分割槽引起的shared pool 4031錯誤
- date、timestamp欄位型別型別
- ibatis查詢date型別BAT型別
- Oracle中date型別使用注意Oracle型別
- 關於INTERVAL DAY TO SECOND資料型別資料型別
- ORACLE DATE型別和TIMESTAMP型別DUMP換算Oracle型別
- oracle timestamp轉換date及date型別相減Oracle型別
- 讀取oracle long型別及判斷是否自動分割槽表Oracle型別
- mysql 5.1.43 開始,對timestamp 型別的分割槽有所改變MySql型別