Oracle数据库体系结构(三)_逻辑结构
Oracle逻辑存储结构,主要描述oracle 数据库内部数据的组织和管理方式,即在数据库管理系统的层面中如何组织和管理数据,与操作系统没有关系。逻辑存储结构时候物理存储机构的抽象体现,是不可见的,可以通过查询数据库数据字典了解逻辑结构信息。
Oracle数据库的存储逻辑结构主要由表空间(Tasblespace)、段(Segment)、区(Extent)、数据块(Data Block)4个部分组成。其中块是最基本的存储单元,块组成区、区组成段、段组成表空间,最终由段组成数据库。
Oracle数据库逻辑结构图如下:

1 表空间
一个数据库被分成一个个的逻辑单元,那么这些逻辑单元就叫做"表空间"。表空间有一个或多个数据文件组成,一个数据库从逻辑上又由一个或多个表空间组成,它用于存放数据库对象,如:表、索引等。而表空间的大小则等于组成这个表空间的所有数据文件大小之和。
每个数据库都对应的默认表空间,包括一个系统表空间(SYSTEM)、辅助表空间(SYSAUX)、一个用户表空间(USERS)以及用于应用程序、索引和另外的数据结构的其他空间组成。
SYSTEM Tablespace:用于存储Oracle内部数据字典
SYSAUX Tablespace:用于存储辅助内部对象
USERS Tablespace:用于存储用户对象
2 段
数据库中的表在表空间中都由一块单独的磁盘空间区域,称之为段。每一段依次在表空间中有一块初始的磁盘空间区域,成为初始盘区。当段使用完对应的空间时,磁盘空间的另一个单独区域——下一盘区将被启用。如果这一块区域也被使用完,那么还有另一盘区被启用。这个过程会跟随每一个表持续执行,直到整个表空间填充满为止。
数据库中的表由一个或多个的段组成,而普通表由一个段组成,分区表则由多个段组成

