数据库是存储数据的容器,它的主要功能是保存和共享数据。

oracle数据库的存储结构可以分为逻辑存储结构和物理存储结构,对于这两种存储结构,oracle是分别进行管理的。

  • 逻辑存储结构:oracle内部组织和管理数据的方式。
  • 物理存储结构:oracle外部(操作系统)组织和管理数据的方式。

接下来我们对上面的两种结构进行详细的介绍。

1.逻辑存储结构

 



图 1 Oracle 逻辑存储结构



图 2 Oracle 逻辑存储结构

如图 1和图 2 所示,oracle在逻辑上将保存的数据划分为一个个小单元来进行存储和维护,更高一级的逻辑存储结构都是由这些基本的小单元组成的。

逻辑结构类型按照尺寸从小到大分可分为:块(block)-->区(extent)-->段(segment)-->表空间(tablespace)

块(Block)

Oracle用来管理存储的最小单元,也是最小的逻辑存储结构。Oracle数据库在进行输入输出时,都是以块为单位进行读写操作的。我们建议数据块的尺寸为操作系统块尺寸的整数倍(1、2、4等)。另外,块的大小是在创建数据库的时候决定的,之后不能修改。当然,oracle同时也支持不同的表空间拥有不同的数据块尺寸。下面,我们对块的结构进行一些介绍。

块的头部信息区:

  • 块头:包含块的一般属性信息 如块的物理地址、块所属的段的类型。
  • 表目录:如果块中存储的数据是表数据, 则在表目录中保存块中所包含的表的相关信息。
  • 行目录:行记录的相关信息 如ROWID。
  • 块的存储区:主要包含空闲空间和已经使用的空间。Oracle主要是通过下面的两个参数对这部分空间进行管理的:

    * PCTFREE参数:指定块中必须保留的最小空闲空间比例。当块中的空闲存储空间减少到PCTFREE所设置的比例后,Oracle将块标记为不可用状态,新的数据行将不能被加入到这个块。

    * PCTUSED参数:制定一个百分比,当块中已经使用的存储空间降低到这个百分比以下时,这个块才被重新标记为可用状态。

注意:以上两个参数既可以在表空间级别进行设置,也可以在段级别进行设置。段级别的设置优先级更高。

区(Extent)

比块高一级的逻辑存储结构,由连续的块组成,它是oracle在进行存储空间的分配和回收的最小单位。在创建具有独立段结构的数据库对象时,例如表、索引等,Oracle会为数据库对象创建一个数据段,并为数据段分配一个‘初始区’。

后续区的分配方式,则根据表的空间管理办法不同,而采用不同的分配方式,例如autoextent,uniform size 或者在创建表或表空间时设置default storage 子句。

另外,用户还能够通过执行下面的命令来回收表、索引等对象中未使用的区:

SQL>alter table table_name deallocate unused;

段(Segment)

由多个区组成,这些区可以是连续的,也可以是不连续的。当用户在数据库中创建各种具有实际存储结构的对象时(保存有数据的对象),比如表、索引等,Oracle将为这些对象创建“段”。 一般一个对象只拥有一个段。

在创建段时,可以为它指定PCTFREE、PCTUSED等参数来控制其中的块的存储空间管理方式,也可以为它指定INITIAL、NEXT、PCTINCREASE等存储参数,以指定其中区的分配方式。如果没有为段指定这些参数,段将自动继承表空间的相应参数。

不同类型的数据库对象拥有不同类型的段:

  • 数据段:保存表中的记录。
  • 索引段:索引中的索引条目。
  • 临时段:在执行查询等操作时,Oracle可能会需要使用到一些临时存储空间,用于临时保存解析过的查询语句以及在排序过程中产生的临时数据。
  • 回滚段:保存回滚数据。

表空间(Tablespace)

最高级的逻辑存储结构,数据库是由多个表空间组成的。在创建数据库时会自动创建一些默认的表空间,例如 SYSTEM表空间,SYSAUX表空间等。通过使用表空间,Oracle将所有相关的逻辑结构和对象组合在一起。我们可以在表空间级别指定存储参数,也可以在段级别指定。

下面我们列出常见的表空间,和它们所存储的信息:

  • 数据表空间:用于存储用户数据的普通表空间。
  • 系统表空间:默认的表空间,用于保存数据字典(一组保存数据库自身信息的内部系统表和视图,及用于Oracle内部使用的其他一些对象),保存所有的PL/SQL程序的源代码和解析代码,包括存储过程和函数、包、数据库触发器等,保存数据库对象(表、视图、序列)的定义。
  • 回滚表空间:用于存放回滚段,每个实例最多只能使用一个回滚表空间。
  • 临时表空间:存储SQL执行过程中产生的临时数据。

最后,我们可以用下面的比喻来描述逻辑结构关系:

块 (一张张白纸) ---> 区(白纸组成的本子)---> 段(多个本子放到一个文件袋中)---> 表空间(存放多个文件袋的文件柜)

2.物理存储结构

Oracle数据库逻辑上由一个或多个表空间组成,每个表空间在物理上由一个或多个数据文件组成,而每个数据文件是由数据块构成的。所以,逻辑上数据存放在表空间中,而物理上存储在表空间所对应的数据文件中。我们可以用下图来描述数据文件和表空间的关系。



