Oracle的存储结构分为物理结构与逻辑结构
物理结构:数据文件(Datafiles)、联机日志文件(Online Redo Logs)和控制文件(Control Files)
另外文件:参数文件、警报文件、跟踪文件、备份文件
逻辑结构:数据块、区、段、表空间
一、数据块
1、数据块格式:
块头:存放块的基本信息,如:块的物理地址、块所属的段类型(是数据段还是索引段)
表目录:存放表的信息
行目录:如果块中有行数据存在,则这些行的信息将被记录在行目录中。这些信息包括行的地址等
行数据:是真正存放表数据和索引数据的地方。
空余空间:是一个块中没有使用的区域,用于新行的插入和已经存在的行的更新
头部信息区:把块头、表目录、行目录这三部分合称为头部信息。
2、数据块中自由空间的使用
当insert数据时,块中的自由空间会减少,当update(使记录变长),块中的自由空间也会变少。
delete语句和update语句会使块中的自由空间增加。
3、行链接与行迁移
4、块中自由空间的自动管理
Oracle使用位图(bitmap)来管理和跟踪数据块,这种块的空间管理叫自动管理
a.易于使用 b、更好地利用空间 c、可以对空间进行实时调整
5、块中自由空间的手动管理
可通过PCTFREE、PCTUSED来调整块中空间的使用,手动管理方式比较麻烦,不容易掌握,容易造成块中空间的浪费。
二、区
区是一段连续的存储空间,当段中的空间耗尽时,Oracle会分配一个新的区给这个段。
当创建一个表时,Oracle会给这个表的数据段分配一个初始区,即使没有数据的插入,Oracle还是会分配这个初始区。
伴随着数据的添加,这个初始区的空间会被填满,Oracle会再分配一个新的区给这个数据段,叫做“递增区”
分配机制:表空间级别、表级别
三、段
1、数据段
存放数据,一个单独的段可以存放下面的数据:一个普通表的数据、分区表中的一个分区、聚簇表
创建表的时候,其实质就是创建一个或多个段。创建数据段的时候,可以指定数据段的存储参数
2、索引段
用于存放索引数据,创建索引段的时候,可以指定索引段的存储参数
3、临时段
用于存放临时数据。用于数据的排序。只有内存不足的时候,Oracle才会用到临时段。
Oracle用到临时段,是数据库性能降低的一个征兆。所以DBA应该尽量让排序在内存中进行。当排序完成时,Oracle会释放临时段。
用到临时段的SQL语句:
CREATE INDEX
SELECT ...ORDER BY
SELECT DISTINCT
SELECT ...GROUP BY
SELECT ...UNION
SELECT ...INTERSECT
SELECT ...MINUS
4、回滚段
用于保存回滚条目,Oracle将数据被修改以前的版本保存在回滚条目中,利用这些条目,用户可以撤销以前对数据的修改,回滚条目还可以实现读一致性。
四、表空间
1、大文件表空间
2、系统表空间
3、辅助表空间
4、回滚表空间
5、临时表空间