ITPub博客

首页 > 数据库 > Oracle > 创建与管理分区表

创建与管理分区表

原创 Oracle 作者:skyin_1603 时间:2016-12-05 12:24:24 0 删除 编辑

以下是创建普通分区表与自动添加分区分区表的测试过程,
并罗列了管理分区变的一些常用视图,创建分区表的分区依据:

----分区的依据说明:

--按天分区:

--每天一个分区:

INTERVAL (NUMTODSINTERVAL(1,'day')) 

--每个星期(7天)一个分区:

INTERVAL (NUMTODSINTERVAL(7,'day'))

--按月份分区:

--每一个月一个分区:

INTERVAL ( NUMTOYMINTERVAL (1, 'MONTH') )

--每一个季度(三个月)一个分区:

INTERVAL ( NUMTOYMINTERVAL (3, 'MONTH') )

--按年份分区:

INTERVAL ( NUMTOYMINTERVAL (1, 'YEAR') )

--按几(n)年分为一个分区:

INTERVAL ( NUMTOYMINTERVAL (n, 'YEAR') )


 #具体额分区依据则按照生成当中的业务需求来确定。

----创建测试普通分区表:

suxing@PROD>create table p_test(

  2  id number(2),

  3  name varchar2(10),

  4  created date)

  5  partition by range (id)

  6  (

  7  partition p_10 values less than (20) tablespace myspace,

  8  partition p_20 values less than (30) tablespace users,

  9  partition p_30 values less than (40) tablespace myspace,

 10  partition p_40 values less than (maxvalue) tablespace users

 11  );

Table created.

---插入测试数据:

insert into p_test values(11,'susu',sysdate);

insert into p_test values(12,'susu',sysdate);

insert into p_test values(13,'susu',sysdate);

insert into p_test values(21,'susu',sysdate);

insert into p_test values(22,'susu',sysdate);

insert into p_test values(23,'susu',sysdate);

insert into p_test values(31,'susu',sysdate);

insert into p_test values(32,'susu',sysdate);

insert into p_test values(33,'susu',sysdate);

insert into p_test values(44,'susu',sysdate);

insert into p_test values(55,'susu',sysdate);
commit;

---查看总的记录:

suxing@PROD>select * from p_test;

        ID NAME       CREATED

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

        11 susu       2016-12-05 09:50:14

        12 susu       2016-12-05 09:53:59

        13 susu       2016-12-05 09:53:59

        21 susu       2016-12-05 09:53:59

        22 susu       2016-12-05 09:53:59

        23 susu       2016-12-05 09:53:59

        31 susu       2016-12-05 09:53:59

        32 susu       2016-12-05 09:53:59

        33 susu       2016-12-05 09:53:59

        44 susu       2016-12-05 09:53:59

        55 susu       2016-12-05 09:54:06

11 rows selected.

---查看分区20:

suxing@PROD>select * from p_test partition (p_20);

        ID NAME       CREATED

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

        21 susu       2016-12-05 09:53:59

        22 susu       2016-12-05 09:53:59

        23 susu       2016-12-05 09:53:59

---查看分区40:

suxing@PROD>select * from p_test partition (p_40);

        ID NAME       CREATED

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

        44 susu       2016-12-05 09:53:59

        55 susu       2016-12-05 09:54:06

----显示分区表信息:

  显示数据库所有分区表的信息:DBA_PART_TABLES

  显示当前用户可访问的所有分区表信息:ALL_PART_TABLES

  显示当前用户所有分区表的信息:USER_PART_TABLES

  显示表分区信息 显示数据库所有分区表的详细分区信息:DBA_TAB_PARTITIONS

  显示当前用户可访问的所有分区表的详细分区信息:ALL_TAB_PARTITIONS

  显示当前用户所有分区表的详细分区信息:USER_TAB_PARTITIONS

  显示子分区信息 显示数据库所有组合分区表的子分区信息:DBA_TAB_SUBPARTITIONS

  显示当前用户可访问的所有组合分区表的子分区信息:ALL_TAB_SUBPARTITIONS

  显示当前用户所有组合分区表的子分区信息:USER_TAB_SUBPARTITIONS

  显示分区列 显示数据库所有分区表的分区列信息:DBA_PART_KEY_COLUMNS

  显示当前用户可访问的所有分区表的分区列信息:ALL_PART_KEY_COLUMNS

  显示当前用户所有分区表的分区列信息:USER_PART_KEY_COLUMNS

  显示子分区列 显示数据库所有分区表的子分区列信息:DBA_SUBPART_KEY_COLUMNS

  显示当前用户可访问的所有分区表的子分区列信息:ALL_SUBPART_KEY_COLUMNS

  显示当前用户所有分区表的子分区列信息:USER_SUBPART_KEY_COLUMNS

 



