Oracle数据库逻辑结构
-
tablespace 表空间
系统表空间、回滚段表空间、临时表空间、用户表空间
除了用户表空间外,其他三种表空间有各自特定的用途,不可随意更改和破坏
一个database要想存在,至少需要有
SYSTEM
及undo
表空间 -
segment 段
对应表和索引这样的relation、
只要segment创建成功,数据库就一定为其分配了包含若干数据块的初始数据扩展(initial extent)
有新数据插入需要空间,此时 Oracle 会自动为这个段分配一个新增数据扩展(incremental extent)
每个段的定义中都包含了数据扩展的存储参数(storage parameter)。存储参数适用于各种类型的段。这个参数控制着Oracle如何为段分配可用空间。
用户可以在
CREATE TABLE
语句中使用STORAGE
子句设定存储参数,决定创建表时为其数据段分配多少初始空间,或限定一个表最多可以包含多少数据扩展如果用户没有为表设定存储参数,那么表在创建时使用所在表空间(tablespace)的默认存储参数。
在一个本地管理的表空间中,其中所分配的数据扩展的容量既可以是用户设定的固定值,也可以是由系统自动决定的可变值。取决于用户创建tablespace时用 UNIFORM 指令(固定大小)还是AUTOALLOCATE指令(由系统管理)。
-
extent 区
为了避免过多的块操作而生成的存储概念,区是Oracle数据库分配空间的最小单位
-
block 块
数据库最小的存储单位.
这里需要注意的是,操作系统的块大小与数据库的块大小并不是完全相同的。
一般情况下,数据库的
block size
被设置为系统block的整数倍,目的是为了减少写入时的空间浪费。block 的组成如下:
-
数据块头
包括标准内容和可变内容。
common and variable header
数据块的概要信息,块地址
block address
,段类型(是表还是索引) -
表目录区
table directory
只要有一行数据插入到数据块中,那该行数据所在的表的信息将被存储在这个区域
-
行目录区
row directory
插入的行的地址
-
可用空间区
free space
就是块中的空余空间,由
PCTFREE
参数控制,如果是10,表示该块将会空余10%左右的空间。此外,如果是表或者索引块,该区域还会存储事务条目,大致有23字节左右的开销。
-
行数据区
row data
存储的是具体的行的信息或者索引的信息,这部分占用了数据块绝大部分的空间
-