ITPub博客

首页 > 数据库 > Oracle > Oracle分区

Oracle分区

原创 Oracle 作者:Damon__Li 时间:2014-06-10 11:05:34 0 删除 编辑
--分区依赖列不能是long、lob类型
--如果选择的分区不能确保各分区内记录量的基本平均,则这种分区方式有可能是不恰当的。
--对于分区的表或索引,其所涉及的所有分区,其块大小必须一致。
--索引组织表只支持普通分区,不支持组合分区,且分区依赖列必须是主键
--范围分区Range,需指定maxvalue
create table t()
  partition by range(col1)--分区依赖列可以多个,用逗号分隔
  (partition pname1 values less than (100) tablespace tp1,
   partition pname2 values less than (200) tablespace tp2,
   .....
   partition pnamem values less than (maxvalue) tablespace tpm);

--列表分区List,需指定default
create table t()
  partition by list(col1)--分区依赖列只能是一列
  (partition pname1 values(n1,n2,n3) tablespace tp1,
   partition pname1 values(n4,n5,n6) tablespace tp2,
   partition pname1 values(n7,n8,n9) tablespace tp3,
   ......
   partition pname1 values(default) tablespace tpm);

--哈希分区Hash
create table t()
  partition by hash(col1)--分区依赖列可以多个,用逗号分隔
  (partition pname1 tablespace tp1,
   partition pname2 tablespace tp2,
   ......
   partition pnamem tablespce tpm);
   
create table t()
  partition by hash(col1)
  partitions n store in (tp1,tp2...tpm);
--组合分区Range-List/Range-Hash  11g:Range-Range/List-Range/List-Hash/List-List/间隔-范围/间隔-列表/间隔-Hash
--Range-Hash
create table t()
  partition by Range(col1)
  subpartition by Hash(col2)
  subpartitions 4 store in (tp1,tp2,tp3,tp4)
  (partition pname1 values less than (1000) tablespace tp1,
   partition pname2 values less than (2000) tablespace tp2,
   ......
   partition pnamem values less than (maxvalue) tablespace tpm)

create table t()
  partition by Range(col1)
  subpartition by Hash(col2)
  (partition pname1 values less than (10000) tablespace tp1,
   partition pname2 values less than (20000) tablespace tp2
   (subpartition spname1 tablespace tp1,
    subpartition spname2 tablespace tp2),
   partition pname3 values less than (30000) tablespace tp3
    subpartition 3 store in (tp1,tp2,tp3),
   ......
   partition pnamem values less than (maxvalue) tablespace tpm)
--子分区模板,各个分区按照模板创建子分区
create table t()
  partition by Range(col1)
  subpartition by Hash(col2)
  subpartitions template(
    subpartition spname1 tablespace tp1,
    subpartition spname2 tablespace tp2,
    subpartition spname3 tablespace tp3
  )
  (partition pname1 values less than (1000) tablespace tp1,
   partition pname2 values less than (2000) tablespace tp2,
   ......
   partition pnamem values less than (maxvalue) tablespace tpm)

--Range-List
create table t()
  partition by Range(col1)
  subpartition by List(col2)
  subpartition template(
    subpartition spname1 values('aa') tablespace tp1,
    subpartition spname2 values('bb') tablespace tp2,
    subpartition spname3 values('cc') tablespace tp3,
    ......
    subpartition spnamem values(DEFAULT) tablespace tpm
  )
  (partition pname1 values less than () tablespace tp1,
   partition pname2 values less than () tablespace tp2,
   partition pname3 values less than () tablespace tp3,
   ......
   partition pnamem values less than () tablespace tpm)

--增加分区:都支持  如果有数据移动且为指定update indexes,local及global索引会被置为unuseable
alter table t add partition pname values less than () tablespace tp;
alter table t add partition pname tablespace tp;
alter table t add partition pname values() tablespace tp;

--删除分区:hash不支持
alter table t drop partition pname;
alter table t drop subpartition spname;

--收缩分区:仅支持hash分区及hash子分区
alter table t coalesce partition;

--交换表分区:表与表或分区与分区之间迁移数据,支持所有分区。采用更改数据字典的方式,几乎不涉及IO
--设计交换的2表之间表结构必须一致,除非附加without validation
--如果是从非分区表向分区表做交换,非分区表中的数据必须符合分区表中指定分区的规则,除非附加without validation
--如果从分区表向分区表做交换,被交换的分区的数据必须符合分区规则,除非附加without validation
alter table t exchange partition/subpartition pname with table tname;

--合并分区:hash不支持(coalesce) 合并的分区必须是连续的
alter table t merge partitions p1,p2 into partition p3 tablespace tp3;

--修改List分区
--Add value:新增的value值不能在当前其它任何分区中,且表中也不存在新值的记录
alter table t modify partition/subpartition pname add values('AA','BB');
--Drop value:当前分区存在该value,且没有该value的记录
alter table t modify partition/subpartition pname drop values('AA','BB');

--拆分分区
alter table t split partition/subpartition pname at value(M) into (partition p1,partition p2);--Range
alter table t split partition/subpartition pname values(N1,N2,N3......) into (partition p1,partition p2);--List

--截断分区
alter table t truncate partition/subpartition pname;

--移动分区
alter table t move partition/subpartition pname tablespace tp1;

--重命名分区
alter table t rename partition/subpartition panem to pname_new;

--修改分区默认属性:对当前数据无影响
alter table t modify default attributes [for partition pname] tablespace tp;

--修改子分区模板
alter table t set subpartition template(
  subpartition sp1 tablespace tp1,
  subpartition sp2 tablespace tp2,
  subpartition sp3 tablespace tp3,
  ......
  subpartition spn tablespace tpn);

--11G新增分区
--间隔分区:
--1、Range分区派生而来
--2、只能指定一个分区键,并且分区键必须是number或date类型
--3、必须至少指定一个range分区
--4、不能为间隔分区表创建域索引
--5、不支持索引组织表
--6、对于date类型的可以支持按year、month、day、hour、minute、second定长宽度分区:numtoyminterval(n,'year'|'month')  numtodsinterval(n,'day'|'hour'|'minute'|'second')
--7、对于number类型的必须按照固定宽度分区
create table t()
  partition by range(time_id)
  interval (numtoyminterval(1,'year')) store in (tp1,tp2,tp3,tp4)
  (partition pname1 values less than (to_date('2010-01-01','YYYY-MM-DD')),
   partition pname1 values less than (to_date('2011-01-01','YYYY-MM-DD')),
   partition pname1 values less than (to_date('2012-01-01','YYYY-MM-DD')));
   
create table t()
  partition by range(salary)
  interval (2000)
  (partition pname values less than (2001) tablespace tp1);
 
--系统分区:没有分区键,应用程序控制分区
create table t()
  partition by system
  (partition pname1 tablespace tp1,
   partition pname2 tablespace tp2,
   partition pname3 tablespace tp3)
   
--虚拟列分区

--引用分区




--查看分区
select * from user_part_tables;--分区表信息
select * from user_tab_partitions;--分区信息
select * from user_tab_subpartitions;--子分区信息

select * from user_part_indexes;
select * from user_ind_partitions;
select * from user_ind_subpartitions;


总结的不全,还有几个未研究,后续再补上

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25725504/viewspace-1179400/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 行迁移和行链接
下一篇: oracle 10046
请登录后发表评论 登录
全部评论

注册时间:2012-04-25

  • 博文量
    25
  • 访问量
    61197