关于oracle数据库段segment的总结

 段(segment)是一种在数据库中消耗物理存储空间的任何实体(一个段可能存在于多个数据文件中,因为物理的数据文件
 是组成逻辑表空间的基本物理存储单位)

 

今天碰到一个高水位问题:

一个分区表,删除某个分区中的一些数据后,表空间并没有回收。

 

原因:

如果一个表不进行分区,那么一个表就是在一个segment中。如果一个表进行多个分区,那么每一个分区就在一个segment。如果delete掉其中一些数据,那么空间是不会回收的

除非trunc掉这个分区。

 

解决办法:

用导出导入分区交换的办法,回收数据库表空间。

 

--创建临时表导出某天数据

createtable temp_msgbody  asselect*from im_msginfo_body partition(P_MSGINFO_BODY_20141213)

 

--清空导出的分区

altertable im_msginfo_body truncatepartition P_MSGINFO_BODY_20141213

 

--分区交换,将数据倒回

ALTERTABLE im_msginfo_body EXCHANGEPARTITION P_MSGINFO_BODY_20141213WITHTABLE temp_msgbody withvalidation;

 

segment(段)概念:

段(segment)是一种在数据库中消耗物理存储空间的任何实体(一个段可能存在于多个数据文件中,因为物理的数据文件
 是组成逻辑表空间的基本物理存储单位)

 更多的通用段是

 表(table),用来保存行列结构的数据
 索引(Index),用来加快访问速递
 回滚(Rollback),在用户事务期间和执行事务恢复期间用来维护读一致性的特殊的段,回滚段会被宰第8章节管理一致和
  并发继续说明
 分区(partition),为实现性能目标把表分成更小的更加容易管理的片。 

 


EXTENTS 是有由存储空间连续的块组成,但是每一个扩展只能驻留在单个数据文件中

Database blocks 是orcacle中更小的块,他操作系统块组成。

OS块


段是由扩展组成的,一到二亿个扩展,由于每个扩展只能属于单个数据文件,所以段可以分布在不同的数据文件中,
扩展是由数据库块组成的,
每个扩展,数据库块是有操作系统块组成。

表空间是为方便管理物理的分组模式对象(schema objects),表空间是物理结构(数据文件和和扩展)和逻辑结构(表和索引)的桥梁,

 

 

 

 

访问段可以用sql语言,c语言,cobol,java等语言。

 

一张只能占用一个段的空间,当这个表的数据增加,段可以为表重新分配新的区,这样空间就可以扩展了;
还有,一个段只属于一个表空间,一个表空间可以有多个段;表空间和段是逻辑存储结构上的一对多的关系;
表空间和数据文件也是一对多的关系,段和数据文件不是没有直接关系;
但一个段可以属于多个数据文件;

所以当段空间不足时,也就是相当于表空间不足;只要你扩展表空间大小或新增数据文件就可以了;

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页