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…...
用AI在小红书做早教启蒙,2个月涨粉11.7万,获赞10万的新流量玩法
本期是赤辰第29期AI项目教程,底部准备了9月粉丝福利,可以免费领取。母婴、教育一直以来是最不缺流量的两大“真香”赛道。那么AI时代下有怎样新流量红利和玩法?接下来就给大家拆解一个在小红书上做AI绘画启蒙早教资源变现的新玩法!…...
Recommender Systems in the Era of Large Language Models (LLMs)
本文是LLM系列文章,针对《Recommender Systems in the Era of Large Language Models (LLMs)》的翻译。 大语言模型时代的推荐系统 摘要1 引言2 相关工作3 基于LLM推荐系统的深度表示学习4 预训练和微调LLM用于推荐系统5 提示LLM用于推荐系统6 未来方向6.1 幻觉缓解…...
红心向阳 百鸟朝凤
背景 最近在玩 folium 模块,基于使用过程中的一些个人体验,对 folium 进行了二次封装,开源在 GpsAndMap.在使用的过程中,发现在地图上打图标是可以进行旋转的。遇到就发现了一些有意思的玩法。 隔海的相望 下面的代码在地图 厦…...
C语言自己实现一个memcpy函数
目录 按字节拷贝实现memcpy按4字节拷贝实现memcpyTips 在 C 语言中,我们可以自己实现 memcpy 函数来实现内存数据的拷贝操作。memcpy 函数用于将指定长度的数据从源地址复制到目标地址。 按字节拷贝实现memcpy #include <stdio.h>void* my_memcpy_byte(void*…...
C#教师考勤管理系统asp.net+sqlserver
3.3.1 员工部分 1:请假管理:包括填写请假条,提交申请,查看审批,审核请假等等。 2:考勤管理:针对具体的员工考勤的统计等管理。 3:个人资料管理:进行个人信息管理…...
Nginx代理配置详解
一、什么是代理 1、正向代理(forward proxy) 正向代理,简单的说就像是一个跳板,它隐藏了真实的请求客户端(IP),服务端不知道真实的客户端是谁,客户端请求的服务都由代理服务器来代替请求。 举个例子来说…...
DAG 的深度优先搜索标记
/**\ | DAG 的深度优先搜索标记 | INIT: edge[][] 邻接矩阵 ; pre[], post[], tag 全置 0; | CALL: dfstag(i, n); pre/post: 开始 / 结束时间 \**/ int edge[V][V], pre[V], post[V], tag; void dfstag( int cur, int n) { // vertex: 0 ~ n-1 pre[cur] tag; for…...
网络存储解决方案:选择与配置
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
java中BigDecimal除法运算指定小数点保留位数和取舍规则
java中使用BigDecimal进行相除运算时,为了避免抛出ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。最好指定小数点保留位数和取舍规则。 取舍规则 ROUND_CEILING: 舍位时向正无穷方向取值。即:向上取…...
车联网远程监控管理提升车辆调度效率,实现高效运营
随着智慧城市建设与物联网技术发展,车辆使用4G工业路由器网络实现车联网,并对车上视频监控、GPS定位以及温湿度传感器等信息进行数据采集和实时传输。这些数据的采集和监测将通过4G网络上传到管理平台,为车辆调度和运行效率的优化提供了有力的…...
深圳福田区房价多少钱一平米/北京seo业务员
前言 SQLite数据库由于其简单、灵活、轻量、开源,已经被越来越多的被应用到中小型应用中。甚至有人说,SQLite完全可以用来取代c语言中的文件读写操作。因此我最近编写有关遥感数据处理的程序的时候,也将SQLite引入进来,以提高数据…...
xydown wordpress/免费推广引流平台推荐
玩懂手机网资讯,如果你是一名代码爱好者,自由开源爱好者,你可能非常熟悉GitHub,在国内大部分用户和企业更喜欢使用码云Gitee,很多企业和个人的项目都放置在码云Gitee上面,进行协作开发,对于大部…...
南岗区城市管理与建设网站/网络优化工程师前景如何
微擎安装 域名配到文件夹就行,安装数据库,设置登录密码 安装模块 将下载的模块直接放入 项目/addons中, 运行项目,体统管理底下就有未安装应用安装就行,绑定的小程序可随意填写; 执行以上操作后…...
做网站的广告图片/百度广告投放平台叫什么
Example002 题目 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,请写出相应的入队列和出队列的算法。 分析 注意,这里的不设头指针的意思是不设定队头指针。 我们设 rear 为带头结点的循环链…...
电脑课做网站所需的软件/自己怎么做网站
前言: 在使用gitLab中时遇到一个问题,就是我在gitLab新建分支后,在本地切换分支不成功,遇到了这个问题,在大佬的博客的指点下,顺利解决这个问题,记录下我一步一步解决问题的过程,最后…...
备案上个人网站和企业网站的区别/学seo哪个培训好
OA实施方法论团队建设项目经理的人选要求是具备一定软件技术的、更强调非技术方面的顾问咨询、项目管理的综合素质很强的人才。有效控制项目质量、项目进度、带领团队成功完成项目实施,是九思软件项目经理的职责,而不是合同签订下来,派个会…...