ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【实验】【PARTITION】RANGE分区创建

【实验】【PARTITION】RANGE分区创建

原创 Linux操作系统 作者:secooler 时间:2009-07-09 10:33:07 0 删除 编辑
前言:可以说Oracle是分区技术的先行者,在oracle7的时候就提出了分区技术,而且在最新版本的11g中分区的类型又有所加强(如复合索引的组合方式增多了),分区技术对于海量数据的存储和高效检索起到了不可或缺的作用。range分区是使用最多的一种分区,这个小文儿将进行一些关于range分区的介绍和实验。

1.range分区简介
以列值的取值范围作为分区的划分条件
按照表的时间列对每月的数据进行分区就是一个很好的range分区的例子。
不在指定范围内的记录会被存储在maxvalue所在的分区

2.创建range分区表所需要的表空间
sec@ora10g> create tablespace tbs_part01 datafile '/oracle/oradata/ora10g/tbs_part01.dbf' size 100m;
sec@ora10g> create tablespace tbs_part02 datafile '/oracle/oradata/ora10g/tbs_part02.dbf' size 100m;
sec@ora10g> create tablespace tbs_part03 datafile '/oracle/oradata/ora10g/tbs_part03.dbf' size 100m;
sec@ora10g> create tablespace tbs_part04 datafile '/oracle/oradata/ora10g/tbs_part04.dbf' size 100m;

3.创建分区表
sec@ora10g> create table t_partition_range (id number,name varchar2(50))
  2  partition by range(id)(
  3  partition t_range_p1   values less than (10)       tablespace tbs_part01,
  4  partition t_range_p2   values less than (20)       tablespace tbs_part02,
  5  partition t_range_p3   values less than (30)       tablespace tbs_part03,
  6  partition t_range_pmax values less than (maxvalue) tablespace tbs_part04);

Table created.

4.查询user_part_tables视图获得“分区的表”的信息
sec@ora10g> select table_name,partitioning_type,partition_count from user_part_tables where table_name='T_PARTITION_RANGE';

TABLE_NAME                     PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
T_PARTITION_RANGE              RANGE                 4

5.查询user_tab_partitions视图获得“表的分区”信息
sec@ora10g> col TABLE_NAME for a20
sec@ora10g> col partition_name for a20
sec@ora10g> col HIGH_VALUE for a10
sec@ora10g> col TABLESPACE_NAME for a15
sec@ora10g> select table_name,partition_name,high_value,tablespace_name from user_tab_partitions where table_name='T_PARTITION_RANGE' order by partition_position;

TABLE_NAME           PARTITION_NAME       HIGH_VALUE TABLESPACE_NAME
-------------------- -------------------- ---------- ---------------
T_PARTITION_RANGE    T_RANGE_P1           10         TBS_PART01
T_PARTITION_RANGE    T_RANGE_P2           20         TBS_PART02
T_PARTITION_RANGE    T_RANGE_P3           30         TBS_PART03
T_PARTITION_RANGE    T_RANGE_PMAX         MAXVALUE   TBS_PART04

6.创建global索引range分区
sec@ora10g> create index idx_parti_range_id on t_partition_range(id)
  2  global partition by range(id)(
  3  partition i_range_p1   values less than (10)       tablespace tbs_part01,
  4  partition i_range_p2   values less than (40)       tablespace tbs_part02,
  5  partition i_range_pmax values less than (maxvalue) tablespace tbs_part03);

Index created.

7.查询user_part_indexes视图获得“分区的索引”的信息
sec@ora10g> select index_name, partitioning_type, partition_count from user_part_indexes where index_name = 'IDX_PARTI_RANGE_ID';

INDEX_NAME                     PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
IDX_PARTI_RANGE_ID             RANGE                 3

8.查询user_ind_partitions视图获得“索引的分区”信息
sec@ora10g> select index_name,partition_name,high_value,tablespace_name from user_ind_partitions where index_name = 'IDX_PARTI_RANGE_ID' order by partition_position;

INDEX_NAME                     PARTITION_NAME       HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------- ---------- ---------------
IDX_PARTI_RANGE_ID             I_RANGE_P1           10         TBS_PART01
IDX_PARTI_RANGE_ID             I_RANGE_P2           40         TBS_PART02
IDX_PARTI_RANGE_ID             I_RANGE_PMAX         MAXVALUE   TBS_PART03

9.创建local索引range分区
删除原有的索引
sec@ora10g> drop index idx_parti_range_id;

Index dropped.

创建
sec@ora10g> create index idx_parti_range_id on t_partition_range(id) local;

Index created.

查询local索引信息
sec@ora10g> select index_name, partitioning_type, partition_count from user_part_indexes where index_name = 'IDX_PARTI_RANGE_ID';

INDEX_NAME                     PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
IDX_PARTI_RANGE_ID             RANGE                 4

sec@ora10g> select index_name,partition_name, high_value, tablespace_name from user_ind_partitions where index_name = 'IDX_PARTI_RANGE_ID' order by partition_position;

INDEX_NAME                     PARTITION_NAME       HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------- ---------- ---------------
IDX_PARTI_RANGE_ID             T_RANGE_P1           10         TBS_PART01
IDX_PARTI_RANGE_ID             T_RANGE_P2           20         TBS_PART02
IDX_PARTI_RANGE_ID             T_RANGE_P3           30         TBS_PART03
IDX_PARTI_RANGE_ID             T_RANGE_PMAX         MAXVALUE   TBS_PART04

结论:local索引的分区维护完全依赖于其索引所在表

10.local索引的较高级的玩法--自定义表空间
sec@ora10g> drop index idx_parti_range_id;

Index dropped.

sec@ora10g> create index idx_parti_range_id on t_partition_range(id) local (
  2  partition i_range_p1   tablespace tbs_part01,
  3  partition i_range_p2   tablespace tbs_part01,
  4  partition i_range_p3   tablespace tbs_part02,
  5  partition i_range_pmax tablespace tbs_part02
  6  );

Index created.

sec@ora10g> select index_name, partitioning_type, partition_count from user_part_indexes where index_name = 'IDX_PARTI_RANGE_ID';

INDEX_NAME                     PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
IDX_PARTI_RANGE_ID             RANGE                 4

sec@ora10g> select index_name,partition_name, high_value, tablespace_name from user_ind_partitions where index_name = 'IDX_PARTI_RANGE_ID' order by partition_position;

INDEX_NAME                     PARTITION_NAME       HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------- ---------- ---------------
IDX_PARTI_RANGE_ID             I_RANGE_P1           10         TBS_PART01
IDX_PARTI_RANGE_ID             I_RANGE_P2           20         TBS_PART01
IDX_PARTI_RANGE_ID             I_RANGE_P3           30         TBS_PART02
IDX_PARTI_RANGE_ID             I_RANGE_PMAX         MAXVALUE   TBS_PART02

比照上面的结果,这里的表空间已经调整

-- The End --

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

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    7994502