`

oracle 子分区

 
阅读更多
--1.创建表空间
create tablespace tbs1 datafile
'e:\oracle\tbs1_1_1.dbf' size 5m;

create tablespace tbs2 datafile
'e:\oracle\tbs2_1_1.dbf' size 5m;

-------------
--2.建表
create table AGG_BILL_BY_CITY (
    HOUR_ID INTEGER not null,
   CITY_ID INTEGER not null,
  MONTH_ID INTEGER,
  CALL_TYPE_ID INTEGER not null,
  DEAL_ID INTEGER not null,
  OPERATOR_ID INTEGER not null,
  FEE_TYPE_ID INTEGER not null,
  ROAM_TYPE_ID INTEGER not null,
   CALL_FEE NUMBER,
   LONG_FEE NUMBER,
  CALL_NUM INTEGER,
  BILL_DURATION NUMBER,
  CALL_DURATION NUMBER,
 GPRS_IN NUMBER,
  GPRS_OUT NUMBER,
   LOAD_TIME DATE default sysdate,
 SUM_NUM NUMBER
   )
  partition by range(HOUR_ID)  --partition attri
  subpartition by 
	hash(CITY_ID, CALL_TYPE_ID, DEAL_ID, OPERATOR_ID, FEE_TYPE_ID, ROAM_TYPE_ID)--subpartition attri
  subpartitions 2 store in(TBS1,tBS2) 
  (
  partition P20060527 values less than(2006052800), --partition
  partition P20060528 values less than(2006052900)
  );
alter table AGG_BILL_BY_CITY MODIFY DEFAULT ATTRIBUTES tablespace tbs1;--default tablespace

alter table AGG_BILL_BY_CITY add partition P20060530 values less than(2006053000);--add partition

select table_name,partition_name,subpartition_name,tablespace_name 
from user_tab_subpartitions;



alter table AGG_BILL_BY_CITY   --change tablespace
move subpartition sys_subp25 tablespace tbs1;

alter table AGG_BILL_BY_CITY 
move subpartition sys_subp32 tablespace tbs2;

drop table agg_bill_by_city;

-----------------------------------
create table AGG_BILL_BY_CITY
    (
    HOUR_ID INTEGER not null,
    CITY_ID INTEGER not null,
    MONTH_ID INTEGER,

    CALL_TYPE_ID INTEGER not null,

    DEAL_ID INTEGER not null,

    OPERATOR_ID INTEGER not null,

  FEE_TYPE_ID INTEGER not null,
  ROAM_TYPE_ID INTEGER not null,

   CALL_FEE NUMBER,

   LONG_FEE NUMBER,

   CALL_NUM INTEGER,

  BILL_DURATION NUMBER,

   CALL_DURATION NUMBER,

  GPRS_IN NUMBER,

  GPRS_OUT NUMBER,

  LOAD_TIME DATE default sysdate,

 SUM_NUM NUMBER
   )
   partition by range(HOUR_ID)
  subpartition by hash(CITY_ID, CALL_TYPE_ID, DEAL_ID, OPERATOR_ID, FEE_TYPE_ID, ROAM_TYPE_ID)
 SUBPARTITION TEMPLATE(SUBPARTITION sp1 TABLESPACE tbs1,
	  SUBPARTITION sp2 TABLESPACE tbs2)
   (
   partition P20060527 values less than(2006052800),
  partition P20060528 values less than(2006052900)
   );
	 
alter table AGG_BILL_BY_CITY set subpartition template(SUBPARTITION sp1 TABLESPACE tbs1,
	  SUBPARTITION sp2 TABLESPACE tbs2,
		SUBPARTITION sp3 TABLESPACE tbs2)

select * from AGG_BILL_BY_CITY
insert into AGG_BILL_BY_CITY(HOUR_ID,CITY_ID, CALL_TYPE_ID, DEAL_ID, OPERATOR_ID, FEE_TYPE_ID, ROAM_TYPE_ID)
values(2006052800,1,1,1,1,1,1);

select distinct table_name,partition_name,tablespace_name ,subpartition_name
from user_tab_subpartitions
order by tablespace_name;

 select * from user_subpartition_templates;

alter table AGG_BILL_BY_CITY add partition P20060530 values less than(2006053000);

alter table AGG_BILL_BY_CITY add partition Pmax values less than(maxvalue);
alter table AGG_BILL_BY_CITY 
move subpartition sys_subp32 tablespace tbs2;

alter table ac82 modify partition part_
add subpartition P20060527_SP3 values(3) tablespace ;

PART_2010_PART_350106 AC82_2010



declare
cursor cur is select distinct table_name,partition_name ,tablespace_name
from user_tab_subpartitions where 1=1
order by table_name,tablespace_name,partition_name;
begin
	for c in cur loop
		execute immediate 'alter table '||c.table_name||' modify partition '||c.partition_name||
		' add subpartition '||c.partition_name||'_PART_350106'||' values(''350106'') tablespace '
		||c.tablespace_name;
	end loop;
end;




----------------------------
drop table AGG_BILL_BY_CITY
create table AGG_BILL_BY_CITY
    (
    HOUR_ID INTEGER not null,
    CITY_ID INTEGER not null,
    MONTH_ID INTEGER,

    CALL_TYPE_ID INTEGER,

    DEAL_ID INTEGER,

    OPERATOR_ID INTEGER,

  FEE_TYPE_ID INTEGER ,
  ROAM_TYPE_ID INTEGER,

   CALL_FEE NUMBER,

   LONG_FEE NUMBER,

   CALL_NUM INTEGER,

  BILL_DURATION NUMBER,

   CALL_DURATION NUMBER,

  GPRS_IN NUMBER,

  GPRS_OUT NUMBER,

  LOAD_TIME DATE default sysdate,

 SUM_NUM NUMBER
   )
   partition by range(HOUR_ID)
  subpartition by list(CITY_ID)
 SUBPARTITION TEMPLATE(SUBPARTITION sp1 values(1) TABLESPACE tbs1 ,
	  SUBPARTITION sp2 values(2) TABLESPACE tbs2)
   (
   partition P20060527 values less than(2006052800),
  partition P20060528 values less than(2006052900)
   );

insert into AGG_BILL_BY_CITY (hour_id,city_id) values(1,3);
insert into AGG_BILL_BY_CITY (hour_id,city_id) values(2006052910,3);

alter table AGG_BILL_BY_CITY set subpartition template(SUBPARTITION sp1 values(1) TABLESPACE tbs1 ,
	  SUBPARTITION sp2 values(2) TABLESPACE tbs2,
		SUBPARTITION sp3 values(3) TABLESPACE tbs2)
-------------------------------------------
-- 不指定表空间 分区表的默认空间->表的默认空间->用户的默认空间
分区索引 本地索引会随着分区的操作自动增加
建立分区索引没默认表空间,新增索引所在表空间和新增表空间一致

复核分区索引给出分区默认表空间,新建索引子分区建立在索引分区表空间


--例一:分区表增加分区

SELECT DEFAULT_TABLESPACE FROM USER_USERS;

create tablespace test datafile
'e:\oracle\test.dbf' size 5m;

select * from test;
drop table test;

CREATE TABLE TEST (ID NUMBER)
TABLESPACE USERS  --table tablespace
PARTITION BY RANGE (ID)
(
PARTITION P1 VALUES LESS THAN (100) TABLESPACE TEST --partition  tablespace
);

select * from test1
drop table test1;

CREATE TABLE TEST1 (ID NUMBER)
 PARTITION BY RANGE (ID)
 (
 PARTITION P1 VALUES LESS THAN (100) TABLESPACE TEST
 );

 ALTER TABLE TEST ADD PARTITION P2 VALUES LESS THAN (200);--table tablespace

ALTER TABLE TEST1 ADD PARTITION P2 VALUES LESS THAN (200);--user tablespace




 DROP TABLE TEST;
 DROP TABLE TEST1;

create tablespace tools 
datafile 'e:\oracle\tools.dbf'
size 5m;

--例二:复合分区表增加子分区
CREATE TABLE TEST (TIME DATE, STATE VARCHAR2(10))
TABLESPACE tools
 PARTITION BY RANGE (TIME) 
 SUBPARTITION BY LIST (STATE) 
 (
 PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD')) TABLESPACE USERS(--partition
 SUBPARTITION SP1 VALUES ('BJ') TABLESPACE TEST ));

CREATE TABLE TEST1 (TIME DATE, STATE VARCHAR2(10))
 TABLESPACE tools  --table
 PARTITION BY RANGE (TIME) 
 SUBPARTITION BY LIST (STATE)
 (
 PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD'))(--table tablespace
 SUBPARTITION SP1 VALUES ('BJ') TABLESPACE TEST
 ));
 
CREATE TABLE TEST2 (TIME DATE, STATE VARCHAR2(10))--default
 PARTITION BY RANGE (TIME) SUBPARTITION BY LIST (STATE)
 (
 PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD')) --table default
 ( SUBPARTITION SP1 VALUES ('BJ') TABLESPACE TEST
 )
 )
 ;
SELECT partition_name,TABLE_NAME, TABLESPACE_NAME FROM USER_TAB_PARTITIONS
--WHERE PARTITION_NAME = 'P2'
order by table_name,partition_name
;

drop table AGG_BILL_BY_CITY;

select table_name,partition_name,subpartition_name,tablespace_name 
from user_tab_subpartitions
where subpartition_name='SP2';

ALTER TABLE TEST MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');

ALTER TABLE TEST1 MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');

ALTER TABLE TEST2 MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');

SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TAB_SUBPARTITIONS 
 WHERE SUBPARTITION_NAME = 'SP2';

DROP TABLE TEST;
DROP TABLE TEST1;
DROP TABLE TEST2;

--例三:本地索引分区

CREATE TABLE TEST (ID NUMBER, NAME VARCHAR2(30))
 TABLESPACE USERS   --
 PARTITION BY RANGE (ID)
 (
 PARTITION P1 VALUES LESS THAN (100) TABLESPACE TEST --
 );

CREATE TABLE TEST1 (ID NUMBER, NAME VARCHAR2(30))
 PARTITION BY RANGE (ID)
 (
 PARTITION P1 VALUES LESS THAN (100) TABLESPACE TEST --
 );

CREATE INDEX IND_TEST_1 ON TEST (ID) LOCAL;

create tablespace indx 
datafile 'e:\oracle\indx.dbf'
size 1m;

CREATE INDEX IND_TEST_2 ON TEST (NAME) TABLESPACE INDX LOCAL; --

CREATE INDEX IND_TEST1_1 ON TEST1 (ID) LOCAL;

CREATE INDEX IND_TEST1_2 ON TEST1 (NAME)  TABLESPACE INDX LOCAL;


ALTER TABLE TEST ADD PARTITION P2 VALUES LESS THAN (200);
ALTER TABLE TEST1 ADD PARTITION P2 VALUES LESS THAN (200);

SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TAB_PARTITIONS
WHERE PARTITION_NAME = 'P2';


SELECT TABLE_NAME, A.INDEX_NAME, A.TABLESPACE_NAME 
 FROM USER_IND_PARTITIONS A, USER_INDEXES B
 WHERE PARTITION_NAME = 'P2'
 AND A.INDEX_NAME = B.INDEX_NAME
 ORDER BY 1, 2;

DROP TABLE TEST;
DROP TABLE TEST1;

--例四:复合分区索引


CREATE TABLE TEST (ID NUMBER, TIME DATE, STATE VARCHAR2(10))
 TABLESPACE TOOLS --
 PARTITION BY RANGE (TIME) SUBPARTITION BY LIST (STATE)
 (
 PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD')) TABLESPACE USERS--
 (
 SUBPARTITION SP1 VALUES ('BJ') TABLESPACE TEST--
 )
 )
;


CREATE TABLE TEST1 (ID NUMBER, TIME DATE, STATE VARCHAR2(10))
 TABLESPACE TOOLS ---
 PARTITION BY RANGE (TIME) SUBPARTITION BY LIST (STATE)
 (
 PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD'))
 (
 SUBPARTITION SP1 VALUES ('BJ') TABLESPACE TEST--
 )
 )
 ;


CREATE TABLE TEST2 (ID NUMBER, TIME DATE, STATE VARCHAR2(10))
 PARTITION BY RANGE (TIME) SUBPARTITION BY LIST (STATE)
 (
 PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD'))
 (
 SUBPARTITION SP1 VALUES ('BJ') TABLESPACE TEST --
 )
 )
 ;

CREATE INDEX IND_TEST_1 ON TEST (ID) LOCAL;
CREATE INDEX IND_TEST_2 ON TEST (TIME) TABLESPACE INDX LOCAL;


CREATE INDEX IND_TEST_3 ON TEST (STATE) LOCAL (PARTITION P1 TABLESPACE SYSTEM) TABLESPACE INDX;
CREATE INDEX IND_TEST1_1 ON TEST1 (ID) LOCAL;

CREATE INDEX IND_TEST1_2 ON TEST1 (TIME) TABLESPACE INDX LOCAL;

CREATE INDEX IND_TEST1_3 ON TEST1 (STATE)
 LOCAL (PARTITION P1 TABLESPACE SYSTEM)
 TABLESPACE INDX;


CREATE INDEX IND_TEST2_1 ON TEST2 (ID) LOCAL;

CREATE INDEX IND_TEST2_2 ON TEST2 (TIME)
TABLESPACE INDX LOCAL;

CREATE INDEX IND_TEST2_3 ON TEST2 (STATE)
 LOCAL (PARTITION P1 TABLESPACE SYSTEM)
 TABLESPACE INDX;


ALTER TABLE TEST MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');

ALTER TABLE TEST1 MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');


ALTER TABLE TEST2 MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');

SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TAB_SUBPARTITIONS 
WHERE SUBPARTITION_NAME = 'SP2';

TABLE_NAME TABLESPACE_NAME
-------------------- ------------------------------TEST USERS
TEST1 TOOLS
TEST2 YANGTK

SQL> SELECT TABLE_NAME, A.INDEX_NAME, A.TABLESPACE_NAME 
2 FROM USER_IND_SUBPARTITIONS A, USER_INDEXES B
3 WHERE SUBPARTITION_NAME = 'SP2'
4 AND A.INDEX_NAME = B.INDEX_NAME
5 ORDER BY 1, 2;

TABLE_NAME INDEX_NAME TABLESPACE_NAME
-------------------- -------------------- -----------------------TEST IND_TEST_1 USERS
TEST IND_TEST_2 INDX
TEST IND_TEST_3 SYSTEM
TEST1 IND_TEST1_1 TOOLS
TEST1 IND_TEST1_2 INDX
TEST1 IND_TEST1_3 SYSTEM
TEST2 IND_TEST2_1 YANGTK
TEST2 IND_TEST2_2 INDX
TEST2 IND_TEST2_3 SYSTEM

ALTER TABLE TEST_INSER ENABLE ROW MOVEMENT;


分享到:
评论

相关推荐

    ORACLE分区ORACLE分区ORACLE分区

    ORACLE分区ORACLE分区ORACLE分区ORACLE分区ORACLE分区ORACLE分区ORACLE分区ORACLE分区ORACLE分区ORACLE分区ORACLE分区ORACLE分区ORACLE分区ORACLE分区

    Oracle表分区详解

    除了以上基本类型,Oracle还提供了一些高级分区策略,如子分区、全局分区和本地分区等,以适应不同业务需求。 表分区的优点包括: 1. **性能提升**:查询只涉及相关分区,减少I/O操作,提高查询速度。 2. **维护...

    Oracle表分区 建表空间 创建用户

    ### Oracle表分区、建表空间与用户管理 ...- `SUBPARTITION BY HASH`: 指定子分区的方式。 以上是关于Oracle表分区的基本介绍和具体实现方式,通过合理运用这些分区技术,可以显著提升数据库的性能和管理效率。

    oracle表分区实例

    在示例中,员工表先按入职日期范围分区,然后对每个范围分区再进行哈希子分区。 ```sql CREATE TABLE emp ( empno NUMBER(4), ename VARCHAR2(30), hiredate DATE ) PARTITION BY RANGE (hiredate) ...

    oracle自动分区重命名.txt

    oracle按时间自动分区后,将自分区的系统名根据时间重命名。如:SYS_P20000重命名为P20190101。 输入两个参数表名 +类型 1:日 2:月 3:年 默认日期 把后面注释的执行语句释放,测试...切记:没数据的子分区会被删除

    oracle 分区表管理

    如果表包含子分区,可以通过以下视图获取子分区的相关信息: 1. `DBA_TAB_SUBPARTITIONS`:展示数据库中所有组合分区表的子分区信息。 2. `ALL_TAB_SUBPARTITIONS`:显示当前用户可访问的所有组合分区表的子分区...

    oracle自动一年建立表分区.zip

    2. **创建分区策略**:根据年份和月份设置分区,例如每年一个分区,每月一个子分区。 3. **编写SQL脚本**:创建一个PL/SQL过程,该过程接受当前日期,计算一年前的日期,并为这些日期创建相应的分区。 4. **调度任务...

    ORACLE表分区例子

    - **子分区**:在分区基础上进一步细粒度划分,比如在范围分区的基础上按月再细分到日。 - **全局索引**:可以在整个分区表上创建索引,提高跨分区查询的效率。 - **本地索引**:每个分区都有自己的索引,只针对该...

    导入导出 Oracle 分区表数据

    2. **导入分区**:可以导入所有分区(即整个表),也可以导入一个或多个分区以及子分区。 对于已存在数据的表,使用`imp`导入时需要使用`IGNORE=y`参数,以忽略主键冲突等问题;而使用`impdp`则可以使用`table_...

    Oracle最新分区特性优化实践.pptx

    版本12.2开始支持多列列表分区、自动列表分区、间隔子分区、外部表分区、多种在线分区操作等功能。版本18开始支持并行分区连接性能增强、在线修改分区策略、在线合并分区等功能。 在适用场景中,时间属性、关注近期...

    ORACLE分区表的创建

    在这个例子中,`TABL_NAME`表首先根据`F_HXRQ`列的值范围进行范围分区,然后每个范围分区内部再根据`UNIT_ID`列的值进行列表子分区。这样的设计可以更加细致地控制数据的分布,提高查询效率。 #### 四、总结 通过...

    oracle教材,全面学习分区

    - **修改表子分区模板 (Set Subpartition Template)**:对于复合分区,定义子分区的模板。 ##### 管理索引分区 - **增加索引分区 (Adding Index Partitions)**:为全局索引添加分区。 - **删除索引分区 (Dropping ...

    Oracle电子教案、Oracle课堂笔记.rar

    2. 分区与表空间:Oracle支持分区表以提高大数据处理能力,表空间管理则是分配和组织数据库存储的关键。 3. 数据库设计:如何进行规范化设计,避免数据冗余和异常,以及ER模型和逻辑设计的概念。 4. 实施与迁移:...

    如何使用Oracle数据库分区表.pdf

    "如何使用Oracle数据库分区表" Oracle 数据库分区表是关系型数据库中的一种重要技术,旨在解决海量数据处理问题。在当前互聯網技术和电子商业发展的时代,大数据已经成为企业面临的主要挑战之一。如何处理好海量...

    详细讲解Oracle表分区相关概念及优点

    例如,tab_students表按照c_id范围分区,再对每个范围分区内部按c_nation进行列表分区,形成子分区。 通过合理选择和设计分区策略,可以极大地优化数据库的性能,同时提高系统的稳定性和可维护性。在实际应用中,...

    ORACLE数据库分区技术及其应用.pdf

    表分区技术是将大表及其索引通过分区的形式分割为若干较小、可管理的小块,并且每一分区可以进一步划分为更小的子分区。这种分区对应用来说是透明的。Oracle 的表分区功能可以通过改善可管理性、性能和可用性,从而...

    Oracle10个分区和Mysql分区区别详解

    - Oracle 10g 提供了 Range-Hash 和 Range-List 组合分区,根分区是 Range,子分区可以是 Hash 或 List。这种方式在需要进一步细分数据或满足复杂查询需求时非常有用。 - MySQL 不直接支持组合分区,但可以通过...

    oracle 表分区

    通过将大表及其相关的索引划分为多个较小、易于管理的单元,即分区(partition)和子分区(sub-partition),它能显著提升数据管理和查询性能。分区技术对应用程序透明,这意味着对分区表的操作与非分区表并无太大...

    Oracle分区技术.pdf

    例如,首先对范围一散列组合分区表进行范围分区,然后使用第二个数据分配方法为每个分区进一步划分子分区。 分区扩展是 Oracle 11g 中的一种功能,包括间隔分区、引用分区与基于虚拟列的分区。分区扩展显著增强分区...

Global site tag (gtag.js) - Google Analytics