一、实验目的
采用List-Range分区,对主分区指定表空间或者对子分区指定表空的不同情况,测试如下内容:
1、对List主分区不指定表空间,对Range子分区指定表空间,数据实际存储在哪个表空间;追加List主分区不指定Range子分区和指定Range子分区时,Oracle如何创建相关子分区;
2、对List主分区指定表空间,对Range子分区不指定表空间,数据实际存储在哪个表空间;追加List主分区不指定Range子分区和指定Range子分区时,Oracle如何创建相关子分区;
二、实验环境
操作系统:Window 7 旗舰版 x64
Cpu:Intel i5-2520M 2.50GHz X 2
内存:10G
Oracle版本:Release 11.2.0.1.0
三、List指定表空间测试
3.1、创建表空间
CREATE TABLESPACE "TS_3512860010" DATAFILE 'D:\APP\ORADATA\ORCL\TS_3512860010.dbf' SIZE 50M AUTOEXTEND ON NEXT16K MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENTAUTO;
CREATE TABLESPACE "TS_3512860005" DATAFILE 'D:\APP\ORADATA\ORCL\TS_3512860005.dbf' SIZE 50M AUTOEXTEND ON NEXT16K MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENTAUTO;
CREATE TABLESPACE "TS_3512834993" DATAFILE 'D:\APP\ORADATA\ORCL\TS_3512834993.dbf' SIZE 50M AUTOEXTEND ON NEXT16K MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENTAUTO;
3.2、两个List两个Range测试
3.2.1、 创建分区
drop table LST_RNG_LIST cascade constraints;
/*==============================================================*/
/* Table: LST_RNG_LIST */
/*==============================================================*/
create table LST_RNG_LIST
(
AUTO_ID VARCHAR2(36) not null,
SALE_NO VARCHAR2(36) not null,
POS_CODE VARCHAR2(10),
POS_NAME VARCHAR2(30),
TOTAL_AMOUNT NUMBER(18,2),
SALE_DATE DATE,
REMARK VARCHAR2(500),
constraint PK_LST_RNG_LISTprimary key (AUTO_ID)
)
partition by list
(POS_CODE)
subpartition by range
(SALE_DATE)
subpartition template (
subpartition SP_20150726
values less than (TO_DATE('2015-07-26','YYYY-MM-DD')),
subpartition SP_20150802
values less than (TO_DATE('2015-08-02','YYYY-MM-DD'))
)
(
partition
P_3512860010
values ('3512860010')
tablespace TS_3512860010,
partition
P_3512860005
values ('3512860005')
tablespace TS_3512860005
);
comment on column LST_RNG_LIST.AUTO_ID is
'自动编号';
comment on column LST_RNG_LIST.SALE_NO is
'销售单号';
comment on column LST_RNG_LIST.POS_CODE is
'商户代码';
comment on column LST_RNG_LIST.POS_NAME is
'商户名称';
comment on column LST_RNG_LIST.TOTAL_AMOUNTis
'销售总额';
comment on column LST_RNG_LIST.SALE_DATE is
'销售日期';
comment on column LST_RNG_LIST.REMARK is
'备注';
3.2.2、查看分区
查看主分组
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_LIST';
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_LIST';
Range子分区所属表空间自动归入List分区所属表空间
3.2.3、插入数据
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507240001','3512860010','全味食品商贸有限公司','100.78',TO_DATE('2015-07-24','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507250001','3512860010','全味食品商贸有限公司','100.78',TO_DATE('2015-07-25','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507260001','3512860010','全味食品商贸有限公司','1132.23',TO_DATE('2015-07-26','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507290001','3512860010','全味食品商贸有限公司','1132.23',TO_DATE('2015-07-29','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201508010001','3512860010','全味食品商贸有限公司','1132.23',TO_DATE('2015-08-01','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507240001','3512860005','新干线贸易有限公司','100.78',TO_DATE('2015-07-24','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507250001','3512860005','新干线贸易有限公司','100.78',TO_DATE('2015-07-25','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507260001','3512860005','新干线贸易有限公司','1132.23',TO_DATE('2015-07-26','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507290001','3512860005','新干线贸易有限公司','1132.23',TO_DATE('2015-07-29','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201508010001','3512860005','新干线贸易有限公司','1132.23',TO_DATE('2015-08-01','YYYY-MM-DD'),NULL);
commit;
3.2.4、查看数据
查看分区数据
select * from LST_RNG_LIST partition(P_3512860010);
select * from LST_RNG_LIST partition(P_3512860005);
select * from LST_RNG_LIST subpartition(P_3512860010_SP_20150726);
select * from LST_RNG_LIST subpartition(P_3512834993_SP_20150802);
收集分区统计信息
begin
dbms_stats.gather_table_stats(ownname=>'WKOD_VERIFY',granularity =>'all',tabname=>'LST_RNG_LIST',cascade=>true);
end;
查看主分组
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_LIST';
num_rows=5,LST_PNG_LIST表分别在两个表空间中有5条数据
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_LIST';
3.2.5、追加分区
方式一:追加主分区
alter table LST_RNG_LIST add partitionP_3512834993 values ('3512834993') tablespace TS_3512834993
查看分区
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_LIST';
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_LIST';
默认按照表创建时子分区的的分区规则,自动生成两个子分区(红色框内)
删除添加的List分区
alter table LST_RNG_LIST drop partitionP_3512834993;
对应的子分区会自动被drop掉。
方式二:追加主分区及其子分区
alter table LST_RNG_LIST add partition P_3512834993 values ('3512834993') tablespace TS_3512834993
(subpartition P_3512834993_SP_20150726 values less than (TO_DATE('2015-07-26','YYYY-MM-DD')))
查看分区
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_LIST';
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_LIST';
按照设定的子分区创建range子分区
3.3、两个List一个Range测试
3.3.1、创建分区
drop table LST_RNG_LIST cascade constraints;
/*==============================================================*/
/* Table: LST_RNG_LIST */
/*==============================================================*/
create table LST_RNG_LIST
(
AUTO_ID VARCHAR2(36) not null,
SALE_NO VARCHAR2(36) not null,
POS_CODE VARCHAR2(10),
POS_NAME VARCHAR2(30),
TOTAL_AMOUNT NUMBER(18,2),
SALE_DATE DATE,
REMARK VARCHAR2(500),
constraint PK_LST_RNG_LISTprimary key (AUTO_ID)
)
partition by list
(POS_CODE)
subpartition by range
(SALE_DATE)
subpartition template (
subpartition SP_20150726
values less than (TO_DATE('2015-07-26','YYYY-MM-DD'))
)
(
partition
P_3512860010
values ('3512860010')
tablespace TS_3512860010,
partition
P_3512860005
values ('3512860005')
tablespace TS_3512860005
);
comment on column LST_RNG_LIST.AUTO_ID is
'自动编号';
comment on column LST_RNG_LIST.SALE_NO is
'销售单号';
comment on column LST_RNG_LIST.POS_CODE is
'商户代码';
comment on column LST_RNG_LIST.POS_NAME is
'商户名称';
comment on column LST_RNG_LIST.TOTAL_AMOUNTis
'销售总额';
comment on column LST_RNG_LIST.SALE_DATE is
'销售日期';
comment on column LST_RNG_LIST.REMARK is
'备注';
3.3.2、查看分区
查看主分组
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_LIST';
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_LIST';
Range子分区所属表空间自动归入List分区所属表空间
3.3.3、插入数据
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507240001','3512860010','全味食品商贸有限公司','100.78',TO_DATE('2015-07-24','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507250001','3512860010','全味食品商贸有限公司','100.78',TO_DATE('2015-07-25','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507240001','3512860005','新干线贸易有限公司','100.78',TO_DATE('2015-07-24','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_LIST(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507250001','3512860005','新干线贸易有限公司','100.78',TO_DATE('2015-07-25','YYYY-MM-DD'),NULL);
commit;
3.3.4、查看数据
查看分区数据
select * from LST_RNG_LIST partition(P_3512860010);
select * from LST_RNG_LIST partition(P_3512860005);
select * from LST_RNG_LIST subpartition(P_3512860010_SP_20150726);
--select * from LST_RNG_LIST subpartition(P_3512834993_SP_20150802);
收集分区统计信息
begin
dbms_stats.gather_table_stats(ownname=>'WKOD_VERIFY',granularity =>'all',tabname=>'LST_RNG_LIST',cascade=>true);
end;
查看主分组
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_LIST';
num_rows=2,LST_PNG_LIST表分别在两个表空间中有2条数据
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_LIST';
3.3.5、追加分区
方式一:追加主分区
alter table LST_RNG_LIST add partition P_3512834993 values ('3512834993') tablespace TS_3512834993
查看分区
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_LIST';
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_LIST';
默认按照表创建时子分区的的分区规则,自动生成一个子分区(红色框内)
删除添加的List分区
alter table LST_RNG_LIST drop partitionP_3512834993;
对应的子分区会自动被drop掉。
方式二:追加主分区及其子分区
alter table LST_RNG_LIST add partition P_3512834993 values ('3512834993') tablespace TS_3512834993
(subpartition P_3512834993_SP_20150802values less than (TO_DATE('2015-08-02','YYYY-MM-DD')))
查看分区
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_LIST';
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_LIST';
按照设定的子分区创建range子分区
四、Range指定表空间测试
4.1、创建表空间
CREATE TABLESPACE "TS_20150726" DATAFILE 'D:\APP\ORADATA\ORCL\TS_20150726.dbf' SIZE 50M AUTOEXTEND ON NEXT 16KMAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENTAUTO;
CREATE TABLESPACE "TS_20150802" DATAFILE 'D:\APP\ORADATA\ORCL\TS_20150802.dbf' SIZE 50M AUTOEXTEND ON NEXT 16KMAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENTAUTO;
CREATE TABLESPACE "TS_20150809" DATAFILE 'D:\APP\ORADATA\ORCL\TS_20150809.dbf' SIZE 50M AUTOEXTEND ON NEXT 16KMAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENTAUTO;
4.2、两个List两个Range测试
4.2.1、创建分区表
drop table LST_RNG_RANGE cascade constraints;
/*==============================================================*/
/* Table:LST_RNG_RANGE */
/*==============================================================*/
create table LST_RNG_RANGE
(
AUTO_ID VARCHAR2(36) not null,
SALE_NO VARCHAR2(36) not null,
POS_CODE VARCHAR2(10),
POS_NAME VARCHAR2(30),
TOTAL_AMOUNT NUMBER(18,2),
SALE_DATE DATE,
REMARK VARCHAR2(500),
constraint PK_LST_RNG_RANGEprimary key (AUTO_ID)
)
partition by list
(POS_CODE)
subpartition by range
(SALE_DATE)
subpartition template (
subpartition SP_20150726
values less than (TO_DATE('2015-07-26','YYYY-MM-DD'))
tablespace TS_20150726,
subpartition SP_20150802
values less than (TO_DATE('2015-08-02','YYYY-MM-DD'))
tablespace TS_20150802
)
(
partition
P_3512860010
values ('3512860010'),
partition
P_3512860005
values ('3512860005')
);
comment on column LST_RNG_RANGE.AUTO_ID is
'自动编号';
comment on column LST_RNG_RANGE.SALE_NO is
'销售单号';
comment on column LST_RNG_RANGE.POS_CODE is
'商户代码';
comment on column LST_RNG_RANGE.POS_NAME is
'商户名称';
comment on column LST_RNG_RANGE.TOTAL_AMOUNT is
'销售总额';
comment on column LST_RNG_RANGE.SALE_DATE is
'销售日期';
comment on column LST_RNG_RANGE.REMARK is
'备注';
4.2.2、查看分区
查看主分组
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_RANGE';
未指定表空间的主分区,默认使用当前用户所在的表空间;
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_RANGE';
Range子分区存放于指定的表空间中
4.2.3、插入数据
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507240001','3512860010','全味食品商贸有限公司','100.78',TO_DATE('2015-07-24','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507250001','3512860010','全味食品商贸有限公司','100.78',TO_DATE('2015-07-25','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507260001','3512860010','全味食品商贸有限公司','1132.23',TO_DATE('2015-07-26','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507290001','3512860010','全味食品商贸有限公司','1132.23',TO_DATE('2015-07-29','YYYY-MM-DD'),NULL);
INSERT INTOLST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201508010001','3512860010','全味食品商贸有限公司','1132.23',TO_DATE('2015-08-01','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507240001','3512860005','新干线贸易有限公司','100.78',TO_DATE('2015-07-24','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507250001','3512860005','新干线贸易有限公司','100.78',TO_DATE('2015-07-25','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507260001','3512860005','新干线贸易有限公司','1132.23',TO_DATE('2015-07-26','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507290001','3512860005','新干线贸易有限公司','1132.23',TO_DATE('2015-07-29','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201508010001','3512860005','新干线贸易有限公司','1132.23',TO_DATE('2015-08-01','YYYY-MM-DD'),NULL);
commit;
4.2.4、查看数据
查看分区数据
select * from LST_RNG_RANGE partition(P_3512860010);
select * from LST_RNG_RANGE partition(P_3512860005);
select * from LST_RNG_RANGE subpartition(P_3512860010_SP_20150726);
select * from LST_RNG_RANGE subpartition(P_3512860005_SP_20150726);
select * from LST_RNG_RANGE subpartition(P_3512860010_SP_20150802);
select * from LST_RNG_RANGE subpartition(P_3512860005_SP_20150802);
收集分区统计信息
begin
dbms_stats.gather_table_stats(ownname=>'WKOD_VERIFY',granularity =>'all',tabname=>'LST_RNG_RANGE',cascade=>true);
end;
查看主分组
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_RANGE';
num_rows=5,LST_PNG_RANGE表的两个主分区在当前用户所在的表空间中有各5条数据
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_RANGE';
4.2.5、追加分区
方式一:追加主分区
alter table LST_RNG_RANGE add partition P_3512834993 values ('3512834993')
查看分区
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_RANGE';
主分区所属表空间为当前用户所在的表空间
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_RANGE';
默认按照表创建时子分区的的分区规则,自动生成两个子分区(红色框内),且分区对应表空间与原来一致
删除添加的List分区
alter table LST_RNG_RANGE drop partition P_3512834993;
对应的子分区会自动被drop掉。
方式二:追加主分区及其子分区
alter table LST_RNG_RANGE add partition P_3512834993 values ('3512834993')
(subpartition P_3512834993_SP_20150802 values less than (TO_DATE('2015-08-02','YYYY-MM-DD')) tablespace TS_20150809)
查看分区
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_RANGE';
主分区所属表空间为当前用户所在的表空间
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_RANGE';
按照设定的子分区所属的表空间创建range子分区
4.3、两个List一个Range测试
drop table LST_RNG_RANGE cascade constraints;
/*==============================================================*/
/* Table:LST_RNG_RANGE */
/*==============================================================*/
create table LST_RNG_RANGE
(
AUTO_ID VARCHAR2(36) not null,
SALE_NO VARCHAR2(36) not null,
POS_CODE VARCHAR2(10),
POS_NAME VARCHAR2(30),
TOTAL_AMOUNT NUMBER(18,2),
SALE_DATE DATE,
REMARK VARCHAR2(500),
constraint PK_LST_RNG_RANGEprimary key (AUTO_ID)
)
partition by list
(POS_CODE)
subpartition by range
(SALE_DATE)
subpartition template (
subpartition SP_20150726
values less than (TO_DATE('2015-07-26','YYYY-MM-DD'))
tablespace TS_20150726
)
(
partition
P_3512860010
values ('3512860010'),
partition
P_3512860005
values ('3512860005')
);
comment on column LST_RNG_RANGE.AUTO_ID is
'自动编号';
comment on column LST_RNG_RANGE.SALE_NO is
'销售单号';
comment on column LST_RNG_RANGE.POS_CODE is
'商户代码';
comment on column LST_RNG_RANGE.POS_NAME is
'商户名称';
comment on column LST_RNG_RANGE.TOTAL_AMOUNT is
'销售总额';
comment on column LST_RNG_RANGE.SALE_DATE is
'销售日期';
comment on column LST_RNG_RANGE.REMARK is
'备注';
4.3.2、查看分区
查看主分组
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_RANGE';
未指定表空间的主分区,默认使用当前用户所在的表空间;
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_RANGE';
Range子分区存放于指定的表空间中
4.3.3、插入数据
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507240001','3512860005','新干线贸易有限公司','100.78',TO_DATE('2015-07-24','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507250001','3512860005','新干线贸易有限公司','100.78',TO_DATE('2015-07-25','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507240001','3512860010','全味食品商贸有限公司','100.78',TO_DATE('2015-07-24','YYYY-MM-DD'),NULL);
INSERT INTO LST_RNG_RANGE(AUTO_ID,SALE_NO,POS_CODE,POS_NAME,TOTAL_AMOUNT,SALE_DATE,REMARK)
VALUES(SYS_GUID(),'SN201507250001','3512860010','全味食品商贸有限公司','100.78',TO_DATE('2015-07-25','YYYY-MM-DD'),NULL);
commit;
4.3.4、查看数据
查看分区数据
select * from LST_RNG_RANGE partition(P_3512860010);
select * from LST_RNG_RANGE partition(P_3512860005);
select * from LST_RNG_RANGE subpartition(P_3512860010_SP_20150726);
select * from LST_RNG_RANGE subpartition(P_3512860005_SP_20150726);
收集分区统计信息
begin
dbms_stats.gather_table_stats(ownname=>'WKOD_VERIFY',granularity =>'all',tabname=>'LST_RNG_RANGE',cascade=>true);
end;
查看主分组
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_RANGE';
num_rows=2,LST_PNG_RANGE表的两个主分区在当前用户所在的表空间中各有2条数据
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_RANGE';
两个分区在同一个表空间中,每个分区中都存在两条数据
4.3.5、追加分区
方式一:追加主分区
alter table LST_RNG_RANGE add partition P_3512834993 values ('3512834993')
查看分区
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_RANGE';
主分区所属表空间为当前用户所在的表空间
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_RANGE';
默认按照表创建时子分区的的分区规则,自动生成一个子分区(红色框内),且分区对应表空间与原来一致
删除添加的List分区
alter table LST_RNG_RANGE drop partition P_3512834993;
对应的子分区会自动被drop掉。
方式二:追加主分区及其子分区
alter table LST_RNG_RANGE add partition P_3512834993 values ('3512834993')
(subpartition P_3512834993_SP_20150802 values less than (TO_DATE('2015-08-02','YYYY-MM-DD')) tablespace TS_20150809)
查看分区
select partition_position,table_name,partition_name,high_value,tablespace_name,num_rows
from user_tab_partitions
where table_name='LST_RNG_RANGE';
主分区所属表空间为当前用户所在的表空间
查看子分区
select subpartition_position,table_name,partition_name,subpartition_name,high_value,tablespace_name,num_rows
from user_tab_subpartitions
where table_name='LST_RNG_RANGE';
按照设定的子分区所属的表空间创建range子分区
五、实验结论
一、List-Range组合分区下,在List指定表空间,Range不指定表空间,Oracle自动将Range子分区存放于对应的List表空间中;
二、追加分区时候,在不指定子分区的情况下,Oracle默认按照表创建时的分区方式,对新追加的List分区下的子分区进行分区;
三、List-Range组合分区,所有表的数据实际存放在子分区所在的表空间;
附:
1、DROP TABLE
drop table LST_RNG_RANGE;
--并非真删,而是置DROP标志,相关分区也依然存在
select * from user_recyclebin;
实际清空
purge table LST_RNG_RANGE;
2、查看数据记录所在表空间
SELECT B.TABLESPACE_NAME
FROM DBA_DATA_FILES B
WHERE B.FILE_ID = (SELECTDBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) FILE_ID
FROM LST_RNG_RANGE A
WHERE A.SALE_NO='SN201507260001');
3、常用分区表相关语句
--显示数据库所有分区表的信息:
select * from DBA_PART_TABLES;
--显示当前用户可访问的所有分区表信息:
select * from ALL_PART_TABLES;
--显示当前用户所有分区表的信息:
select * from USER_PART_TABLES;
--显示表分区信息 显示数据库所有分区表的详细分区信息:
select * from DBA_TAB_PARTITIONS;
--显示当前用户可访问的所有分区表的详细分区信息:
select * from ALL_TAB_PARTITIONS;
--显示当前用户所有分区表的详细分区信息:
select * from USER_TAB_PARTITIONS;
--显示子分区信息 显示数据库所有组合分区表的子分区信息:
select * from DBA_TAB_SUBPARTITIONS;
--显示当前用户可访问的所有组合分区表的子分区信息:
select * from ALL_TAB_SUBPARTITIONS;
--显示当前用户所有组合分区表的子分区信息:
select * from USER_TAB_SUBPARTITIONS;
--显示分区列 显示数据库所有分区表的分区列信息:
select * from DBA_PART_KEY_COLUMNS;
--显示当前用户可访问的所有分区表的分区列信息:
select * from ALL_PART_KEY_COLUMNS;
--显示当前用户所有分区表的分区列信息:
select * from USER_PART_KEY_COLUMNS;
--显示子分区列 显示数据库所有分区表的子分区列信息:
select * from DBA_SUBPART_KEY_COLUMNS;
--显示当前用户可访问的所有分区表的子分区列信息:
select * from ALL_SUBPART_KEY_COLUMNS;
--显示当前用户所有分区表的子分区列信息:
select * from USER_SUBPART_KEY_COLUMNS;
--怎样查询出oracle数据库中所有的的分区表
select * from user_tables a where a.partitioned='YES';
--删除一个表的数据是
truncate table table_name;
--删除分区表一个分区的数据是
alter table table_name truncate partition p5;
相关推荐
- **组合分区**:结合以上两种或多种分区方法,例如范围-散列分区或范围-列表分区,可以更精细地控制数据分布。 2. **索引组织表(IOT)分区**: - 只能进行范围、列表或散列分区。 3. **分区索引**: - **本地...
6. **11g 中自动增加新分区**:从 Oracle 11g 开始,支持自动创建新的分区,以适应不断增长的数据需求。 - 示例:创建自动增加分区的表。 ```sql CREATE TABLE sales ( year NUMBER, month NUMBER, sales_...
资源中包含的分区的基本命令,可以进行熟悉数据库分区的用户就行训练。
Oracle 11g版本在原有的基础上引入了一系列新的特性,旨在进一步提升数据分区的效率和灵活性。这些新特性包括但不限于: - **增加最大分区数量**:每个表的最大分区数量从10,000增加到了1,000,000,这意味着可以在...
Oracle 11g中的表分区新特性是数据库管理系统在处理大规模数据时提升性能和管理效率的重要工具。分区表允许将一个大表逻辑上划分为多个较小的部分,每个部分称为分区,这些分区可以独立管理和查询,从而优化数据存储...
Oracle 10g 的表分区技术是数据库性能优化的重要工具,它提供了一种有效管理海量数据的方法,增强了系统的可扩展性和可维护性。通过选择合适的分区策略,数据库管理员可以更好地应对数据增长带来的挑战,同时提高...
分区技术在Oracle 10g R2版本中支持四种类型:范围分区(Range)、列表分区(List)、散列分区(Hash)和组合分区(Range-List和Range-Hash)。范围分区基于特定值的范围将数据分至不同分区,例如按日期创建的业务...
- **Oracle 8i数据库**:增加了散列分区和组合分区的支持,后者允许将多个分区策略结合起来使用。 - **Oracle 9i数据库**:添加了列表分区的功能,这使得可以根据列值列表来定义分区。 - **Oracle 9i数据库第2版**:...
在Oracle 11g中,分区功能得到了进一步的增强,包括对分区表的支持更为完善,允许对现有分区进行动态调整,以及提供了更多的分区策略,如列表分区和范围分区的组合使用,这为大型数据集的管理和查询效率提升提供了更...
Oracle 11g在分区方面进行了大量增强,如逻辑对象分区、引用分区、间隔分区、虚拟列分区和组合分区等,这些增强了分区设计的灵活性和可管理性,使得数据管理更为高效。 4. **高性能LOB基础设施**: 对大型对象...
分区扩展是 Oracle 11g 中的一种功能,包括间隔分区、引用分区与基于虚拟列的分区。分区扩展显著增强分区表的可管理性,扩展分区键定义的灵活性。 间隔分区扩展了范围分区的功能,可以使用间隔定义来定义同类分区...
Oracle 11g 是甲骨文公司发布的一个企业级数据库管理系统,它提供了高效能、高可用性和安全性。这个文档集合可能包含多个方面的内容,包括安装与配置、性能优化、数据管理、安全设置、备份与恢复、网络配置以及SQL...
组合分区是将两种或多种分区方式结合使用的一种方法。例如Range-Hash分区就是先根据范围进行一级分区,然后在每个一级分区内再根据哈希值进行二级分区。这种组合方式能够充分发挥不同分区方式的优点,适用于更复杂的...