一个段有一系列的区组成,段是存放数据的逻辑存储单元,段的分类包括:数据段、索引段、临时段和回滚段
#查询Oracle数据库段类型
SQL> select distinct segment_type from dba_segments;SEGMENT_TYPE
------------------
LOBINDEX
INDEX PARTITION
NESTED TABLE
TABLE PARTITION
ROLLBACK
LOB PARTITION
LOBSEGMENT
TABLE
INDEX
CLUSTER
TYPE2 UNDO
2.1 数据段
Data Segment。 数据段用于存放数据。可以存储普通表、聚簇表、分区表。
- 普通表(Table):这是最常见的段类型,普通表,没有分区,则每个表有一个类型为Table的段;
- 聚簇表(Cluster Table):每个Cluster有一个Cluster段,一个Cluster中可以存储一个或多个表;
- 分区表(Patition Table):分区表中的一个分区
2.2 索引段
Index Segment ,这是除了Table Segment之外最常见的段类型,表的普通索引,没有分区,则每个索引有一个类型为Index的段,用户可以使用Create Index语句为索引或索引的分区创建索引段。
- 非分区索引(nonpartitioned index)使用一个索引段(index segment)来容纳其数据;
- 分区索引(partitioned index),每个分区使用一个索引段来容纳其数据。
2.3 临时段
Temporary Segment,临时段用于存放临时数据。在进行数据查询时会使用到临时段。临时段由Oracle数据库自动创建和维护。例如,Oracle在进行数据排序时就需要使用临时段,当排序操作可以在内存中执行,或Oracle设法利用索引就执行时,就不必创建临时段。如果Oracle使用到数据库临时段时,则表示数据库性能在降低的征兆,数据库管理员则应想法时相关的数据操作尽量在内存中进行。需要使用临时段的操作:
- Create Iindex
- Select ... Order by
- Select Distinct ...
- Select ... group by
- Select . . . union
- Select ... Insersect
- Select ... Minus
2.4 回滚段
RollBack Segment,回滚段用于保存回滚条目,用户可以撤销对数据的修改,ROLLBACK (Oracle 8i及以前的回滚段 )和TYPE2 UNDO(9i及以后的“撤销段”)
3 区
区是数据库的一个逻辑存储单元,它由连续的数据块组成,区是一个连续的存储空间,当段中的空间耗尽时,数据库将分配一个新的区个这个段。块组成区,区组成段。
3.1区的分配
当数据库创建一个表时,Oracle会自动给该表的数据段分配一个初始区,即使该表中没有存储数据,也会分配。随着数据的插入,分配的初始区空间被填满时,Oracle会再分配一个区给这个数据段,后续新分配的区(非初始化区)叫做递增区,若一个递增区用完,Oracle再次进行分配新的。
3.2区的分配机制
Oracle利用表空间级的存储参数来进行空间的分配,关于存储参数的相关概念见下集分解。
3.3区的空间释放
通常,分配给一个段的区所占用的空间不会被释放,除非将这些段相关的的对象给删除。也可以通过以下方式回收分配的区空间
- Truncate Drop Storage:该命令会回收分配给一个段的区
- Alter Table ..... Deallocate UnUsed :该命令会回收已分配给一个段,但还未使用的区
3.4区的管理方式:
- 字典管理:Dictionary Managed Tablespace ,通过数据字典管理区
- 本地管理:Locally Managed Tablespace ,通过位图管理区。(推荐使用的区的管理方式)
4 数据块
块是Oracle的最小存储单位,数据存放到块中,一个块占用相应的存储空间。
Oracle在每次请求数据时,都是以块为单位,所以块是Oracle读写数据的最小单位或者最基本的单位。Oracle每一次数据请求都是块的整数倍,若请求数据量不足一块时,也会读取整个块。块的标准大小是由初始化参数DB_BLOCK_SIZE设置。
4.1 数据块的特征:
- 数据块 'block' 是 Oracle '最小的存储单元',也是 '最小的 I/O 单元'
- 有五种大小:2KB、4KB、8KB(默认)、16KB、32KB ,必须是倍数增加
- 不可更改,除非重新创建数据库
4.2 数据块的常用命令
- 数据块大小:show parameter db_block_size ; 8192 = 8 * 1024
- 缓存大小 : show parameter db_cache_size;
- 一次从物理文件中读取数据块的数量 show parameter db_file_multiblock_read_count;
- 找到转储的文件(命令行):show parameter dump;
SQL> show parameter db_block_size ;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
SQL> show parameter db_cache_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_cache_size big integer 0SQL> show parameter db_file_multiblock_read_count;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count integer 128SQL> show parameter dump;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_core_dump string partial
background_dump_dest string f:\app\diag\rdbms\lsxddb\lsxddb\trace
core_dump_dest string f:\app\diag\rdbms\lsxddb\lsxddb\cdump
max_dump_file_size string unlimited
shadow_core_dump string none
user_dump_dest string f:\app\diag\rdbms\lsxddb\lsxddb\traceSQL>
4.3 数据块的格式
块中存放的数据和索引,无论是那种类型的数据,块的格式都是相同的,块的组成包括:块头、表目录、行目录、空余空间和行数据五部分组成,如下图

- 头部信息区(Overhead):通常块头、表目录、行目录这三部分合称为头部信息区,它不存放数据,存放的是整个块的信息。头部信息区的大小是可变的,一般来说其大小介于84字节到107字节之间。
- 块头(Header):存放块的基本信息,如块的物理地址、块所属的段的类型(属于数据段还是索引段)
- 表目录(Table Directoy):存放表的信息,若一些表是数据被存放在这个块中,那边该表的相关信息将被存放在"表目录"中
- 行目录(Row Directory):若块中有行数据存在,则这些行的信息被记录在行目录中,包括行的地址等
- 行数据(Row Data):真正存放表数据和索引数据的地方,这部分空间是已被数据行占用的空间
- 空余空间(Free Space):也称为自由空间,是一个块中为使用的区域,这些区域用于新行的插入和已经存在的行的更新
4.4 自由空间的使用
当往数据中Insert数据时块中的自由空间会减少;当对块中已经存在的行进行update进行数据修改(数据长度增加)时块的自由空间也会减少。 当使用delete语句删除块中的记录或者使用update语句把列的现有值更改成一个更小值的时候,Oracle会释放出一部分自由空间,但释放的自由空间不一定是连续的。由于合并数据块中不连续的自由空间会影响数据库的性能,所以在通常情况下,Oracle不会对不连续的自由空间进行合并。只有当insert或update取找不到连续的自由空间的时候,Oracle才会自动合并数据块中不联系的自由空间。
4.5 行衔接和行迁移:
当insert或update值超出了自由空间的大小则会发生行迁移或者行衔接。
- 行衔接(Row Chaining):若在往数据库中插入一行数据,数据很大(或行太长)以至于一个数据块无法存下整行数据,Oracle就会把一行数据分作几段存在几个数据块中,这个过程就叫做行衔接。在这种情况下,oracle会先把自由空间使用与该块链接的一块或多块数据块来容纳该行的数据。行衔接经常在插入比较大的行时才会发生,如包含long, long row, lob等类型的数据。在这些情况下行链接是不可避免的。导致了在一次读取过程中要读取多个数据块,引起I/O性能下降。

