--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还提供了一些高级分区策略,如子分区、全局分区和本地分区等,以适应不同业务需求。 表分区的优点包括: 1. **性能提升**:查询只涉及相关分区,减少I/O操作,提高查询速度。 2. **维护...
### Oracle表分区、建表空间与用户管理 ...- `SUBPARTITION BY HASH`: 指定子分区的方式。 以上是关于Oracle表分区的基本介绍和具体实现方式,通过合理运用这些分区技术,可以显著提升数据库的性能和管理效率。
在示例中,员工表先按入职日期范围分区,然后对每个范围分区再进行哈希子分区。 ```sql CREATE TABLE emp ( empno NUMBER(4), ename VARCHAR2(30), hiredate DATE ) PARTITION BY RANGE (hiredate) ...
oracle按时间自动分区后,将自分区的系统名根据时间重命名。如:SYS_P20000重命名为P20190101。 输入两个参数表名 +类型 1:日 2:月 3:年 默认日期 把后面注释的执行语句释放,测试...切记:没数据的子分区会被删除
如果表包含子分区,可以通过以下视图获取子分区的相关信息: 1. `DBA_TAB_SUBPARTITIONS`:展示数据库中所有组合分区表的子分区信息。 2. `ALL_TAB_SUBPARTITIONS`:显示当前用户可访问的所有组合分区表的子分区...
2. **创建分区策略**:根据年份和月份设置分区,例如每年一个分区,每月一个子分区。 3. **编写SQL脚本**:创建一个PL/SQL过程,该过程接受当前日期,计算一年前的日期,并为这些日期创建相应的分区。 4. **调度任务...
- **子分区**:在分区基础上进一步细粒度划分,比如在范围分区的基础上按月再细分到日。 - **全局索引**:可以在整个分区表上创建索引,提高跨分区查询的效率。 - **本地索引**:每个分区都有自己的索引,只针对该...
2. **导入分区**:可以导入所有分区(即整个表),也可以导入一个或多个分区以及子分区。 对于已存在数据的表,使用`imp`导入时需要使用`IGNORE=y`参数,以忽略主键冲突等问题;而使用`impdp`则可以使用`table_...
版本12.2开始支持多列列表分区、自动列表分区、间隔子分区、外部表分区、多种在线分区操作等功能。版本18开始支持并行分区连接性能增强、在线修改分区策略、在线合并分区等功能。 在适用场景中,时间属性、关注近期...
在这个例子中,`TABL_NAME`表首先根据`F_HXRQ`列的值范围进行范围分区,然后每个范围分区内部再根据`UNIT_ID`列的值进行列表子分区。这样的设计可以更加细致地控制数据的分布,提高查询效率。 #### 四、总结 通过...
- **修改表子分区模板 (Set Subpartition Template)**:对于复合分区,定义子分区的模板。 ##### 管理索引分区 - **增加索引分区 (Adding Index Partitions)**:为全局索引添加分区。 - **删除索引分区 (Dropping ...
2. 分区与表空间:Oracle支持分区表以提高大数据处理能力,表空间管理则是分配和组织数据库存储的关键。 3. 数据库设计:如何进行规范化设计,避免数据冗余和异常,以及ER模型和逻辑设计的概念。 4. 实施与迁移:...
"如何使用Oracle数据库分区表" Oracle 数据库分区表是关系型数据库中的一种重要技术,旨在解决海量数据处理问题。在当前互聯網技术和电子商业发展的时代,大数据已经成为企业面临的主要挑战之一。如何处理好海量...
例如,tab_students表按照c_id范围分区,再对每个范围分区内部按c_nation进行列表分区,形成子分区。 通过合理选择和设计分区策略,可以极大地优化数据库的性能,同时提高系统的稳定性和可维护性。在实际应用中,...
表分区技术是将大表及其索引通过分区的形式分割为若干较小、可管理的小块,并且每一分区可以进一步划分为更小的子分区。这种分区对应用来说是透明的。Oracle 的表分区功能可以通过改善可管理性、性能和可用性,从而...
- Oracle 10g 提供了 Range-Hash 和 Range-List 组合分区,根分区是 Range,子分区可以是 Hash 或 List。这种方式在需要进一步细分数据或满足复杂查询需求时非常有用。 - MySQL 不直接支持组合分区,但可以通过...
通过将大表及其相关的索引划分为多个较小、易于管理的单元,即分区(partition)和子分区(sub-partition),它能显著提升数据管理和查询性能。分区技术对应用程序透明,这意味着对分区表的操作与非分区表并无太大...
例如,首先对范围一散列组合分区表进行范围分区,然后使用第二个数据分配方法为每个分区进一步划分子分区。 分区扩展是 Oracle 11g 中的一种功能,包括间隔分区、引用分区与基于虚拟列的分区。分区扩展显著增强分区...