Oracle数据文件存储层次体系
Oracle大的存储层次体系为:
1.数据库由一个或者多个表空间组成
2.表空间由一个或多个数据文件(种类有系统cooked文件,asm数据文件,原始分区数据文件,分区数据文件)。一个表空间包含多个段。
3.段(Table,Index等)由一个或多个区段组成。段在表空间中,可以包含表空间中的多个数据文件上的数据。
4.区段是磁盘上一组逻辑连续的块。区段只在一个表空间中,并且尽在表空间中的一个数据文件中
5.块是数据库中的最小分配单位,也是数据库使用的最小I/O单位。
其中数据库,表空间,文件,段,区段的关系如下图:
表空间只是Oracle的一个逻辑容器,位于存储层次体系的顶层。
存储层次体系中比较重要的两个概念是段和块。
段:段(segment)就是占用存储空间的数据库对象,如表,索引,回滚段等。创建表示会创建一个表段,创建索引时会创建一个索引段,创建分区表是会为每个分区创建一个段。占用存储空间的每个对象都会存储在一个段中。另外还有回滚段,临时段,聚簇段,索引段等。
注意:一条create语句可能创建多个段(如创建表时可能包含表段,索引段,lob段等)。
区段就是一段连续的存储空间,多个区段组成一个段。
块:块是Oracle中最小的额空间分配单位。数据行,索引条目,临时排序结果等都存储在块中。
段,区段,块的关系如下图:
块的组成基本如下图(也有例外,如lob段,exadata段):
首部包含块类型有关的信息(表块,索引块等),块上正在发生和已经发生的数据库事务信息及在磁盘上的地址。
表目录(如果有)存储的是把行记录存放在这个块上的表的信息,行目录包含块中数据行的信息(就是行的索引)。首部、表目录、行目录统称为块开销,不用来存放实际的数据,而是由oracle用来管理块本身。
块中剩余的两部分一个是空闲空间,一个是已经存放了数据的已用空间。
参考资料:Oracle 9i/10g/11g编程艺术,深入oracle体系结构