??? 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算法均勻分布在各個(gè)分區(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ū)用于對(duì)非數(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ū)之后,還要對(duì)每個(gè)分區(qū)的數(shù)據(jù)散列分布在幾個(gè)表空間中
?
??? 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'2008-01-01'),
??? ??? partition part_02 valueslessthan(date'2009-01-01'),
??? ??? partition part_03 valueslessthan(maxvalue)
??? ?? );
?
??? 注:使用hash是為了使數(shù)據(jù)分散到各個(gè)tablespace,使用range是為了查詢、操作時(shí)分開part_01,功能不同!
??
??? 5、組合范圍列表分區(qū)
?
??? 先對(duì)范圍分區(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兩種方法簡(jiǎn)單了解一下就可以,記住格式。
?
?
??? 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ū)表的操作
?
??? 對(duì)于分區(qū)表,可以進(jìn)行與正常的堆表一樣的所有操作,另外還可以專門針對(duì)分區(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ù)量很大的時(shí)候,指定分區(qū)會(huì)大大提高效率
?
?
分區(qū)表維護(hù)
?
??? 1、刪除分區(qū)
?
??? altertable t1_trans
??? droppartition part_02;
???? 注:刪除分區(qū)會(huì)自動(dòng)刪除分區(qū)中的所有數(shù)據(jù),而不是交由剩下分區(qū)。
?
??? 2、添加分區(qū)
?
??? altertable t1_trans
??? addpartition part_02 valueslessthan(20000) tablespace users;
???? 注:添加時(shí)不能在兩個(gè)范圍內(nèi)插入分區(qū),必須要大于最后一個(gè)分區(qū)的最大值。
?
??? 3、合并分區(qū)
?
??? altertable t1_trans
??? mergepartitions part_01,part_02 intopartition part_new;
?
??? 注:合并時(shí)不能將結(jié)果partition命名為小的那個(gè)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;
??