以下是创建普通分区表与自动添加分区分区表的测试过程,
并罗列了管理分区变的一些常用视图,创建分区表的分区依据:
----分区的依据说明:
--按天分区:
--每天一个分区:
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/ ,如需转载,请注明出处,否则将追究法律责任。