高层中间连廊天井通透:Oracle数据库中的存储层次体系-----数据文件--文件

来源:百度文库 编辑:九乡新闻网 时间:2024/04/18 20:15:43
数据库由一个或多个表空间构成。表空间(tablespace)是Oracle 中的一个逻辑存储容器,位于存储层次体系的顶层,包括一个或多个数据文件。这些文件可能是文件系统中的cooked文件、原始分区、ASM管理的数据库文件,或者是集群文件系统上的文件。表空间包含段,请看下面的介绍。
1. 段
现在开始分析存储层次体系,首先讨论段,这是表空间中主要的组织结构。段(segment就是占用存储空间的数据库对象,如表、索引、回滚段等。创建表时,会创建一个表段。创建分区表时,则每个分区会创建一个段。创建索引时,就会创建一个索引段,依此类推。占用存储空间的每一个对象最后都会存储在一个段中,此外还有回滚段(rollback segment)、临时段(temporary segment)、聚簇段(cluster segment)、索引段(index segment)等。

注意    上面有这样一句话:“占用存储空间的每一个对象最后都会存储在一个段中”,这可能会把你搞糊涂。你会发现许多CREATE语句能创建多段的对象。之所以会产生困惑,原因是一条CREATE语句最后创建的对象可能包含0个、1个或多个段!例如,CREATE TABLE T ( x int primary key, y clob)就会创建4个段:一个是TABLE T的段,还有一个段对应索引(这个索引是为支持主键而创建的),另外还有两个CLOB段(一个CLOB段是LOB索引,另一个段是LOB数据本身)。与之不同,CREATE TABLE T ( x int, y date ) cluster MY_CLUSTER则不会创建任何段。第10章还会更深入地讨论这个概念。
2. 区段
段本身又由一个或多个区段组成。区段(extent)是文件中一个逻辑上连续分配的空间(一般来讲,文件本身在磁盘上并不是连续的;否则,根本就不需要消除磁盘碎片的工具了!)。另外,利用诸如独立磁盘冗余阵列(Redundant Array of Independent Disks,RAID)之类的磁盘技术,你可能会发现,一个文件不仅在一个磁盘上不连续,还有可能跨多个物理磁盘。每个段都至少有一个区段,有些对象可能还需要至少两个区段(回滚段就至少需要两个区段)。如果一个对象超出了其初始区段,就会请求再为它分配另一个区段。第二个区段不一定就在磁盘上第一个区段旁边,甚至有可能不在第一个区段所在的文件中分配。第二个区段可能与第一个区段相距甚远,但是区段内的空间总是文件中的一个逻辑连续空间。区段的大小可能不同,可以是一个Oracle数据块,也可以大到2 GB。
3. 块
区段又进一步由块组成。块(block是Oracle中最小的空间分配单位。数据行、索引条目或临时排序结果就存储在块中。通常Oracle从磁盘读写的就是块。