图 3 Oracle 逻辑存储结构和物理存储结构对应关系



图 4 Oracle 逻辑存储结构和物理存储结构对应关系

构成数据库的物理文件主要有三种:

  • 数据文件:存放数据库数据。
  • 控制文件:存放数据库的基本信息,告诉数据库到哪里找到数据文件和重做日志文件等。对数据库的成功启动和正常运行是很重要的。
  • 重做日志文件:存放对数据的改变。至少两组,Oracle以循环方式来使用它们。

更多内容请参考:《Oracle 体系结构详解》

Oracle 存储结构的更多相关文章

  1. oracle存储结构

    数据库的物理存储结构 select * from v$datafile; 数据库的逻辑存储结构,从表空间开始查起一个数据库对象的逻辑存储结构如下表空间-段-区-块 select * from dba_ ...

  2. Oracle 存储结构一

    了解块中表行数据的存储 Oracle数据存储模型 逻辑结构在左,物理结构在右 有一个关系使用虚线绘制,表示段与数据文件的多对多关系.之所以使用虚线表示关系,是因为这种多对多关系不应存在. 表空间实体消 ...

  3. Oracle存储结构-表空间

    表空间 oracle文件注意的问题 控制文件,redolog文件,数据文件----一定要放在存储上 问题:银行用户,集群切换失败,原因是数据库中部分的文件未放到存储上 存储三种组织形式:文件系统.AS ...

  4. Oracle 存储结构三

    Oracle数据库服务器自动管理空间的方法 段空间的分配 空间以区间的形式分配给段,区间是一组连续的Oracle块.每个数据文件都有一个位图,来描述文件中块的状态,块可能是空闲的,也可能是区间中已分配 ...

  5. Oracle 存储结构二

    创建和管理表空间 创建表空间 典型语句: CREATE SMALLFILE TABLESPACE "JWTS" DATAFILE '/u01/app/oracle/oradata/ ...

  6. Oracle存储结构-段区块

    段 一个段建立以后首先会分配一个区,区中包括含8个块,这时执行insert插入数据,当这个区写满后,会在分配一个区 1.一个段建立以后,Oracle如何给段分配区? 2.段分配到区以后,有了空闲空间, ...

  7. Oracle 逻辑存储结构

    一.总述 逻辑存储结构是 Oracle 数据库存储结构的核心内容,对 Oracle 数据库的所有操作都会涉及逻辑存储结构.逻辑存储结构是从逻辑的角度分析数据库的组成,是对数据存储结构在逻辑概念上的划分 ...

  8. 学习笔记:oracle学习一:oracle11g体系结构之体系结构概述和逻辑存储结构

    目录 1.oracle 11g体系结构概述 1.1 三个重要概念 1.2 oracle数据库存储结构 2 逻辑存储结构 2.1 数据块(Data Blocks) 2.2 数据区(Extent) 2.3 ...

  9. Oracle存储——逻辑结构

    Oracle 数存储——物理结构 Oracle存储结构:物理结构+逻辑结构 Oracle 数据库存储逻辑结构 Oracle Schema Objects(Schema Object Storage A ...

随机推荐

  1. COOP & COEP

    COOP & COEP Cross-Origin Opener Policy (COOP) and Cross-Origin Embedder Policy (COEP) https://de ...

  2. 「NGK每日快讯」12.2日NGK公链第29期官方快讯!

  3. JDK源码阅读-FileInputStream

    本文转载自JDK源码阅读-FileInputStream 导语 FileIntputStream用于打开一个文件并获取输入流. 打开文件 我们来看看FileIntputStream打开文件时,做了什么 ...

  4. 5G组网方案:NSA和SA

    目录 5G组网的8个选项 独立组网(SA) 选项1 选项2 选项5 选项6 总结 非独立组网(NSA) 选项3系列 选项3 选项3a 选项3x 选项7系列 选项4系列 选项8 演进路线 5G组网的8个 ...

  5. 使用.net5 创建具有身份验证和授权的Blazor应用程序

     

  6. Python爬虫系统化学习(4)

    Python爬虫系统化学习(4) 在之前的学习过程中,我们学习了如何爬取页面,对页面进行解析并且提取我们需要的数据. 在通过解析得到我们想要的数据后,最重要的步骤就是保存数据. 一般的数据存储方式有两 ...

  7. LeetCode113. 路径总和 II

    原题链接 1 class Solution: 2 def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]: 3 ans,tm ...

  8. fastjson 反弹shell

    目录 如下文章说得很不详细,只是用于记录我的步骤,初次利用的人,建议找别的博客文章学习. 准备一台公网服务器 cd test python -m SimpleHTTPServer 8888 javac ...

  9. JS table排序

    <html lang="en"> <head> <meta charset="UTF-8"> <meta http-e ...

  10. python基础(8)python中is和==的区别详解

    前置知识点 当我们创建一个对象时,我们要知道它内部干了些什么 1.创建了一个随机id,开辟了一片内存地址 2.自动声明了这个对象的类型type 3.给这个对象赋值value 小例子 a = 1 pri ...