• 表分区与索引分区



    一:前言


    image



    二:分区技术概述

    image




    三:创建表分区



    1:范围分区

    imageimage

      1 ----创建一个商品零售表,然后为该表按照销售日期所在季度创建4个分区
      2 
      3 SYSTEM@orcl> ho clear
      4 
      5 
      6 SYSTEM@orcl> select tablespace_name from dba_data_files;
      7 
      8 TABLESPACE_NAME
      9 ------------------------------
     10 USERS
     11 UNDOTBS1
     12 SYSAUX
     13 SYSTEM
     14 EXAMPLE
     15 TBS_TEST1
     16 TBS_TEST_3
     17 TBS_TEST4
     18 TBS_TEST5
     19 TBS_BIG_1
     20 
     21 10 rows selected.
     22 
     23 SYSTEM@orcl> conn scott/scott;
     24 Connected.
     25 SCOTT@orcl> create table  ware_retail_part --创建一个描述商品零售的数据表
     26   2  (
     27   3    id integer primary key,--销售编号
     28   4    retail_date date,--销售日期
     29   5    ware_name varchar2(50)--商品名称
     30   6  )
     31   7  partition by range(retail_date)
     32   8  (
     33   9    --2011年第一个季度为part_01分区
     34  10    partition par_01 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TBS_TEST1,
     35  11    --2011年第二个季度为part_02分区
     36  12    partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TBS_TEST_3,
     37  13    --2011年第三个季度为part_03分区
     38  14    partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TBS_TEST4,
     39  15    --2011年第四个季度为part_04分区
     40  16    partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TBS_TEST1
     41  17  );
     42 
     43 
     44 Table created.
     45 
     46 SCOTT@orcl> SCOTT@orcl>

    image

    image

      1 create table ware_retail_part2 --创建一个描述商品零售的数据表
      2 (
      3   id integer primary key,--销售编号
      4   retail_date date,--销售日期
      5   ware_name varchar2(50)--商品名称
      6 )
      7 partition by range(id,retail_date)--按照销售序号和销售日期分区
      8 (
      9   --第一个分区part_01
     10   partition par_01 values less than(10000,to_date('2011-12-01','yyyy-mm-dd')) tablespace TBSP_1,
     11   --第一个分区part_02
     12   partition par_02 values less than(20000,to_date('2012-12-01','yyyy-mm-dd')) tablespace TBSP_1,
     13   --第一个分区part_03
     14   partition par_03 values less than(maxvalue,maxvalue) tablespace TBSP_2
     15 );
     16 

    image


    2: 散列分区

    image


      1 SCOTT@orcl>
      2 SCOTT@orcl> conn sys/oracle as sysdba;
      3 Connected.
      4 SYS@orcl> select tablespace_name from dba_data_files;
      5 
      6 TABLESPACE_NAME
      7 ------------------------------
      8 USERS
      9 UNDOTBS1
     10 SYSAUX
     11 SYSTEM
     12 EXAMPLE
     13 TBS_TEST1
     14 TBS_TEST_3
     15 TBS_TEST4
     16 TBS_TEST5
     17 TBS_BIG_1
     18 
     19 10 rows selected.
     20 
     21 SYS@orcl> conn scott/scott;
     22 Connected.
     23 SCOTT@orcl> create table ware_retail_part3 --创建一个描述商品零售的数据表
     24   2  (
     25   3    id integer primary key,--销售编号
     26   4    retail_date date,--销售日期
     27   5    ware_name varchar2(50)--商品名称
     28   6  )
     29   7  partition by hash(id)
     30   8  (
     31   9    partition par_01 tablespace TBS_TEST1,
     32  10    partition par_02 tablespace TBS_TEST4
     33  11  );
     34 
     35 Table created.
     36 
     37 SCOTT@orcl>


      1 
      2 SCOTT@orcl> insert into ware_retail_part3 values(99,to_date('2018-03-22','yyyy-mm-dd'),'adfadsfas');
      3 
      4 1 row created.
      5 
      6 SCOTT@orcl> select * from ware_retail_part3 partition(par_02);
      7 
      8         ID RETAIL_DA WARE_NAME
      9 ---------- --------- --------------------------------------------------
     10         99 22-MAR-18 adfadsfas
     11 
     12 SCOTT@orcl> select * from ware_retail_part3 partition(par_01);
     13 
     14 no rows selected
     15 
     16 SCOTT@orcl>

    image


      1 SCOTT@orcl> conn sys/oracle as sysdba;
      2 Connected.
      3 SYS@orcl> select tablespace_name from dba_data_files;
      4 
      5 TABLESPACE_NAME
      6 ------------------------------
      7 USERS
      8 UNDOTBS1
      9 SYSAUX
     10 SYSTEM
     11 EXAMPLE
     12 TBS_TEST1
     13 TBS_TEST_3
     14 TBS_TEST4
     15 TBS_TEST5
     16 TBS_BIG_1
     17 
     18 10 rows selected.
     19 
     20 SYS@orcl> conn scott/scott;
     21 Connected.
     22 SCOTT@orcl> create table person(
     23   2    id number primary key,
     24   3    name varchar2(20),
     25   4    sex varchar2(2)
     26   5  )partition by hash(id)
     27   6  partitions 2
     28   7  store in(TBS_TEST1,TBS_TEST_3);
     29 
     30 
     31 Table created.
     32 
     33 SCOTT@orcl> SCOTT@orcl>

    image


      1 SCOTT@orcl> conn sys/oracle as sysdba;
      2 Connected.
      3 SYS@orcl> select tablespace_name from dba_data_files;
      4 
      5 TABLESPACE_NAME
      6 ------------------------------
      7 USERS
      8 UNDOTBS1
      9 SYSAUX
     10 SYSTEM
     11 EXAMPLE
     12 TBS_TEST1
     13 TBS_TEST_3
     14 TBS_TEST4
     15 TBS_TEST5
     16 TBS_BIG_1
     17 
     18 10 rows selected.
     19 
     20 SYS@orcl> conn scott/scott;
     21 Connected.
     22 SCOTT@orcl> create table goods_1 (   --//定义包含商品信息表
     23   2    id number,   --编号
     24   3    goodname varchar2(50)  --名称
     25   4  )storage(initial 2048k)   ---定义表分区的初始化空间大小为 2048 kb
     26   5  partition by hash(id)    --创建id列作为分区键的hash表分区
     27   6  ( partition par1 tablespace TBS_TEST1,
     28   7   partition par2 tablespace TBS_TEST_3
     29   8  );
     30 
     31 Table created.
     32 
     33 SCOTT@orcl>


    3:列表分区


    image



      1 create table clients
      2 (
      3   id integer primary key,
      4   name varchar2(50),
      5   province varchar2(20)
      6 )
      7 partition by list(province)
      8 (
      9   partition shandong values('山东省'),
     10   partition guangdong values('广东省'),
     11   partition yunnan values('云南省')
     12 );

    image


    4:组合分区

    image

    image

      1 
      2 SCOTT@orcl> conn sys/oracle as sysdba;
      3 Connected.
      4 SYS@orcl> select tablespace_name from dba_data_files;
      5 
      6 TABLESPACE_NAME
      7 ------------------------------
      8 USERS
      9 UNDOTBS1
     10 SYSAUX
     11 SYSTEM
     12 EXAMPLE
     13 TBS_TEST1
     14 TBS_TEST_3
     15 TBS_TEST4
     16 TBS_TEST5
     17 TBS_BIG_1
     18 
     19 10 rows selected.
     20 
     21 SYS@orcl> conn scott/scott;
     22 Connected.
     23 
     24 SCOTT@orcl>  create table person2                                       --创建以一个描述个人信息的表
     25   2  (
     26   3    pid number primary key,                          --个人的编号
     27   4    name varchar2(20),                                       --姓名
     28   5    sex varchar2(2)                                  --性别
     29   6  )
     30   7  partition by range(pid )--以id作为分区键创建范围分区
     31   8  subpartition by hash(name)--以name列作为分区键创建hash子分区
     32   9  subpartitions 2 store in(TBS_TEST_3,TBS_TEST4)--hash子分区公有两个,分别存储在两个不同的命名空间中
     33  10  (
     34  11    partition par1 values less than(5000),--范围分区,id小于5000
     35  12    partition par2 values less than(10000),--范围分区,id小于10000
     36  13    partition par3 values less than(maxvalue)--范围分区,id不小于10000
     37  14  );
     38 
     39 Table created.
     40 
     41 SCOTT@orcl>



    5:interval 分区

    image

      1 
      2 SCOTT@orcl> conn sys/oracle as sysdba;
      3 Connected.
      4 SYS@orcl> select tablespace_name from dba_data_files;
      5 
      6 TABLESPACE_NAME
      7 ------------------------------
      8 USERS
      9 UNDOTBS1
     10 SYSAUX
     11 SYSTEM
     12 EXAMPLE
     13 TBS_TEST1
     14 TBS_TEST_3
     15 TBS_TEST4
     16 TBS_TEST5
     17 TBS_BIG_1
     18 
     19 10 rows selected.
     20 
     21 SYS@orcl> conn scott/scott;
     22 Connected.
     23 SCOTT@orcl> create table saleRecord(
     24   2   id number primary key, --编号
     25   3   goodsname varchar2(50),--商品名称
     26   4   saledate date,--销售日期
     27   5   quantity number--销售量
     28   6  )
     29   7  partition by range(saledate)
     30   8  interval (numtoyminterval(1,'year'))
     31   9  (
     32  10    --设置分区键值日期小于2012-01-01
     33  11    partition par_fist values less than (to_date('2012-01-01','yyyy-mm-dd'))
     34  12  );
     35 
     36 Table created.
     37 
     38 SCOTT@orcl>

    image



    四:表分区策略

    image


    五:管理表分区

    image


    1:添加表分区

    image

      1 alter table clients add partition hebei values('河北省') storage(inital 10k next 20kl) tablespace tbsp_1 nologging;
      2 


    2:  合并分区

    image


          1:合并散列分区


    image


      1 SCOTT@orcl> alter table person coalesce partition;
      2 
      3 Table altered.
      4 
      5 SCOTT@orcl>


          2: 合并复合分区

    image

      1 
      2 SCOTT@orcl> alter table person2 modify partition par3 coalesce subpartition;
      3 
      4 Table altered.
      5 
      6 SCOTT@orcl>


    3:删除分区

    imageimage

          1:删除一个表分区

    image

    image


      1 SCOTT@orcl> alter table  WARE_RETAIL_PART drop partition par_04;
      2 
      3 Table altered.
      4 
      5 SCOTT@orcl>


          2:删除有数据和全局索引的表分区

    image

      1 SCOTT@orcl> alter table  WARE_RETAIL_PART drop partition par_04;
      2 
      3 Table altered.
      4 
      5 SCOTT@orcl>   select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name ='WARE_RETAIL_PART';
      6 
      7 INDEX_NAME                     TABLE_NAME
      8 ------------------------------ ------------------------------
      9 COLUMN_NAME
     10 --------------------------------------------------------------------------------
     11 COLUMN_POSITION COLUMN_LENGTH CHAR_LENGTH DESC INDEX_TYPE
     12 --------------- ------------- ----------- ---- ---------------------------
     13 SYS_C0012488                   WARE_RETAIL_PART
     14 ID
     15               1            22           0 ASC  NORMAL
     16 
     17 
     18 SCOTT@orcl>  select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.index_name ='WARE_index';
     19 
     20 no rows selected
     21 
     22 SCOTT@orcl> alter index SYS_C0012488 rebuild;
     23 
     24 Index altered.
     25 
     26 SCOTT@orcl>


          3:使用 delete  和 alter table… drop partition 语句

    image

      1 SCOTT@orcl> delete from WARE_RETAIL_PART where retail_date >=to_date('201110-01','yyyy-mm-dd') ;
      2 
      3 0 rows deleted.
      4 
      5 SCOTT@orcl> alater table ware_retail_part drop partition par_04;


          4:删除 具有完整性约束的分区

    image

    image

    image


    4:  并入分区

    image

    image

      1 SCOTT@orcl> conn sys/oracle as sysdba;
      2 Connected.
      3 SYS@orcl> select tablespace_name from dba_data_files;
      4 
      5 TABLESPACE_NAME
      6 ------------------------------
      7 USERS
      8 UNDOTBS1
      9 SYSAUX
     10 SYSTEM
     11 EXAMPLE
     12 TBS_TEST1
     13 TBS_TEST_3
     14 TBS_TEST4
     15 TBS_TEST5
     16 TBS_BIG_1
     17 
     18 10 rows selected.
     19 
     20 SYS@orcl> conn scott/scott;
     21 Connected.
     22 SCOTT@orcl> select table_name from user_tables;
     23 
     24 TABLE_NAME
     25 ------------------------------
     26 DEPT
     27 EMP
     28 BONUS
     29 SALGRADE
     30 DEPT_LOG
     31 GOODS
     32 DDL_OPER_LOG
     33 TB_TEST
     34 STUDENTS
     35 STUDENTS_DEMO
     36 STUDENTS_DEMO1
     37 
     38 TABLE_NAME
     39 ------------------------------
     40 STUDENTS_3
     41 STUDENTS_4
     42 BOOKS
     43 BOOKS_1
     44 MEMBERS
     45 WARE_RETAIL_PART
     46 WARE_RETAIL_PART3
     47 PERSON
     48 GOODS_1
     49 PERSON2
     50 SALERECORD
     51 
     52 TABLE_NAME
     53 ------------------------------
     54 STUDENTS_7
     55 STUDENTS_5
     56 
     57 24 rows selected.
     58 
     59 SCOTT@orcl> --创建表和分区
     60 SCOTT@orcl> create table sales--创建一个销售记录表
     61   2  (
     62   3    id number primary key,--记录编号
     63   4    goodsname varchar2(10),--商品名
     64   5    saledate date--销售日期
     65   6  )
     66   7  partition by range(saledate)--按照日期分区
     67   8  (
     68   9    --第一季度数据
     69  10    partition part_sea1 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TBS_TEST1 ,
     70  11    --第二季度数据
     71  12    partition part_sea2 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TBS_TEST_3 ,
     72  13    --第三季度数据
     73  14    partition part_sea3 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TBS_TEST1 ,
     74  15    --第四季度数据
     75  16    partition part_sea4 values less than(to_date('2012-01-01','yyyy-mm-dd')) tablespace TBS_TEST_3
     76  17  );
     77 
     78 
     79 Table created.
     80 
     81 SCOTT@orcl> SCOTT@orcl>


    image

      1 
      2 SCOTT@orcl> SCOTT@orcl>  create index index_3_4 on sales(saledate)
      3   2  local(
      4   3  partition part_seal tablespace TBS_TEST1,
      5   4  partition part_sea2 tablespace TBS_TEST_3,
      6   5  partition part_sea3 tablespace TBS_TEST1,
      7   6  partition part_sea4 tablespace TBS_TEST_3
      8   7  );
      9 
     10 Index created.
     11 
     12 SCOTT@orcl>

    image

      1 
      2 SCOTT@orcl> --并入分区
      3 SCOTT@orcl> alter table sales merge partitions part_sea3,part_sea4 into partition part_sea4;
      4 
      5 
      6 Table altered.
      7 
      8 SCOTT@orcl> SCOTT@orcl>


    image

      1 SCOTT@orcl> SCOTT@orcl> --重建局部索引
      2 SCOTT@orcl> alter table sales modify partition part_sea4 rebuild unusable local indexes;
      3 
      4 Table altered.
      5 
      6 SCOTT@orcl>


    六:创建索引分区

    image


    1:索引分区概述

    image



    2:本地索引分区

    image

          1:准备好需要的表空间

    image

      1 SYS@orcl> create tablespace ts_1 datafile '/u01/app/oracle/oradata/orcl/ts1.dbf' size 10m extent management local autoallocate ;
      2 
      3 Tablespace created.
      4 
      5 SYS@orcl> create tablespace ts_2 datafile '/u01/app/oracle/oradata/orcl/ts2.dbf' size 10m extent management local autoallocate ;
      6 
      7 Tablespace created.
      8 
      9 SYS@orcl> create tablespace ts_3 datafile '/u01/app/oracle/oradata/orcl/ts3.dbf' size 10m extent management local autoallocate ;
     10 
     11 Tablespace created.
     12 
     13 SYS@orcl>

          2:创建一个储存学生成绩的分区表studentgrade,该表共有3个分区,分别位于表空间ts_1/ts_2/ts_3;


      1 
      2 SYS@orcl> conn scott/scott
      3 Connected.
      4 SCOTT@orcl> create table studentgrade(
      5   2       id number primary key,
      6   3       name varchar2(10),
      7   4       subject varchar2(10),
      8   5       grade number
      9   6       )
     10   7       partition by range(grade)
     11   8       (
     12   9       partition par_nopass values less than (60) tablespace ts_1,
     13  10       partition par_pass values less than(70) tablespace ts_2,
     14  11       partition par_good values less than(maxvalue) tablespace ts_3
     15  12       );
     16 
     17 Table created.
     18 
     19 SCOTT@orcl>

          3:根据表分区创建本地索引分区,与表分区一样。索引分区也是3个分区(p1,p2,p3)

      1 SCOTT@orcl>  create index grade_index on studentgrade(grade) local
      2   2          (
      3   3          partition p1 tablespace ts_1,
      4   4          partition p2 tablespace ts_2,
      5   5          partition p3 tablespace ts_3
      6   6          );
      7 
      8 Index created.
      9 


          4: 通过 dba_ind_partitions 视图来进行查看索引分区信息

      1 SCOTT@orcl> conn sys/oracle as sysdba;
      2 Connected.
      3 
      4 SYS@orcl> desc dba_ind_partitions;
      5  Name                                      Null?    Type
      6  ----------------------------------------- -------- ----------------------------
      7  INDEX_OWNER                                        VARCHAR2(30)
      8  INDEX_NAME                                         VARCHAR2(30)
      9  COMPOSITE                                          VARCHAR2(3)
     10  PARTITION_NAME                                     VARCHAR2(30)
     11  SUBPARTITION_COUNT                                 NUMBER
     12  HIGH_VALUE                                         LONG
     13  HIGH_VALUE_LENGTH                                  NUMBER
     14  PARTITION_POSITION                                 NUMBER
     15  STATUS                                             VARCHAR2(8)
     16  TABLESPACE_NAME                                    VARCHAR2(30)
     17  PCT_FREE                                           NUMBER
     18  INI_TRANS                                          NUMBER
     19  MAX_TRANS                                          NUMBER
     20  INITIAL_EXTENT                                     NUMBER
     21  NEXT_EXTENT                                        NUMBER
     22  MIN_EXTENT                                         NUMBER
     23  MAX_EXTENT                                         NUMBER
     24  MAX_SIZE                                           NUMBER
     25  PCT_INCREASE                                       NUMBER
     26  FREELISTS                                          NUMBER
     27  FREELIST_GROUPS                                    NUMBER
     28  LOGGING                                            VARCHAR2(7)
     29  COMPRESSION                                        VARCHAR2(8)
     30  BLEVEL                                             NUMBER
     31  LEAF_BLOCKS                                        NUMBER
     32  DISTINCT_KEYS                                      NUMBER
     33  AVG_LEAF_BLOCKS_PER_KEY                            NUMBER
     34  AVG_DATA_BLOCKS_PER_KEY                            NUMBER
     35  CLUSTERING_FACTOR                                  NUMBER
     36  NUM_ROWS                                           NUMBER
     37  SAMPLE_SIZE                                        NUMBER
     38  LAST_ANALYZED                                      DATE
     39  BUFFER_POOL                                        VARCHAR2(7)
     40  FLASH_CACHE                                        VARCHAR2(7)
     41  CELL_FLASH_CACHE                                   VARCHAR2(7)
     42  USER_STATS                                         VARCHAR2(3)
     43  PCT_DIRECT_ACCESS                                  NUMBER
     44  GLOBAL_STATS                                       VARCHAR2(3)
     45  DOMIDX_OPSTATUS                                    VARCHAR2(6)
     46  PARAMETERS                                         VARCHAR2(1000)
     47  INTERVAL                                           VARCHAR2(3)
     48  SEGMENT_CREATED                                    VARCHAR2(3)
      1 
      2 SYS@orcl> select index_owner,index_name ,partition_name,tablespace_name from dba_ind_partitions where INDEX_NAME='GRADE_INDEX';
      3 
      4 INDEX_OWNER                    INDEX_NAME
      5 ------------------------------ ------------------------------
      6 PARTITION_NAME                 TABLESPACE_NAME
      7 ------------------------------ ------------------------------
      8 SCOTT                          GRADE_INDEX
      9 P1                             TS_1
     10 
     11 SCOTT                          GRADE_INDEX
     12 P2                             TS_2
     13 
     14 SCOTT                          GRADE_INDEX
     15 P3                             TS_3
     16 
     17 
     18 SYS@orcl> INDEX_NAME


    3: 全局索引分区

    image

    image

      1 
      2 SCOTT@orcl> create index index_saleprice on BOOKS(saleprice) global partition by range(saleprice) ( partition p1 values less than(30),partition p2 values less than(50),partition p3 values less than(maxvalue) );
      3 
      4 Index created.


    image

      1 SCOTT@orcl> create index index_ISBN on books(ISBN) global partition by hash(ISBN);
      2 
      3 Index created.
      4 
      5 SCOTT@orcl>


    七:管理索引分区

    image

    1:索引分区管理的操作列表

    image

    image



    2:索引分区管理的实际操作

    image

          1:删除索引分区

      1 
      2 SCOTT@orcl> alter index index_saleprice drop partition p2;
      3 
      4 Index altered.

    image

    image

      1 SCOTT@orcl> alter index index_saleprice drop partition p1;
      2 
      3 Index altered.
      4 SCOTT@orcl> alter index index_saleprice drop partition p1;
      5 
      6 Index altered.

          2:重命名索引分区

    image

    image

      1 
      2 SCOTT@orcl> alter index index_saleprice rename partition p3 to p_new;
      3 
      4 Index altered.
      5 
      6 SCOTT@orcl>
























    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    oracle 删除表中重复数据留一条
    C# 特性
    oracle 常用简单命令语句
    2017年学习计划
    java web开发基础学习
    Java Axis2支持json
    java基础教程
    axis2 发布webservice
    孤荷凌寒自学python第103天认识区块链017
    孤荷凌寒自学python第102天认识区块链016
  • 原文地址:https://www.cnblogs.com/ios9/p/8624663.html
Copyright © 2020-2023  润新知