- 行迁移(Row Migrating):当update后的行长度大于修改前的行长度,并且该数据块中的自由空间已经比较小而不能完全容纳该行的数据时,就会发生行迁移。在这种情况下,Oracle会将整行的数据迁移到一个新的数据块上,而将该行原先的空间只放一个指针,指向该行的新的位置,注意,即使发生了行迁移,发生了行迁移的行的rowid 还是不会变化,这也是行迁移会引起数据库I/O性能降低的原因。

4.6 自由空间的自动管理
使用位图来管理和跟踪数据块,这种块的空间管理方式称之为"自动管理",其好处有
- 易于使用
- 可以更好地利于空间
- 可以对空间进行实时调整
4.7 自由空间的手动管理
数据库用户可以通过Pctfree、Pctused来调整块中空间的使用,这种管理方式称之为"手动管理",手动管理的缺点:不容易掌握、容易造成块中空间的浪费
- Pctfree:参数用于指定块中必须保留的最小空闲空间百分例。之所以要预留这样的空间,是因为update时,需要这些空间。如果update时,没有空余空间,Oracle就会分配一个新的块,这会产生行迁移(Row Migrating)。Select table_name,pct_free fromuser_tables
- Pctused:也是用于设置一个百分比,当块中已使用的空间的比例小于这个百分比的时候,这个块才被标识为有效状态。只有有效的块才被允许插入数据。
相关文章:
Oracle数据库体系结构(三)_逻辑结构
Oracle逻辑存储结构,主要描述oracle 数据库内部数据的组织和管理方式,即在数据库管理系统的层面中如何组织和管理数据,与操作系统没有关系。逻辑存储结构时候物理存储机构的抽象体现,是不可见的,可以通过查询数据库数据字典了解逻…...
在 Python 中计算两个 GPS 点之间的距离
计算两个 GPS 点之间的距离是我们可以在 Python 框架内操作的地理和数学练习。 现在让我们看看如何使用 Python 执行此操作。 在 Python 中使用 Haversine 公式计算两个 GPS 点之间的距离 haversine 公式是用 Python 计算两个 GPS 点之间距离的一种简化方法,但它的计算是基于…...
影刀RPA解决WPS不存在的问题
问题阐述 明明电脑上已经安装了WPS,但影刀程序还是提示没有安装的问题 解决办法 1.打开WPS并关闭所有其他网页 2. 配置与修复 3.开始修复 出现这个框,就要关闭WPS,否则无法执行,关闭WPS不影响其修复 4.等待修复完成即可...
vue动态路由切换刷新保留历史路由搜索条件数据
最近有客户反映我们系统按条件查询完列表进入详情页后再返回列表页时页面没有展示他查询的那条数据,而是进入页面一贯会展示按无条件查询的数据,希望我们能对列表做查询缓存,那咱们就用keep-alive来实现一下 AppMain.vue include 属性绑定一个…...
免费:CAD批量转PDF工具,附下载地址
分享一款CAD 批量转PDF、打印的工具插件。能自动识别图框大小、自动识别比例、自动编号命名。重点!重点!重点!自动将CAD的多张图纸一次性地、批量地转为PDF,或者打印。效果看下图: 适用环境: 32位系统 Auto…...
无涯教程-JavaScript - FACT函数
描述 The FACT function returns the factorial of a number. The factorial of a number is equal to 1*2*3*...* number. 语法 FACT (number)争论 Argument描述Required/OptionalNumberThe nonnegative number for which you want the f…...
UART 协议
文章目录 电气层硬件拓扑基本原理协议空闲位起始位数据位奇偶校验位无校验奇校验偶校验mark parityparity 停止位 波特率优缺点优点缺点 参考 UART(universal asynchronous receiver-transmitter) 通用异步收发器 分类特点导线2速度9600, 19200, 38400&…...
MySql中分割字符串
MySql中分割字符串 在MySql中分割字符串可以用到SUBSTRING_INDEX(str, delim, count) 参数解说 解释 str 需要拆分的字符串 delim 分隔符,通过某字符进行拆分 count 当 count 为正数&…...
Ubuntu 22.04安装过程
iso下载地址 Ubuntu Releases 1.进入引导菜单 选择Try or Install Ubuntu Server安装 2.选择安装语言 默认选择English 3.选择键盘布局 默认即可 4.选择安装服务器版本 最小化安装 5.配置网络 选择ipv4 选择自定义 DHCP也可 6.配置代理 有需要可以配置 这里跳过 7.软件源 …...
【算法|虚拟头节点|链表】移除链表元素
Leetcode203 移除链表元素 题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出…...
express静态路由匹配引发的404错误
最近有一个react项目,我用webpack打包,然后使用express作为webserver跑起来。 但是在运行的时候,就白屏了,看console原来是报了404错误 可是代码里面明明有路由定义,为什么还是报404错误呢? app.get("…...
VHOST-SCSI代码分析(4)VHOST KICK机制
在VIRTIO框架中虚拟机通知QEMU数据准备好是通过操作MMIO,在KVM中将操作分发到QEMU中,由QEMU中模拟对应的MMIO操作(图中红色部分)。 VHOST框架虚拟机通知HOST内核数据准备好也是通过MMIO操作,但在函数vhost_dev_enable_…...
Docker Volume(存储卷)
文章目录 Docker Volume(存储卷)1.什么是存储卷?2.为什么需要存储卷?3. 存储卷的分类1) 管理卷Volume方式一:Volume命令操作方式二: -v 或者--mount 指定方式三: Dockerfile 匿名卷小结Docker 卷生命周期Docker 卷共享…...
【毕设选题】opencv 图像识别 指纹识别 - python
文章目录 0 前言1 课题背景2 效果展示3 具体实现3.1 图像对比过滤3.2 图像二值化3.3 图像侵蚀细化3.4 图像增强3.5 特征点检测 4 OpenCV5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往…...
阿里云无影云电脑使用初体验:真的好用吗?
阿里云无影云电脑即无影云桌面,云桌面如何使用?云桌面购买后没有用户名和密码,先创建用户设置密码,才可以登录连接到云桌面。云桌面想要访问公网还需要开通互联网访问功能。阿里云百科来详细说下阿里云无影云电脑从购买、创建用户…...
无涯教程-JavaScript - FLOOR.MATH函数
描述 FLOOR.MATH函数将数字四舍五入到最接近的整数或最接近的有效倍数。 语法 FLOOR.MATH (number, significance, mode)争论 Argument描述Required/OptionalNumberThe number to be rounded down.RequiredSignificanceThe multiple to which you want to round.OptionalMo…...
Dubbo3基础使用
1、Dubbo概述 现在SpringCloud Alibaba比较火,用的比较多是吧,那dubbo是不是过时的呢? 并不是的,以前有人把Dubbo和SpringCloud进行对比,其实两者是不同维度的,不能对比,dubbo就是一个rpc框架&…...
Android 图片加载框架Glide源码详解
我们看Glide的源码从Glide类入手,使用的时候我们先调用的with方法,源码中with有3个多载的方法:下图翻译过来就是activity用FragmentActivity Applicationcontext用 with(Context)还有一个with(View)的 殊途…...
知识竞赛活动舞台搭建需要多少钱
知识竞赛活动舞台搭建的费用会根据不同的竞赛活动规模和要求而有所不同。对于小型的知识竞赛活动,如学校内部组织的知识竞赛或社区的知识竞赛活动,舞台搭建的费用往往相对较低。在这种情况下,可能只需要一些简单的装饰和道具,例如…...
07set注入级联属性和特殊字符及表达式语言
级联属性赋值(了解) 概述 级联属性赋值就是给某个对象属性的属性赋值,就是给对象关联的对象的属性赋值 Clazz班级类 public class Clazz {private String name;public Clazz() {}public Clazz(String name) {this.name name;}//set和get方法以及toString方法 }Student有cl…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
