??? create
table
t1_trans
??? ? (
??? ??? trans_id
number
,
??? ??? item
varchar2
(
300
),
??? ??? trans_date
date
,
??? ??? trans_state
varchar2
(
10
)
??? ?? )
???
?
partition
by
range
(trans_id)
??? ? (
??? ???
partition
part_01
values
less
than
(
10000
)
tablespace
wxq_tbs,
??? ???
partition
part_02
values
less
than
(
30000
)
tablespace
users,
??? ???
partition
part_03
values
less
than
(
maxvalue
)
tablespace
system
??? ?? );
?
??? 注:必須要從小到達(dá),分類排列。不滿足當(dāng)前分區(qū)條件的,則被放入下一分區(qū)。
?
?
??? 2、散列分區(qū)(hash)
?
??? 散列分區(qū)是根據(jù)hash算法均勻分布在各個分區(qū)上,格式如下:
?
??? create
table
t1_trans
??? ? (
??? ??? trans_id
number
,
??? ??? item
varchar2
(
300
),
??? ??? trans_date
date
,
??? ??? trans_state
varchar2
(
10
)
??? ?? )
???
?
partition
by
hash
(trans_id)
??? ? (
??? ???
partition
part_01
tablespace
wxq_tbs,
??? ???
partition
part_02
tablespace
users,
??? ???
partition
part_03
tablespace
system
??? ?? );
?
?
??? 3、列表分區(qū)(list)
?
??? 列表分區(qū)用于對非數(shù)值的數(shù)據(jù)類型分類分區(qū),要列舉出來,值不能太多
?
??? create
table
t1_trans
??? ? (
??? ??? trans_id
number
,
??? ??? item
varchar2
(
300
),
??? ??? trans_date
date
,
??? ??? trans_state
varchar2
(
10
)
??? ?? )
???
?
partition
by
list
(trans_state)
??? ? (
??? ???
partition
part_01
values
(
'
杭州
'
,
'
南京
'
)
tablespace
wxq_tbs,
??? ??? partition part_02 values ( ' 上海 ' , ' 北京 ' ) tablespace users,
??????? partition part_02 values ( default ) tablespace system
??? ?? );
?
?
??? 4、組合范圍散列分區(qū)
?
??? 在根據(jù)范圍分區(qū)之后,還要對每個分區(qū)的數(shù)據(jù)散列分布在幾個表空間中
?
??? createtable t1_trans
??? ? (
??? ??? trans_id number,
??? ??? item varchar2(300),
??? ??? trans_date date,
??? ??? trans_state varchar2(10)
??? ?? )
??? ? partitionbyrange (trans_date)
??? ? subpartitionbyhash (trans_id)
??? ? subpartitions3storein (wxq_tbs,users,system)
??? ? (
??? ??? partition part_01 valueslessthan(date'
??? ??? partition part_02 valueslessthan(date'
??? ??? partition part_03 valueslessthan(maxvalue)
??? ?? );
?
??? 注:使用hash是為了使數(shù)據(jù)分散到各個tablespace,使用range是為了查詢、操作時分開part_01,功能不同!
??
??? 5、組合范圍列表分區(qū)
?
??? 先對范圍分區(qū),然后根據(jù)列表值再分區(qū),可以交叉tablespace
?
??? createtable t1_trans
??? ? (
??? ??? trans_id number,
??? ??? item varchar2(300),
??? ??? trans_date date,
??? ??? trans_state varchar2(10)
??? ?? )
??? ? partitionbyrange (trans_id)
??? ? subpartitionbylist (trans_state)
??? ? ( partition part_01 valueslessthan(10000)
??? ???? (subpartition part_01_1 values ('杭州','南京') tablespace wxq_tbs,
??? ????? subpartition part_01_2 values (default) tablespace users ),
??? ??? partition part_02 valueslessthan(maxvalue)
??? ???? (subpartition part_02_1 values ('杭州','南京') tablespace wxq_tbs,
??? ????? subpartition part_02_2 values (default) tablespacesystem )
??? ?? );
???? 注:4、5兩種方法簡單了解一下就可以,記住格式。
?
?
??? 6、通過as select建立分區(qū)表
?
??? createtable t1_trans_2
??? ?
??? ? partitionbyrange (polno)
??? ? (
??? ??? partition part_01 valueslessthan(210010000000000) tablespace users,
??? ??? partition part_02 valueslessthan(maxvalue) tablespace wxq_tbs
??? ?? )
??? ? as
??? select * from lcpol;
???? 注:as語句必須寫在分區(qū)的后面。
?
?
分區(qū)表的操作
?
??? 對于分區(qū)表,可以進(jìn)行與正常的堆表一樣的所有操作,另外還可以專門針對分區(qū)進(jìn)行操作。
?
??? 1、查找某分區(qū)數(shù)據(jù)
?
??? select * from t1_trans partition(part_01);
?
??? 2、操作某分區(qū)數(shù)據(jù)
?
??? delete t1_trans partition(part_01);
?
??? 注:當(dāng)數(shù)據(jù)量很大的時候,指定分區(qū)會大大提高效率
?
?
分區(qū)表維護(hù)
?
??? 1、刪除分區(qū)
?
??? altertable t1_trans
??? droppartition part_02;
???? 注:刪除分區(qū)會自動刪除分區(qū)中的所有數(shù)據(jù),而不是交由剩下分區(qū)。
?
??? 2、添加分區(qū)
?
??? altertable t1_trans
??? addpartition part_02 valueslessthan(20000) tablespace users;
???? 注:添加時不能在兩個范圍內(nèi)插入分區(qū),必須要大于最后一個分區(qū)的最大值。
?
??? 3、合并分區(qū)
?
??? altertable t1_trans
??? mergepartitions part_01,part_02 intopartition part_new;
?
??? 注:合并時不能將結(jié)果partition命名為小的那個partition名字。
???? 4、分裂分區(qū)
?
??? altertable t1_trans
??? splitpartition part_02 at (20000) into (partition part_02,partition part_03);
???? 5、改換分區(qū)所屬tablespace
?
??? altertable t1_trans
??? movepartition part_03 tablespace wxq_tbs;
??