一、建立分區的文法如下:
CREATE TABLE table_name
(……)
PARTITION BY RANGE (column_list)
(
PARTITION partition_name VALUES LESS THAN(values_list) TABLESPACE tablespace_name ,
……
)
table_name:表名稱;
column_list:分區關鍵字(表中的欄位)列表;
partition_name:分區名稱;
values_list:與column_list相對應,為分區的上限值;
二、分區維護
a) 擴充分區
A、建立分區資料表空間:
(例CREATE TABLESPACE BCMSPHIS_0603
DATAFILE 'F:\Oracle\BCMSPHIS_0603.DBF' SIZE 1024K AUTOEXTEND ON NEXT 102400K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
B、建立分區:
(例)ALTER TABLE BCPOnInPDataHisRecSht ADD PARTITION BCPINPPART_0603 VALUES LESS THAN(TO_DATE('2006-10-01','YYYY-MM-DD'))
TABLESPACE BCPINPHIS_0603;
C、修改分區索引資料表空間指向:
(例)ALTER INDEX XIE1BCPOnInPDataHisRecSht REBUILD PARTITION BCPINPPART_0603
TABLESPACE BCPINPHIS_0603;
ALTER INDEX XIE2BCPOnInPDataHisRecSht REBUILD PARTITION BCPINPPART_0603
TABLESPACE BCPINPHIS_0603;
說明:當然擴充新的分區過程中也可以不建立新的資料表空間,而使用原來已建立的資料表空間;建立新的分區表的上限值必須大於已有分區的最大上限值,否則無法建立新的分區表;在給表成功添加分區的同時,如果該表定義了局部索引時,也將為每個局部索引自動建立新的分區,分區索引名稱與新建立的分區表名稱相同,但分區索引的資料表空間指向索引的資料表空間,因此,如果要將分區表和分區索引放在同一資料表空間下的話就需要修改分區索引的資料表空間;不可以明確向局部索引中增加分區,只能在向表中增加分區時自動向局部索引中增加新的分區;
執行方式如下:(說明:在執行該SQL前如果您已連結著資料庫,請斷開資料庫重新連結;)
b) 分區資料備份
c) 分區刪除
分區刪除文法:ALTER TABLE DROP PARTITION partition_name
例:ALTER TABLE DROP PARTITION bctinppart_0502
該方式刪除表分區和其中的資料,同時該表上局部索引的對應分區也被刪除(即使用該索引分割區被標記為不可用,它們也被刪除);不能明確從局部索引中刪除分區,只是在從表中刪除分區時刪除局部索引分割區;倘若要刪除一個表分區,但保留其資料,則必須將該分區合并到鄰近的分區中。
d) 分區資料恢複
恢複某一個分區的資料:
恢複分區資料時,所恢複分區必須存在,如果恢複分區不存在則必須重新建立該分區,否則恢複資料失敗;當建立的恢複分區的上限值大於當前分區最大上限值只,直接建立恢複分區然後修改分區索引的資料表空間即可;當建立的恢複分區上限值小於當前分區最大上限值時,只能進行分區的分割以建立恢複分區;
e) 分割分區
使用ALTER TABLE 語句的 SPLIT PARTITION子名可以將一個分區分割成兩個分區。新分區從舊分區繼承屬性;舊分區相關的段將被丟棄;該語句也分割該表上每個局部索引中對應的分區(即使它們被標記為不可用);
除了TABLESPACE屬性外,舊局部索引分割區的物理屬性被用於新的索引分割區;
例:
--分割分區
alter table bctoninpdatahisrecsht split partition bctinppart _0702
at(to_date('2007-05-01','YYYY-MM-DD'))
into(partition bctinppart_070201 tablespace bctinppart_070201,partition bctinppart_070202);
--修改分區索引資料表空間
ALTER INDEX XIE1 bctoninpdatahisrecsht REBUILD PARTITION bctinppart _070201
TABLESPACE bctinppart _070201;
ALTER INDEX XIE2 bctoninpdatahisrecsht REBUILD PARTITION bctinppart _070202
TABLESPACE bctinppart _070202;
三、其它:
如果記錄的資訊超過了分區的上限值則Oracle報錯(ORA-14400:插入的分區關鍵字未映射到任何分區'))
局部索引和全域索引
局部索引:用LOCAL為各個分區建立獨立的索引,由於每個分區都有自己獨立的索引,所以分區索引對於表來說是局部的;
全域索引:全域索引包含多個分區的值;索引的值跨越多個分區;當在分區裡有許多事務發生或需要確保所有分區資料值的唯一性時,通常使用全域索引
局部索引也確保唯一性,但是全域索引執行唯一性檢查更快。