Oracle分区表

摘要:
最近,由于客户数据的表空间在业务中占据太多,因此不可能通过删除部分数据来减小表空间文件的大小。因此,建议使用分区表将分区表划分为范围分区、哈希分区、列表分区和一些组合分区。以下是每个分区的创建语法:1范围分区简介:语法:1 CREATETABLE表名(列定义)partitionbyrange(列名)2(3个分区名称值小于(value),4….删除分区可变表名droppartition分区名称;此外,本地索引将自动维护,全局索引将被禁用,需要重新生成。

最近因为业务上客户数据的表空间占用过大,而想通过删除一部分数据来缩小表空间文件的大小无法实现,故想到使用分区表来实现

分区表分为范围分区(range)、哈希分区(hash)、列表分区(list)、以及一些组合分区(range-hash、range-list)

以下为各个分区的创建语法:

1、范围分区(range)

简介:

语法:

1     CREATE TABLE 表名 (列定义) partition byrange(列名)
2 (
3       partition  分区名  valuesless than (值),
4 。。。。
5       partition 分区名 valuesless than (maxvalue)  ###默认分区
6      );

2、哈希分区(hash)

简介:

语法:

Oracle分区表第1张Oracle分区表第2张
1     CREATE TABLE 表名 (列定义) partition byhash(列名)
2 (
3 partition  分区名  tablespace 表空间名,
4 。。。。
5 partition 分区名  tablespace 表空间名
6      );
View Code

注:指定每个分区的表空间,用于分散在各个数据文件中。

3、列表分区(list)

简介:

需要指定列的值,其分区值必须明确指定,该分区列只能有一个,不能像range或者hash分区那样同时指定多个列作为分区依赖列,但它的单个分区对应值可以是多个。

注:在列表分区中,必须明确分区列可能存在的值,一旦插入的列值不在分区范围内,则插入/更新就会失败,因此通常建议使用列表分区时,要创建一个default分区存储那些不存在指定范围内的记录。

语法:

Oracle分区表第3张Oracle分区表第4张
1     CREATE TABLE 表名 (列定义) partition bylist(列名)
2 (
3       partition  分区名 values(值1,值2,值3....),
4 。。。。
5       partition 分区名  values (default)
6      );
View Code

4、组合分区

简介:

如果某表按照某列分区之后,仍然较大或其他需求,还可以通过分区内再建子分区的方式将分区再分区,即组合分区的方式。

语法:

分区表的常见操作:

查询分区表:

selecttable_name,partition_name fromuser_tab_partitions where table_name ='表名';

查询对应分区表中数据

select*from 表名 partition (分区名);

添加分区:

altertable 表名 add partition values(值) tablespace 表空间名;  

拆分分区(split):  

alter table 表名 split partition 分区名 {at | values} (值)
  into (partition 新分区名 tablespace 空间名,partition 新分区名 tablespace 空间名....);

注:标红处,列表为range类型,使用at;列表为list类型使用values;

合并分区(merge):

相邻的分区可以merge为一个分区,新分区的下边界为原来边界值较低的分区,上边界为原来值较高的分区,原来的局部牵引相应也会合并,全局索引会失效,需要rebuild。

altertable 表名 merge partitions 分区名1,分区名2... into partition 新分区名;

移动分区(move)

altertable 表名 move partition 分区名 tablespace 空间名;

注:分区移动会自动维护局部分区索引,Oracle不会自动维护全局索引,所以需要重新rebuild分区索引。

提升:具体需要rebuild哪些索引,可以通过dba_part_indexs,dba_ind_partitions去判断

select index_name,status from user_indexs where table_name ='表名';

查询局部索引:

select owner,index_name,table_name,partitioning_type from dba_part_indexes where index_name ='索引名'

select index_owner,index_name,partition_name from dba_ind_partitions where index_name ='索引名';

删除分区数据(truncate)

altertable 表名 truncate partition (分区名);

注:turncate相对delete操作快,数据仓库中的大量数据的批量数据加载可能会有用到;

截断分区同样会自动维护局部分区索引,同时会使全局索引unusable,需要重建。

删除分区(drop)

altertable 表名 drop partition 分区名;

同样会自动维护局部分区索引,同时会使全局索引unusable,需要重建。

分区索引

分为本地索引(local index) 和 全局索引(global index),局部索引比全局索引容易管理而全局索引比较快。

本地索引

语法:

Oracle分区表第5张Oracle分区表第6张
1 CREATE INDEX IND_表名 on表名(列)
2 local (
3 partition 分区名 tablespace 空间名,
4 partition 分区名 tablespace 空间名,
5         ....);
View Code

免责声明:文章转载自《Oracle分区表》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇airtest和poco中滑动、连续滑动和拖动操作Druid数据库连接池的使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ORACLE 12C PDB部分功能测试

许久没关注Oracle,没有想到Oracle12c都出来,不枉我注册的Oracle12c的Email。 ORACLE 12C中提出来CDB和PDB的概念,对于ORACLE的数据库来说,确实是一个新东西,他们可以分别理解为容器和插件(PDB插入在CDB中),CDB的管理和传统数据库区别不大,本篇文章对PDB的部分操作进行了简单说明(创建PDB,OPEN P...

oracle的热备份和冷备份

一、冷备份介绍:    冷备份数据库是将数据库关闭之后备份所有的关键性文件包括数据文件、控制文件、联机REDO LOG文件,将其拷贝到另外的位置。此外冷备份也可以包含对参数文件和口令文件的备份,但是这两种备份是可以根据需要进行选择的。,冷备份实际也是一种物理备份,是一个备份数据库物理文件的过程。因为冷备份要备份除了重做日志以外的所有数据库文件,因此也被成为...

Oracle报 ORA-00054资源正忙的解决办法

来源于:http://www.cnblogs.com/loveLearning/p/3625544.html oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT 问题如下: SQL> conn scott/tiger@vm_databaseConnected to Oracle Database 11g Enterprise...

MFC编程入门之二十一(常用控件:编辑框Edit Control)

  上一节讲了静态文本框,本节讲的是编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本。在前面加法计算器的例子中已经演示了编辑框的基本应用。下面具体讲解编辑框的使用。   编辑框的通知消息   编辑框发生某些事件时会向父窗口发送通知消息。在对话框模板中的编辑框上点击右键,选择“Add Event Handler”,为...

Oracle基础 触发器

一、触发器   触发器是当特定事件出现时自动执行的代码块。比如,每次对员工表进行增删改的操作时,向日志表中添加一条记录。触发器和存储过程是由区别的:触发器是根据某些条件自动执行的,存储过程是手动条用的。   (一)触发器的类型:     1、行级触发器:操作数据行的时候触发。     2、语句级触发器:一个DML语句出发一次的触发器。行级触发器和语句级触发器...

oracle dblink使用

一、dblink介绍 dblink是一个单向的数据库连接,通过设置可以访问其他数据库中的数据跟使用本地数据库中数据一样的感觉,但注意是单向的dblink。例如:A建连B的dblink,A可以访问B的表,插入数据到B的表等,但反过来B不可以。 创建dblink一般有两种方式,不过在创建dblink之前用户必须有创建dblink的权限。想知道有关dblink的...