Posted on 2008-12-21 10:17
陕西BOY 阅读(232)
评论(0) 编辑 收藏
在应用系统中,如果某个表的数据量很大时,为了保持数据库的性能,一般都考虑使用分区表,分区表主要有三种分区方式,分别是范围(RANGE)、列表(LIST)、哈希(HASH)分区,根据表的特性选择分区类型,一般情况下用RANGE和LIST两种就够了
.................
下面就只说RANGE和LIST两种分区表的创建和管理(列表LIST分区是9I之后才有,8I没有的)
1、创建分区
--创建范围(RANGE)分区表的语法:
create table test_tbl(emp_name varchar2(50), emp_loc varchar2(50), emp_hire_date date)
partition by range(emp_hire_date)(
partition p_hire_date1 values less than (to_date('2000-01-01','yyyy-mm-dd')) tablespace t_hire_date1,
partition p_hire_date2 values less than (to_date('2001-01-01','yyyy-mm-dd')) tablespace t_hire_date2,
partition p_hire_date3 values less than (to_date('2002-01-01','yyyy-mm-dd')) tablespace t_hire_date3
...
partition p_hire_dateN values less than (maxvalue) tablespace t_hire_dateN
)
--创建列表(LIST)分区表的语法:
create table test_tbl(emp_name varchar2(50), emp_loc varchar2(50), emp_hire_date date)
partition by list(emp_loc)(
partition p_loc1 values ('GZ') tablespace t_hire_date1,
partition p_loc2 values ('BJ') tablespace t_hire_date2,
partition p_loc3 values ('SH') tablespace t_hire_date3
)
2、管理分区
--增加分区(如果表分区有MAXVALUE,不能再增加分区)
alter table test_tbl add partition p_hire_date4 values less than(to_date('2002-06-01','yyyy-mm-dd'))
--删除分区
alter table test_tbl drop partition p_hire_date4
--截断分区(删除分区的数据)
alter table test_tbl truncate partition p_hire_date4
--拆分分区(拆分后,数据以1999-01-01为临界分别存放在两个分区,p_hire_date1不再存在)
alter table test_tbl split partition p_hire_date1 at(to_date('1999-01-01','yyyy-mm-dd'))
into
(
partition p_hire_date11,
partition p_hire_date12
)
--合并分区(合并后,p_hire_date11和p_hire_date12两个分区就不存在了)
alter table test_tbl merge partitions p_hire_date11,p_hire_date12 into partition p_hire_date1
--交换分区
alter table test_tbl exchange partition p_hire_date1 with table test_tbl2
当要把数据很大的表test_tbl2的数据插入分区表test_tbl中,如果用insert into是很低性能的,最好方法是用交换分区方法。但要注意,交换分区时,当使用without validation时,数据是不验证test_tbl2表的数据是否都能满足分区p_hire_date1的条件