一、总述

  逻辑存储结构是 Oracle 数据库存储结构的核心内容,对 Oracle 数据库的所有操作都会涉及逻辑存储结构。逻辑存储结构是从逻辑的角度分析数据库的组成,是对数据存储结构在逻辑概念上的划分。Oracle 的逻辑存储结构是一中层次结构,主要由表空间、段、区间和数据块等概念组成。逻辑结构是面向用户的,当用户使用 Oracle数据库时,使用的就是逻辑存储结构。Oracle 的逻辑存储结构中所包含的多个结构对象从数据库到表空间形成了不同层次的粒度关系。

  

  Oracle 数据由多个表空间组成(数据库自身也属于逻辑概念),表空间又由多个段组成,段由多个数据区组成,数据区又由多个数据块组成。

  

 二、数据块(Data Blocks)

  数据块是 Oracle 逻辑存储结构中最小的逻辑单位,也是执行数据库输入输出操作的最小存储单位。通常 Oracle 数据块是操作系统块的整数倍。 Oracle 数据块有一定的标准大小,其大小被写入到初始化参数DB_BLOCK_SIZE中,另外,Oracle 支持在一个数据库中使用多种大小的块,与标准块大小不同的是非标准块。

  数据块中可以存放表数据、索引数据和簇数据等,无论存放那种类型的数据,其结构都是相同的,都是由块头、表目录、行目录、空余空间和行数据这5部分组成。

  a、块头:存放数据块的基本信息,如块的物理地址、块所属的段的类型。

  b、表目录:存放表的相关信息。若数据块中存储的数据时表数据,则表目录中存储有关这些表的相关信息。

  c、行目录:如果块中有行数据存在,则这些行的信息被记录在行目录中,包括行的地址等。

  d、空余空间:空余空间是一个块中未使用的区域,这片区域用于新行的插入和已经存在的行的更新。

  e、行数据:用于存放表数据和索引数据的地方,这部分空间已被数据行所占用(如表中的若干行数据记录)

  通常把块头、表目录、行目录这3部分组合起来称为头部信息区,头部信息区不存放数据,存放整个块的引导信息,起到引导系统读取数据的作用。假如头信息遭到破坏,则 Oracle 系统无法读取这部分数据。空余空间和行数据共同构成块的存储区,用于存放真正的数据记录。

 三、数据区(Extent)

  数据区(数据扩展区)是由一组连续的 Oracle 数据块所构成的 Oracle 存储结构,一个或多个数据块组成一个数据区,一个或多个数据区再组成一个段。当一个段的所有空间被使用完后,Oracle系统将自动为该段分配一个新的数据区,可见数据区是 Oracle 存储分配的最小单位,Oracle 就以数据区为单位进行存储控件的扩展。

  使用数据区的目的是用来保存特定数据类型的数据。数据区是表中数据增长的基本单位,在 Oracle 数据库中,分配存储控件就是以数据区为单位的。一个 Oracle 对象包含至少一个数据区。设置一个表或索引的存储参数包含设置它的数据区大小。

 四、段(Segment)

  段是由一个或多个数据区构成的,不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的数据对象,Oracle 也把这种占用空间的数据对象统一称为段。一个段只属于一个特定的数据对象,每当创建一个具有独立段的数据对象时, Oracle 将为它创建一个段。

  段是为特定的数据对象(如表、索引、回滚等)分配的一系列数据区。段内包含的数据区可以不连续,并且可以跨越多个文件,使用段的目的是用来保存特定对象。一个Oracle 数据库通常有以下4种类型的段:

  a、数据段:其中保存的是表中的数据记录。创建数据表时,Oracle 系统为表创建数据段。当表中的数据量增大时,数据段的也随着变大,数据段的增大过程就是向其添加新的数据区来实现的。创建一个表时,系统自动创建一个以该表的名字命名的数据段。

  b、索引段:索引段中包含了用于提供系统性能的索引。一旦建立索引,系统自动创建一个以该索引的名字命名的索引段。

  c、回滚段:Oracle 将修改前的旧值保存在回滚条目中,利用这些信息,可以撤销未提交的操作,以便为数据库提供读入一致性和回滚未提交的事务。当事务开始处理时,系统为之分配回滚段,回滚段可以动态创建和撤销,当然回滚段也可以自己手动创建。

  d、临时段:当执行创建索引、查询等操作时, Oracle 可能会使用一些临时存储空间,用于展示性地保存解析过的查询语句以及在排序过程中产生的临时数据。Oracle 系统将在专门用于存储临时数据的表空间中为操作分配临时段。

 五、表空间(TableSpace)

  Oracle 使用表空间将相关的逻辑结构(段,数据区等)组合在一起,表空间是数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚等数据对象,任何数据对象在创建时都必须被执行存储在某个表空间中。表空间与数据文件相对应,一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间;举例来说:表空间相当于操作系统中的文件夹,而数据文件就相当于文件夹中的文件。每个数据库至少有一个表空间(即system 表空间),表空间的大小等于所有属于它的数据文件大小的总和

  由于表空间在物理上包含操作系统的一个或多个数据文件,因此在表空间中创建的数据对象就存在两种情况:

  (1)若表空间只包含一个数据文件,则该表空间中的所有对象都存储在这个数据文件中。

  (2)若表空间包含多个数据文件,则Oracle 即可将数据对象存储在该表空间的任意一个数据文件中,也可将同一个数据对象中的数据分布在表空间的多个数据文件中。

  在创建数据库时,Oracle 系统会自动创建多个默认的表空间,这些表空间除了用于管理用户数据的表空间之外,还包括用于管理 Oracle 系统内部数据的表空间,下面列举了Oracle 11g默认创建的主要表空间:

  (1)system 表空间:系统表空间,用于存放Oracle 系统内部表和数据字典的数据,如表名,用户名等。

  (2)sysaux表空间:这个表空间是11g新增加的表空间,是随着数据库的创建而创建的,它充当system 的辅助表空间,降低了system 表空间的负荷,主要存储除数据字典以外的其他数据对象。

  (3)uodo表空间:撤销表空间,用于存储撤销信息的表空间。当用于对表进行修改时,Oracle 系统自动使用撤销表空间来临时存放修改前的旧数据,当所有的修改操作完成并提交后,Oracle 会根据系统设置的保留时间决定何时释放掉撤销表空间的部分空间。

  (4)users 表空间:用户表空间,可以在这个表空间中创建各种数据对象。

