oracle逻辑体系(1)_基本架构



 Oracle的逻辑结构就是在物理中不存在,是oracle方便管理而定义的一些概念。

主要有:tablespace(表空间)、segment(段)、extent(范围、区)、block(段)。它们从左到右一次是一对多的关系。即tablespace是由多个segment构成的,segment是由多个extent构成的,extent是由多个block构成。

在讲到oracle的逻辑结构不可避免的谈到oracle一些物理结构,这里补充两个物理结构:datafile(数据文件)、osblock(系统块),他们都是真实存在的物理实体。

 

Tablespace:一个表空间在某一时刻只能属于一个数据库,每个表空间由一个或多个数据文件组成表空间可以由一个或多个段组成。

 

DatafileOracle 数据库内的每个表空间由一个或者多个数据文件组成一个数据文件只能属于一个表空间创建数据文件时,通过分配指定数量的磁盘空间,加上文件系统头的少量的开销,来创建表空间数据文件。(物理文件,可以在系统查看到的真实文件)

 

Segment:表空间可以由一个或多个段组成,每个段由一个或多个区组成,其实一个段就是数据库中的对象,比如table(表)、index(索引)、undo(回滚段)等。

 

Extent:一个或多个区组成一个段,当段创建后它至少由一个区组成随着段的增长,将向该段添加区一个区就是一组连续的 Oracle 块。

 

ORACLE块:Oracle 数据块是 Oracle能够读或写的最小存储单元,但不是最小分配单元

一个数据块对应一个或多个(被分配了数据文件的)操作系统块组成,数据块大小应当是操作系统块大小的整数倍,以避免不必要的I/O

 



 

 

 

 

一、首先看一下段、区、块之间的关系



 

 

从上面的概念大家应该了解了基本的概念,我在这里在简单的总结一下:

段是你建立一个oracle内的一个对象(如表、索引等)就会oracle自动帮你建立一个段,用于存储该对象。可以通过dba_segments数据字典查询你建立的段。段必须要由区组成,所以在你建立段时也会自动的为你建立extent并且会是多个extent并且会根据你的段不断增长而自动增加区,可以通过dba_extents数据字典来查询区的信息。上面我们已经讲过段和区都是逻辑的概念,只是为了oracle方便管理,这些数据还是要真实存在磁盘中的所以区最后还是要是由block构成。上图非常清晰的表现出这个架构。

有人会问直接分配block不就行了吗?为什么还要够这么多层干嘛?其实就是为了方便管理,比如在用户只关心对象并不关心内部的存储结构,用户只要操作表就行了,不用再去分配block,而如何去分配block呢?一次分配多少、什么时候分配这就直接定义区管理就行了。大大方便了管理。

管理:

由于segment又分为多种,而每种的管理又不一样所以在这就不阐述了,会有专门的内容介绍。我们先看看extent是如何管理的:

Extent就是一连串block主要就是分配和回收,

分配三模式:

1、建立段的时候,自动分配初始化的范围

2、数据增长时,分配额外的范围

        增长的大小不同每次分配的范围也不同

3、手工分配额外的范围

Alter  table  name allocate extent(size 10m);

 

回收三模式

1、手工回收

Alter  table name deallocate unused

2、trucate table name

  只保留初始化的大小,清楚所有数据,初始大小由表空间里定义的初始化大小决定。

3、drop table name purge

彻底删除

 

二、表空间、段、数据文件的关系

 

 

 

数据库由多个表空间组成,而每个表空间只能属于一个数据库,一个表空间由多个数据文件组成,一个数据文件只能属于一个表空间,表和索引等对象逻辑上属于某个表空间,物理上是属于某些数据文件中的。

一个堆表所占用所有物理空间,这里的"所有物理空间"就指的是一个段.(分区表除外,分区表有多个段),段是占有一定存储空间的对象 可以理解为是对占用空间的对象的另一种命名方法。

<!--EndFragment-->

猜你喜欢

转载自997004049-qq-com.iteye.com/blog/1710116