Oracle的逻辑体系

张彤 2022年07月11日 893次浏览

Oracle数据库逻辑结构

image.png

  • tablespace 表空间

    系统表空间、回滚段表空间、临时表空间、用户表空间

    除了用户表空间外,其他三种表空间有各自特定的用途,不可随意更改和破坏

    一个database要想存在,至少需要有SYSTEMundo表空间

  • 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 的组成如下:

    1. 数据块头

      包括标准内容和可变内容。common and variable header

      数据块的概要信息,块地址block address,段类型(是表还是索引)

    2. 表目录区table directory

      只要有一行数据插入到数据块中,那该行数据所在的表的信息将被存储在这个区域

    3. 行目录区row directory

      插入的行的地址

    4. 可用空间区free space

      就是块中的空余空间,由PCTFREE参数控制,如果是10,表示该块将会空余10%左右的空间。

      此外,如果是表或者索引块,该区域还会存储事务条目,大致有23字节左右的开销。

    5. 行数据区row data

      存储的是具体的行的信息或者索引的信息,这部分占用了数据块绝大部分的空间