建立分區表:(包含四種分區方式:範圍分區,散列分區,列表分區和組合分區)
範圍分區:是指按照列值範圍將表行的數據分佈到不同分區段中.如果表的數據可以按照邏輯範圍進行劃分,并在不同範圍內分佈比較均衡,那麼可以使用範圍分區.一般以時間欄位分區.
語法如下:
create table tablename (id number(3),dt date) partition by range (dt)(
partition p1 values less than ('01-APR-2004')
tablespace user01,
partition p2 values less than ('01-JUL-2004')
tablespace user02,
partition p3 values less than ('01-OCT-2004')
tablespace user03,
partition p4 values less than ('01-JAN-2005')
tablespace user04
);
使用insert語句給範圍分區表插入值時,必須為分區列提供數據.
散列分區:是指找Oracle提供的散列(HASH)函數計算列值數據,并最終按照函數結果分區大表數據.
語法如下:
create table tablename (id number(6),ss varchar2(30)
)partition by hash(id)(
partition p1 tablespace user01,
partition p2 tablespace user02,
partition p3 tablespace user03,
partition p4 tablespace user04
);
列表分區:用於將離散數據有效地部署到不同分區中.
語法如下:
create table tablename (
deptno number,city varchar2(10)
)partition by list(city)(
partition p1 values('北京','天津') tablespace user01,
partition p2 values('重慶','成都') tablespace user02,
partition p3 values('上海','杭州') tablespace user03,
partition p4 values('廣州','深圳') tablespace user04
);
範圍/散列組合分區:範圍/散列組合分區是範圍分區和散列分區的組合,他首先按照列值範圍進行邏輯的範圍分區,然後在每個範圍分區的基礎上再按照散列分區.對於某些表來說,儘管數據總體是按照特定範圍分佈的,但是每個範圍的數據可能分佈不均.在這種情況下,爲了有效地控制數據分佈,并提高數據範圍性能,可以考慮使用範圍/散列組合分區.
語法如下:
create table tablename(order_id number,order_date date,product_id number
)partition by range(order_date)
subpartition by hash(product_id) subpartitions 4
store in (user01,user02,user03,user04)(
partition p1 values less than('01-APR-2004'),
partition p2 values less than('01-JUL-2004'),
partition p3 values less than('01-OCT-2004'),
partition p4 values less than('01-JAN-2005')
);
範圍/列表組合分區:是範圍分區和列表分區的組合,他首先按照列值範圍進行邏輯意義上的範圍分區,然後再每個範圍分區的基礎上再按照離散值進行列表分區.
語法如下:
create table tablename(deptno mumber,sale_date date,sale_amount number,city varchar2(10)
)
partition by range (sale_date) subpartition by list(city)(
partition r1 values less than ('1-APR-2004')
tablespace user01(
subpartition r1_1 values('北京','上海'),
subpartition r1_2 values('廣州','重慶'),
subpartition r1_3 values('南京','武漢'),
subpartition r1_4 values(default)
),
partition r2 values less than ('1-JUL-2004')
tablespace user02(
subpartition r2_1 values('北京','上海'),
subpartition r2_2 values('廣州','重慶'),
subpartition r2_3 values('南京','武漢'),
subpartition r2_4 values(default)
),
partition r3 values less than ('1-OCT-2004')
tablespace user03(
subpartition r3_1 values('北京','上海'),
subpartition r3_2 values('廣州','重慶'),
subpartition r3_3 values('南京','武漢'),
subpartition r3_4 values(default)
),
partition r4 values less than ('1-JAN-2005')
tablespace user04(
subpartition r4_1 values('北京','上海'),
subpartition r4_2 values('廣州','重慶'),
subpartition r4_3 values('南京','武漢'),
subpartition r4_4 values(default)
)
);
修改分區表:
1.在範圍分區表尾部增加分區
alter table tablename add partition partitionname values less than ('01-04-2005');
如果是在範圍分區表的頂部或者中間增加分區,可以使用split partition選項
alter table tablename split partition p3 at ('01-08-2004')
into (partition p3_1,partition p3_2);
2.為散列分區表增加分區
alter table tablename add partition p6;
3.為列表分區表增加分區
alter table tablename add partition p5 values('拉薩','烏魯木齊');
4.為範圍/散列分區表增加主分區和子分區
alter table tablename add partition p5
with less than('01-04-2005');----增加主分區
alter table tablename modify partition p5 add subpartition;---增加子分區
5.為範圍/列表分區表增加主分區和子分區
alter table tablename add partition r5 values less than ('01-04-2005')(
subpartition r5_1 values ('北京','上海'),
subpartition r5_2 values ('廣州','重慶')
);
alter table tablename modify partition r5
add subpartition r5_3 values('鄭州','廈門');
刪除分區:
刪除範圍分區表,列表分區表或者範圍/列表組合分區表的某分區:
alter table tablename drop partition partitionname;
如果是刪除範圍/列表組合分區表的子分區
alter table tablename drop subpartition partitionname;
刪除散列分區或範圍/散列分區表時
alter table tablename coalesce partition;
刪除範圍/散列子分區:
alter table tablename modify partition partitionname coalesce subpartition;
交換分區數據:
以將分區表數據交換到普通表為例:
alter table sales exchange partition partitionname with table tablename;
截斷分區:
alter table tablename truncate partition partitionname;
修改分區名稱:
alter table tablename rename partition oldpartitionname to newpartitionname;
合併分區:
alter table tablename merge partitions p1,p2 into partition p_half;
重組分區:
alter table tablename move partition partitionname tablespace tablespacename;
為列表分區和子分區增加值:
alter table tablename modify partition partitioname add values ('呼和浩特');
如果是範圍/列表組合分區,可以使用下列語句給子分區添加值.
alter table tablename modify subpartition subpartitionname add values('呼和浩特');
為列表分區或子分區刪除值:
alter table tablename modify partition partitionname drop values ('呼和浩特');
alter table tablename modify subpartition subpartitionname drop values ('呼和浩特');
在分區表上既可以建立全局索引也可以建立分區索引
建立全局索引 使用Global選項,建立分區索引使用local選項.
create index indexname on tablename(columnname) global/local;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16754036/viewspace-677549/
,如需转载,请注明出处,否则将追究法律责任。