除了Oracle 系统默认的表空间外,用户可根据应用系统的实际情况及其所要存放的对象类型创建多个自定义的表空间,来区分用户数据与系统数据,应该把不用应用系统的数据存放在不同的表空间上,而不同的表空间文件应存放到不同的盘上,从而减少 I/O 冲突,提供应用系统的操作性能。

  

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

  1. oracle逻辑存储结构

    oracle数据库管理系统有三个重要的概念:实例.数据库.数据库服务器.oracle数据库的存储结构可以分为逻辑存储结构和物理存储结构.逻辑存储结构用于描绘Oracle内部组织和管理数据的方式,而物理 ...

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

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

  3. ORALCE逻辑存储结构

    ORACLE逻辑存储结构块: 数据块 他是最基础的逻辑存储单元,数据以行的形式存储到我么的数据块中 区 :多个块的集合 并且区组成了物理的数据文件 段 :(表 索引 物化视图 物化视图日志 大对象 大 ...

  4. ORACLE数据库存储结构简介(转)

    首先,oracle数据库的存储结构可以分为逻辑存储结构和物理存储结构,对于这两种存储结构,oracle是分别进行管理的.   逻辑存储结构:oracle内部的组织和管理数据的方式.  物理存储结构:o ...

  5. InnoDB的表类型,逻辑存储结构,物理存储结构

    表类型 对比Oracle支持的各种表类型,InnoDB存储引擎表更像是Oracle中的索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键,如果在创建 ...

  6. MYSQL Innodb逻辑存储结构

    转载于网络 这几天在读<MySQL技术内幕 InnoDB存储引擎>,对 Innodb逻辑存储结构有了些了解,顺便也记录一下: 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放 ...

  7. InnoDB 逻辑存储结构

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/80 如果创建表时没有显示的定义主键,mysql会按如下方式创建主 ...

  8. MySQL InnoDB 逻辑存储结构

    MySQL InnoDB 逻辑存储结构 从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间,而表空间由段(sengment).区(extent).页(page)组成.p ...

  9. InnoDB逻辑存储结构

    从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace).表空间又由段(segment).区(extent).页(page)组成.页在一些文档中 ...

随机推荐

  1. Android Studio 3.4 修改 .android 和.gradle缺省目录-windows7x64专业版环境。

    说明:缺省会在用户目录建立.android和.gradle目录.会挤满C盘.可以改变缺省目录. 改变.gradle目录路径示例,修改到D:\android目录,步骤: 1.建立d:\android目录 ...

  2. 使用CompletableFuture实现业务服务的异步调用实战代码

    假如我有一个订单相关的统计接口,需要返回3样数据:今日订单数.今日交易额.总交易额. 一般的我们的做法是串行调用3个函数,把调用返回的结果返回给调用者,这3次调用时串行执行的,如果每个调用耗时1秒的话 ...

  3. Eclipse笔记-sun.misc.BASE64Encoder找不到jar包的解决方法

    从SVN检出新项目,在Eclipse中报错如下: 转: Eclipse笔记-sun.misc.BASE64Encoder找不到jar包的解决方法 2018-01-04 00:36:20 雨临Lewis ...

  4. RabbitMQ安装后无法访问15672端口

    切换到RabbitMQ的安装目录 sbin 目录下执行: rabbitmq-plugins enable rabbitmq_management 即可打开管理界面. rabbitmq的web管理界面无 ...

  5. k8s记录-国内下载k8s组件镜像

    #!/bin/sh ### 版本信息 K8S_VERSION=v1.13.2 ETCD_VERSION=3.2.24 DASHBOARD_VERSION=v1.8.3 FLANNEL_VERSION= ...

  6. Centos7安装部署MongoDB教程

    安装方式: RPM包安装 安装步骤: 一.下载RPM包 下图是需要注意的事项.其一选择MongoDB的社区版本,默认是企业版本.其二,选中版本后,在下方会出现下载地址,直接复制下载即可  二.安装并查 ...

  7. 【问题】Could not locate PropertySource and the fail fast property is set, failing

    这是我遇到的问题 Could not locate PropertySource and the fail fast property is set, failing springcloud的其他服务 ...

  8. 前端与算法 leetcode 66. 加一

    目录 # 前端与算法 leetcode 66. 加一 题目描述 概要 提示 解析 解法一 解法二 算法 # 前端与算法 leetcode 66. 加一 题目描述 给定一个由整数组成的非空数组所表示的非 ...

  9. python 的技巧

    pi = 0 n = 100 for k in range(n): pi+=1/pow(16,k)*(\ #一行不够写或不易读时用\,则多行与一行一样 4/(8*k+1)-2/(8*k+4)-\ 1/ ...

  10. React 的高级用法(Children、Component、createElement、cloneElement)

    React.Children props.children 代表了所有的子节点. React.Children 用于处理 props.children 的 提供了几个方法 ( map ,foreach ...