----创建测试自动分区表:

sys@PROD>create table part_test(

  2  id number(4),

  3  created date

  4  )

  5   partition by range(created)

  6  interval (numtoyminterval(1,'MONTH'))

  7  (

  8  partition part_01 values less than ( to_date('2016-01-01','yyyy-mm-dd'))

  9  );

Table created.


---插入数据:

sys@PROD>begin

  2   for i in 1..120 loop

  3    insert into part_test values(i,sysdate-i);

  4   end loop;

  5  commit;

  6  end;

  7  /

PL/SQL procedure successfully completed.


---查看测试表数据记录:

sys@PROD>select * from part_test;

        ID CREATED

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

        96 31-AUG-16

        97 30-AUG-16

        98 29-AUG-16

        99 28-AUG-16

       100 27-AUG-16

       101 26-AUG-16

       102 25-AUG-16

       103 24-AUG-16

       104 23-AUG-16

       105 22-AUG-16

       106 21-AUG-16


        ID CREATED

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

       107 20-AUG-16

       108 19-AUG-16

       109 18-AUG-16

       110 17-AUG-16

       111 16-AUG-16

       112 15-AUG-16

       113 14-AUG-16

       114 13-AUG-16

       115 12-AUG-16

       116 11-AUG-16

       117 10-AUG-16

... ...

        ID CREATED

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

        29 06-NOV-16

        30 05-NOV-16

        31 04-NOV-16

        32 03-NOV-16

        33 02-NOV-16

        34 01-NOV-16

         1 04-DEC-16

         2 03-DEC-16

         3 02-DEC-16

         4 01-DEC-16

120 rows selected.

---查看分区表的分区:

sys@PROD>set lines 120

sys@PROD>col TABLE_OWNER for a15

sys@PROD>col TABLE_NAME for a15

sys@PROD>col PARTITION_NAME for a10

sys@PROD>col TABLESPACE_NAME for a15

sys@PROD>select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME

  2  from DBA_TAB_PARTITIONS

  3  where table_name in ('PART_TEST','p_TEST');

TABLE_OWNER     TABLE_NAME      PARTITION_ TABLESPACE_NAME

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

SYS             PART_TEST       PART_01    SYSTEM

SYS             PART_TEST       SYS_P61    SYSTEM

SYS             PART_TEST       SYS_P62    SYSTEM

SYS             PART_TEST       SYS_P63    SYSTEM

SYS             PART_TEST       SYS_P64    SYSTEM

SYS             PART_TEST       SYS_P65    SYSTEM

6 rows selected.

#已经分成6个分区。


---尝试查看分区PART_01的数据:

sys@PROD>select * from part_test partition (PART_01);

no rows selected

---尝试查看分区SYS_P61的数据:

sys@PROD>select * from part_test partition (SYS_P61);

        ID CREATED

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

         1 04-DEC-16

         2 03-DEC-16

         3 02-DEC-16

         4 01-DEC-16

该分区是本月的日期记录。


---尝试查看分区SYS_P64的数据:

sys@PROD>select * from part_test partition (SYS_P64);


        ID CREATED

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

        66 30-SEP-16

        67 29-SEP-16

        68 28-SEP-16

        69 27-SEP-16

        70 26-SEP-16

        71 25-SEP-16

        72 24-SEP-16

        73 23-SEP-16

        74 22-SEP-16

        75 21-SEP-16

        76 20-SEP-16


        ID CREATED

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

        77 19-SEP-16

        78 18-SEP-16

        79 17-SEP-16

        80 16-SEP-16

        81 15-SEP-16

        82 14-SEP-16

        83 13-SEP-16

        84 12-SEP-16

        85 11-SEP-16

        86 10-SEP-16

        87 09-SEP-16


        ID CREATED

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

        88 08-SEP-16

        89 07-SEP-16

        90 06-SEP-16

        91 05-SEP-16

        92 04-SEP-16

        93 03-SEP-16

        94 02-SEP-16

        95 01-SEP-16

30 rows selected.

#改分区是九月份日期的记录。

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

请登录后发表评论 登录
全部评论

注册时间:2016-09-06

  • 博文量
    231
  • 访问量
    215135