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…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
