Oracle 間隔分割槽
間隔分割槽是範圍分割槽的一個擴充,當插入的資料超過了現有的所有分割槽時,資料庫會按照指定的間隔自動建立分割槽。Oracle支援建立單一的間隔分割槽表也可以建立interval-range、interval-hash和interval-list三種組合分割槽表。
使用間隔分割槽的場景:
1.使用間隔分割槽最大的好處就是不用再提前手工的建立分割槽,只要後續建立的分割槽的分割槽間隔是統一的,就可以考慮使用間隔分割槽。並且,在後續建立的分割槽中還能透過store in 選項以迴圈複用的方式來將分割槽存放到不同的表空間裡。
2.如果某張表是範圍分割槽,則很容易的將該錶轉換成間隔分割槽表,例如sh使用者下的sales表,可透過如下語句來修改:
SH@ORA11GR2 > ALTER TABLE sales SET INTERVAL (NUMTOYMINTERVAL(1,'MONTH'));
Table altered.
Table altered.
注意,如果範圍分割槽存在最大分割槽MAXVALUE時,無法透過命令直接改為間隔分割槽。
例如,先建立表interval_test
create table interval_test (id number, name varchar2(20))
partition by range(id)
(partition p1 values less than (100),
partition p2 values less than (200),
partition p3 values less than(MAXVALUE));
接著嘗試將該表修改為間隔分割槽表
SH@ORA11GR2 > alter table interval_test set interval (200);
alter table interval_test set interval (200)
*
ERROR at line 1:
ORA-14759: SET INTERVAL is not legal on this table.
使用oerr檢視報錯資訊
[oracle@oracle11g ~]$ oerr ora 14759
14759, 00000, "SET INTERVAL is not legal on this table."
// *Cause: SET INTERVAL clause was specified. ALTER TABLE SET INTERVAL is
// only legal on a range partitioned table with a single partitioning
// column. Additionally, this table cannot have a maxvalue partition
// and cannot be the parent table for any reference partitioned tables.
// *Action: Use SET INTERVAL only on a valid table.
3.如果某張表為間隔分割槽表,則無法手工的對該表手動新增分割槽。所以如果決定將某張表修改為間隔分割槽,要考慮修改相關的應用程式或者儲存過程。
SH@ORA11GR2 > alter table interval_sales add partition p4 values less than (to_date('20150101','yyyymmdd'));
alter table interval_sales add partition p4 values less than (to_date('20150101','yyyymmdd'))
*
ERROR at line 1:
ORA-14760: ADD PARTITION is not permitted on Interval partitioned objects
使用間隔分割槽的限制:
1.只能指定一個分割槽鍵,並且鍵值型別只能為number或date。
2.間隔分割槽不支援索引組織表。
3.不能在間隔分割槽上建立域索引(domain index)
管理間隔分割槽:
1.建立間隔分割槽:
CREATE TABLE interval_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)
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH'))
STORE IN (interv1, interv2)
( PARTITION p0 VALUES LESS THAN (TO_DATE('1-1-2008', 'DD-MM-YYYY')),
PARTITION p1 VALUES LESS THAN (TO_DATE('1-1-2009', 'DD-MM-YYYY')),
PARTITION p2 VALUES LESS THAN (TO_DATE('1-7-2009', 'DD-MM-YYYY')),
PARTITION p3 VALUES LESS THAN (TO_DATE('1-1-2010', 'DD-MM-YYYY')) );
2.禁用間隔分割槽
SH@ORA11GR2 > alter table interval_sales set interval ();
Table altered.
3.修改間隔分割槽interval值
SH@ORA11GR2 > alter table interval_sales set interval (NUMTOYMINTERVAL(1,'YEAR'));
Table altered.
4.刪除間隔分割槽
SH@ORA11GR2 > ALTER TABLE interval_sales DROP PARTITION FOR(TO_DATE(' 2008-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
Table altered.
5.Merge間隔分割槽
首先插入兩條資料,讓系統自動生成兩個間隔分割槽
SH@ORA11GR2 > insert into interval_sales values (1,2,to_date('20150101','yyyymmdd'),3,3,3,3);
1 row created.
SH@ORA11GR2 > commit;
Commit complete.
SH@ORA11GR2 > insert into interval_sales values (1,2,to_date('20150201','yyyymmdd'),3,3,3,3);
1 row created.
SH@ORA11GR2 > commit;
接著,執行命令,合併兩個分割槽
SH@ORA11GR2 > alter table interval_sales merge partitions for ( to_date('20150101','yyyymmdd')) , for(to_date('20150201','yyyymmdd'));
Table altered.
Table altered.
注意,合併的兩個分割槽需要前後相連,否則報錯,無法合併!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30167136/viewspace-1690757/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle分割槽表和分割槽表exchangeOracle
- oracle分割槽表和非分割槽表exchangeOracle
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- ORACLE分割槽表梳理系列Oracle
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- Oracle12c:建立主分割槽、子分割槽,實現自動分割槽插入效果Oracle
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- 移動分割槽表和分割槽索引的表空間索引
- 從10046看Oracle分割槽裁剪Oracle
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- oracle分割槽交換(exchange)技術Oracle
- Oracle Partition 分割槽詳細總結Oracle
- 對oracle分割槽表的理解整理Oracle
- oracle將表配置為分割槽表Oracle
- oracle 普通表-分割槽表改造流程Oracle
- Oracle SQL調優之分割槽表OracleSQL
- Oracle分割槽表基礎運維-07增加分割槽(4 RANGE_HASH)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(5RANGE_LIST)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(6RANGE_RANGE)Oracle運維
- Oracle 12.2之後ALTER TABLE .. MODIFY轉換非分割槽表為分割槽表Oracle
- Oracle drop分割槽表單個分割槽無法透過閃回恢復Oracle
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- boot分割槽剩餘空間不足boot
- 硬碟空間的管理和分割槽硬碟
- Oracle 到 PostgreSQL參考分割槽實現OracleSQL
- Oracle vs PostgreSQL DBA(13)- 拆分(split)分割槽OracleSQL
- ORACLE刪除-表分割槽和資料Oracle
- 【INDEX】Oracle分割槽索引技術詳解IndexOracle索引
- Oracle 12C新特性-線上把非分割槽錶轉為分割槽表Oracle
- 增加表分割槽時,為local分割槽索引指定不同表空間的方法索引
- 騰訊雲CVM主機在原分割槽(主分割槽)上增加磁碟空間