Oracle 11gR2 List-Range分区实验

一、实验目的

采用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;

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 18:45:56

Oracle 11gR2 List-Range分区实验的相关文章

oracle interval-partition 解决range分区大难题

博客<oracle分区>中讲了oracle的几种分区,并且对于oracle的典型分区如Range分区和List分区给了示例. 在实际运用Range分区时,遇到了这样的难题: createtableTMP_LXQ_1 ( PROPOSALNO             VARCHAR2(22), STARTDATE              DATE ) partitionbyrange(STARTDATE) ( partitionpart_t01values less than(to_date(

Oracle 虚拟列 子分区 virtual column partition

Oracle 11g 虚拟列子分区实验 以下两个create 语句均为创建成功: 需求描述: 项目要求对3个字段进行分区,如时间,小时,还有个区域ID,便联想到虚拟列. drop table test_part purge;   create table test_part  (t_time date,  hour number,  city_id number,  hour_city varchar2(108) GENERATED ALWAYS AS(to_char(hour)||'|'||t

【oracle】分区表:range分区,list分区,hash分区

 ************************************************************************   ****原文:blog.csdn.net/clark_xu 徐长亮的专栏 ************************************************************************ --(1)分区表包含多个分区,每个分区都是在一个独立的segment上面,可以存放不同的表空间: --(1.1)官方推荐超过

Oracle 11gR2 RAC 新特性说明

最近接触了一下Oracle 11g R2 的RAC,发现变化很大. 所以在自己动手做实验之前还是先研究下它的新特性比较好. 一.    官网介绍 先看一下Oracle 的官网文档里对RAC 新特性的一点说明. Oracle Database 11g Release 2 (11.2.0.2) New Features in Oracle RAC http://download.oracle.com/docs/cd/E11882_01/rac.112/e16795/whatsnew.htm#CHDJ

OEL5.5安装Oracle 11gr2详解

虚拟机环境:Vmware Workstation 11.1.0 + Oracle Enterprise Linux 5.5 X86-641.物理机内存设置 最小:1GB 推荐:2GB或以上 检测内存大小: # grep MemTotal /proc/meminfo 查看可用的内存空间: free 2.交换分区(swap)设置 物理内存 交换分区大小 1~2G    前者的1.5倍 2G~16G 与前者相等 >16GB   16GB 查看交换分区的大小: # grep SwapTotal /pro

Oracle 11g 通过间隔分区实现按月创建表分区

在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不多,为了实现上述功能查了很多资料,一开始的方向是通过Crontab调用Shell脚本来按月自动创建分区,或者使用Oracle的Job调用存储过程来自动创建分区.在研究上述两套方案的过程中,无意发现Oracle11g有间隔分区功能,对于使用Range分区的可以按年,月,日来自动生成分区.语法如下: CREAT TABLE TABLE1 ( TABLE

redhat5下安装Oracle 11gR2单实例+ASM

一.环境: 主机:redhat5 数据库:Oracle 11gR2 硬盘:一个100G+八个2G 内存:4g 二.搭建yum仓库 [[email protected] ~]# mkdir /mnt/cdrom [[email protected] ~]# mount /dev/hdc /mnt/cdrom #查看挂载 [[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on ...省略输出 /dev/hdc 2

Networker 8.1异机恢复Oracle 11gR2

本文是一篇迟来的博文,写这篇博文源于近日在整理技术笔记时,看到2年前写的EMC Networker 8.1异机恢复Oracle 11gR2数据库的操作笔记(测试的是假如生产数据库服务器崩溃宕机,而将备份数据恢复到备用数据库服务器).虽然去年EMC就已推出了Networker 9,但本文可能多少还有一点参考价值,便稍加整理后发了出来. 一.测试环境 计算机名 IP地址 操作系统 角色 安装软件 Bakserver 10.1.1.4 RedHat 6 备份服务器 EMC Networker 8.1.

RedHat 6 静默安装Oracle 11gR2

之前看了网上很多篇Linux静默安装Oracle的文章,但安装测试时老觉得有问题,后来直接找来Oracle官方英文文档并仔细阅读研究rsp文件的内容说明,经过自己在虚拟机中的安装测试,使用RedHat 6.5(内核版本:2.6.32-431.el6.x86_64)上静默安装Oracle 11gR2(版本:11.2.0.3),整理出了本文,主要包括了环境要求与准备.静默安装Oracle软件与监听.静默安装Oracle数据库.安装完成后检查.设置Oracle开机自动启动等部分. 一. 环境要求与准备