Oracle怎么新增删除表分区
目录
一、Oracle分区简介
二、Oracle分区优缺点
三、oracle删除分区数据
方法1:通过删除分区的方式
方法2:清数据
四、分区表的种类及创建分区
1、RANGE 范围分区
2、LIST 列表分区
3、HASH 散列分区
4、复合分区
五、分区表的操作
1.DML操作
2.DDL操作
1)添加分区
2)删除分区
3)截断分区
4)合并分区
5)拆分分区
6)接合分区
7)重命名表分区
8)移动分区
六、表分区相关的数据字典表
七、局部索引与全局索引
八、分区相关操作
1)添加分区
2)删除分区
3)截断分区
4)合并分区
5)拆分分区
6)接合分区(coalesca)
7)重命名表分区
8)相关查询
一、Oracle分区简介
Oracle在实际业务生产环境中,经常会遇到随着业务量的逐渐增加,表中的数据行数的增多,Oracle对表的管理和性能的影响也随之增大。
对表中数据的查询、表的备份的时间将大大提高,以及遇到特定情况下,要对表中数据进行恢复,也随之数据量的增大而花费更多的时间。
这个时候,Oracle数据库提供了分区这个机制,通过把一个表中的行进行划分,归为几部分。可以减少大数据量表的管理和性能问题。利用这种分区方式把表数据进行划分的机制称为表分区,各个分区称为分区表。
二、Oracle分区优缺点
一、首先我们讲一下表分区的优缺点
表分区有以下优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
缺点:
分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。
三、oracle删除分区数据
方法1:通过删除分区的方式
删除分区,数据也自动删除。语法:
1 |
|
删除表中分区和数据后,会造成索引失效,建议删除分区之后删除表中所有索引,在次重新建立索引。
方法2:清数据
语法:
1 |
|
四、分区表的种类及创建分区
1、RANGE 范围分区
CREATE TABLE PART_TAB_CUSTOMER_BY_RANGE
( CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY, FIRST_NAME VARCHAR2(30) NOT NULL, LAST_NAME VARCHAR2(30) NOT NULL, PHONE VARCHAR2(15) NOT NULL, EMAIL VARCHAR2(80), SEX VARCHAR2(10),STATUS VARCHAR2(10),INSERT_DATE DATE
)
PARTITION BY RANGE (INSERT_DATE) --按时间分区
( PARTITION DATE_RANGE1 VALUES LESS THAN (TO_DATE(' 2001-01-01', 'YYYY-MM-DD')) TABLESPACE part_Data1, PARTITION DATE_RANGE2 VALUES LESS THAN (TO_DATE(' 2007-01-01', 'YYYY-MM-DD')) TABLESPACE part_Data2,PARTITION DATE_RANGE3 VALUES LESS THAN (maxvalue) TABLESPACE part_Data3
)
PARTITION BY RANGE (CUSTOMER_ID) --按id分区
( PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE part_Data1, PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE part_Data2,PARTITION CUS_PART2 VALUES LESS THAN (maxvalue) TABLESPACE part_Data3
)
2、LIST 列表分区
说明:该分区的特点是某列的值只有有限个值,基于这样的特点我们可以采用列表分区。
规则:默认分区为DEFAULT,若不添加DEFAULT的分区插入数值不属于所设置的分区会报错。
例一、姓氏
CREATE TABLE PART_TAB_CUSTOMER_BY_LIST
( CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY, PHONE VARCHAR2(15) NOT NULL, EMAIL VARCHAR2(80), SEX VARCHAR2(10),CORP_ID VARCHAR2(3),INSERT_DATE DATE,SUM_DATE varchar2(4)
)
PARTITION BY LIST (SEX)
( PARTITION MALE VALUES ('男') TABLESPACE part_Data1, PARTITION FEMALE VALUES ('女') TABLESPACE part_Data2
)
PARTITION BY LIST (SUM_DATE)
( PARTITION SUM_DATE1 VALUES ('2012') TABLESPACE part_Data1, PARTITION SUM_DATE2 VALUES ('2013') TABLESPACE part_Data2,PARTITION SUM_DATE2 VALUES (DEFAULT) TABLESPACE part_Data2
)
3、HASH 散列分区
创建hash分区有两种方法:一种方法是指定分区的名字,另一种方法是指定分区数量。
CREATE TABLE PART_TAB_CUSTOMER_BY_HASH
( CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY, FIRST_NAME VARCHAR2(30) NOT NULL, LAST_NAME VARCHAR2(30) NOT NULL, PHONE VARCHAR2(15) NOT NULL, EMAIL VARCHAR2(80), SEX VARCHAR2(10),STATUS VARCHAR2(10),INSERT_DATE DATE
)
PARTITION BY HASH (CUSTOMER_ID) --按id散列
( PARTITION hash1 TABLESPACE part_Data1, PARTITION hash2 TABLESPACE part_Data2
)
4、复合分区
CREATE TABLE PART_TAB_SALE_RANGE_LIST
( PRODUCT_ID VARCHAR2(5), SALES_DATE DATE, SALES_COST NUMBER(10), STATUS VARCHAR2(10),
)
PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)
( PARTITION P1 VALUES LESS THAN (TO_DATE('2003-01-01','YYYY-MM-DD')) TABLESPACE part_Data1 ( SUBPARTITION P1SUB1 VALUES ('ACTIVE') TABLESPACE part_Data1, SUBPARTITION P1SUB2 VALUES ('INACTIVE') TABLESPACE part_Data2,SUBPARTITION P1SUB3 VALUES (DEFAULT) TABLESPACE part_Data3), PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) TABLESPACE part_Data2 ( SUBPARTITION P2SUB1 VALUES ('ACTIVE') TABLESPACE part_Data1, SUBPARTITION P2SUB2 VALUES ('INACTIVE') TABLESPACE part_Data2,SUBPARTITION P2SUB3 VALUES (DEFAULT) TABLESPACE part_Data3 ),PARTITION P3 VALUES LESS THAN (maxvalue) TABLESPACE part_Data3( SUBPARTITION P3SUB1 VALUES ('ACTIVE') TABLESPACE part_Data1,SUBPARTITION P3SUB2 VALUES ('INACTIVE') TABLESPACE part_Data2,SUBPARTITION P3SUB3 VALUES (DEFAULT) TABLESPACE part_Data3)
)
例二、range+bash,这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。
partition by range(transaction_date)
subpartition by hash(transaction_id) subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)
(partition part_01 values less than(to_date(‘2006-01-01’,’yyyy-mm-dd’)),
partition part_02 values less than(to_date(‘2010-01-01’,’yyyy-mm-dd’)),
partition part_03 values less than(maxvalue)
);
五、分区表的操作
1.DML操作
说明:DML操作和平常的表一样,有异于的地方是增加了可以指定表的特定分区才执行DML操作。
SELECT * FROM PART_TAB_SALE_RANGE_LIST;--不指定分区直接查询
SELECT * FROM PART_TAB_SALE_RANGE_LIST PARTITION(P2);--指定分区查询
SELECT * FROM PART_TAB_SALE_RANGE_LIST SUBPARTITION(P1SUB2);--指定小分区查询
SELECT * FROM PART_TAB_SALE_RANGE_LIST PARTITION(P2) where 1=1;--指定分区查询,增加where条件
对于分区表,指定分区执行DML效率更高,但,如果指定了分区,而条件中的数据又不在该分区中时,将不会产生任何DML操作。
2.DDL操作
1)添加分区
(1)对range分区表添加分区
ALTER TABLE PART_TAB_SALE_RANGE_LIST ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2009-06-01','YYYY-MM-DD'));
注意:增加一个分区的时候,增加的分区的条件必须大于现有分区的最大值,否则系统将提示ORA-14074 partition bound must collate higher than that of the last partition 错误。
(2)对range分区表list子分区添加分区
ALTER TABLE PART_TAB_SALE_RANGE_LIST MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');
2)删除分区
(1)对range分区表删除分区
ALTER TABLE PART_TAB_SALE_RANGE_LIST DROP PARTITION P3;
(2)对range分区表list子分区删除子分区
ALTER TABLE PART_TAB_SALE_RANGE_LIST DROP SUBPARTITION P4SUB1;
注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。
3)截断分区
说明:截断某个分区是指清空某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有一个分区时,也可以截断该分区。
注意:如果截断的分区表有约束,需要先关闭约束。alter table sales disable/enable constraint restraint_name,截断分区会使全局索引无效,需要重建。
(1)清空分区:
ALTER TABLE SALES TRUNCATE PARTITION P2;--这种方式使全局分区索引无效ALTER TABLE SALES TRUNCATE PARTITION P2 update indexes;--这种方式使全局分区索引有效UPDATE GLOBAL INDEXES
(2)清空子分区:
ALTER TABLE PART_TAB_SALE_RANGE_LIST TRUNCATE SUBPARTITION P2SUB2; ALTER TABLE PART_TAB_SALE_RANGE_LIST TRUNCATE SUBPARTITION P2SUB2 update indexes;
4)合并分区
说明:合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能将分区合并到界限较低的分区。
ALTER TABLE PART_TAB_SALE_RANGE_LIST MERGE PARTITIONS P1,P2 INTO PARTITION P2;
注意:在本例中将原有的表的part_01分区和part_02分区进行了合并,合并后的分区为part_02,
如果在合并的时候把合并后的分区定为part_01的时候,系统将提示ORA-14275 cannot reuse lower-bound partition as resulting partition 错误。
5)拆分分区
说明:拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。
ALTER TABLE PART_TAB_SALE_RANGE_LIST SBLIT PARTITION P2 AT(TO_DATE('2003-03-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);
6)接合分区
说明:接合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加散列分区,然后进行接合,
值得注意的是,接合分区只能用于散列分区中。
ALTER TABLE PART_TAB_SALE_RANGE_LIST COALESCA PARTITION;
7)重命名表分区
ALTER TABLE SALES RENAME PARTITION P21 TO P2;
8)移动分区
说明:把分区移动到令一个表空间,移动后要重建索引
alter table sales move partiton sp1 tablespace tablespace_name;
alter index index_name rebuild;
–查询是否移动成功
SELECT TABLE_OWNER,TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME,SUBPARTITION_COUNT FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER='SCOTT';
六、表分区相关的数据字典表
DBA_IND_PARTITIONS
DBA_IND_SUBPARTITIONS
select object_name,object_type,tablespace_name,sum(value)
from v$segment_statistics
where statistic_name IN ('physical reads','physical write','logical reads') and object_type='INDEX'
group by object_name,object_type,tablespace_name
order by 4 desc
七、局部索引与全局索引
表可以按range,hash,list分区,表分区后,其上的索引和普通表上的索引有所不同,oracle对于分区表上的索引分为2类,即局部索引和全局索引。
八、分区相关操作
1)添加分区
以下命令给SALES表添加了一个P3分区
1 |
|
注意:以上添加的分区界限应该高于最后一个分区界限。
以下命令给SALES表的P3分区添加了一个P3SUB1子分区
1 |
|
2)删除分区
以下命令删除了P3表分区:
1 |
|
在以下命令删除了P4SUB1子分区:
1 |
|
注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。
3)截断分区
截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有一个分区时,也可以截断该分区。通过以下命令截断分区:
1 |
|
通过以下命令截断子分区:
1 |
|
4)合并分区
合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能将分区合并到界限较低的分区。以下命令实现了P1 P2分区的合并:
1 |
|
5)拆分分区
拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。
1 |
|
6)接合分区(coalesca)
结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加散列分区,然后进行接合,值得注意的是,接合分区只能用于散列分区中。通过以下命令进行接合分区:
1 |
|
7)重命名表分区
以下命令将P21更改为P2
1 |
|
8)相关查询
跨分区查询
1 2 3 4 5 |
|
查询表上有多少分区
1 |
|
查询索引信息
1 2 3 4 5 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
Oracle怎么新增删除表分区相关推荐
- oracle 表删掉了_分区,Oracle 删除表分区
Oracle 删除表分区 删除表分区 作者: 来源: 发布日期:2008-05-23 删除表分区(drop partition) 删除表分区包含两种操作,分别是: Ø 删除分区:alter table ...
- Oracle 删除表分区
Oracle 删除表分区 删除表分区(drop partition) 删除表分区包含两种操作,分别是: Ø 删除分区:alter table [tbname] drop partition [ptna ...
- ORACLE删除表分区和数据
– 删除分区,数据也自动删除 alter table 表名 DROP PARTITION 表中分区的名称; 删除表中分区和数据后,会造成索引失效,建议删除分区之后删除表中所有索引在次重新建立索引 – ...
- oracle创建和删除表空间,oracle 表空间创建和删除
oracle数据库:数据库对象以及表数据都存储在表空间中,创建用户时可以指定对应的表空间.这样用户可以在各自的表空间中操作数据,互不干扰. 1. 表空间创建 若不清楚表空间对应文件的路径,可以登录系统 ...
- Oracle Database 10g:删除表
使用 Oracle Database 10g 中的闪回表特性,可以毫不费力地恢复被意外删除的表 以下是一个不该发生却经常发生的情况:用户删除了一个非常重要的表 - 当然是意外地删除 - 并需要尽快地恢 ...
- oracle自定义存储过程:删除表(无论表是否存在)和检测表是否存在
oracle删除表,如果表不存在,就报错,在跑大型脚本(脚本长且耗时的时候)比较麻烦,一般希望的是点开始然后脚本运行到结束,不可能一直盯着屏幕等弹出提示手工点掉,mysql就很好有drop table ...
- oracle 主键 删除表_oracle删除表字段和oracle表增加字段
这篇文章主要介绍了oracle表增加字段.删除表字段修改表字段的使用方法,大家参考使用吧 添加字段的语法:alter table tablename add (column datatype [def ...
- hive 查看表分区,删除表分区
show partitions table_name;#查看表分区 alter table table_name drop partition (day='2022-06-20') #删除指定分区 a ...
- oracle中关于删除表purge语句和闪回语句的基本使用
语法: drop table ... purge; 例子:drop table test purge; purge是直接删除表,不保留到回收站,10G开始默认drop表式改名移动到回收站; 闪回(fl ...
最新文章
- 分布式链路追踪zipkin
- ubuntu中命令打开图片、文档、音乐、视频等
- 关卡设计快速入门_2. 导航视口
- Javascript之 对象和原型
- Eclipse for android 中设置java和xml代码提示功能(转)
- 头条搜索发布2020年十大流行语:逆行者、集美、后浪位列前三
- Hadoop(六)搭建分布式HBase集群
- oracle11 dataguard,探索Oracle之11g DataGuard
- solr学习笔记-增加mmesg4J中文分词
- [转]Mac OS X 下部分Android手机无法连接adb问题之解决方案
- hello word!------为什么开通博客以及自我介绍
- Ubuntu下RamDisk使用
- Could not find a package configuration file... GflagsConfig.cmake gflags-config.cmake 解决方法
- 1074 Reversing Linked List
- Centos8 更换DNF源
- 智能运维|AIRIOT智慧光伏管理解决方案
- 蚂蚁金服Java岗内推,quartz定时器的处理
- Node 开发一个多人对战的射击游戏(实战长文)
- win10计算机显示摄像头,win10系统此电脑添加摄像头(视频设备)图标的操作方法
- 【收集】键盘钢琴 和弦琴谱 (带HTML版开发流程)