Oracle 逻辑存储结构
一、总述
逻辑存储结构是 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 逻辑存储结构的更多相关文章
- oracle逻辑存储结构
oracle数据库管理系统有三个重要的概念:实例.数据库.数据库服务器.oracle数据库的存储结构可以分为逻辑存储结构和物理存储结构.逻辑存储结构用于描绘Oracle内部组织和管理数据的方式,而物理 ...
- 学习笔记:oracle学习一:oracle11g体系结构之体系结构概述和逻辑存储结构
目录 1.oracle 11g体系结构概述 1.1 三个重要概念 1.2 oracle数据库存储结构 2 逻辑存储结构 2.1 数据块(Data Blocks) 2.2 数据区(Extent) 2.3 ...
- ORALCE逻辑存储结构
ORACLE逻辑存储结构块: 数据块 他是最基础的逻辑存储单元,数据以行的形式存储到我么的数据块中 区 :多个块的集合 并且区组成了物理的数据文件 段 :(表 索引 物化视图 物化视图日志 大对象 大 ...
- ORACLE数据库存储结构简介(转)
首先,oracle数据库的存储结构可以分为逻辑存储结构和物理存储结构,对于这两种存储结构,oracle是分别进行管理的. 逻辑存储结构:oracle内部的组织和管理数据的方式. 物理存储结构:o ...
- InnoDB的表类型,逻辑存储结构,物理存储结构
表类型 对比Oracle支持的各种表类型,InnoDB存储引擎表更像是Oracle中的索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键,如果在创建 ...
- MYSQL Innodb逻辑存储结构
转载于网络 这几天在读<MySQL技术内幕 InnoDB存储引擎>,对 Innodb逻辑存储结构有了些了解,顺便也记录一下: 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放 ...
- InnoDB 逻辑存储结构
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/80 如果创建表时没有显示的定义主键,mysql会按如下方式创建主 ...
- MySQL InnoDB 逻辑存储结构
MySQL InnoDB 逻辑存储结构 从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑地存放在一个空间内,称为表空间,而表空间由段(sengment).区(extent).页(page)组成.p ...
- InnoDB逻辑存储结构
从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace).表空间又由段(segment).区(extent).页(page)组成.页在一些文档中 ...
随机推荐
- jdk 6-13最有价值新特性总结
355: Text Blocks (Preview) JDK 13的特性.简化了大段文本的换行,例如sql或xml段. Shenandoah GC. jdk 12作为实验特性引入. JEP330-启动 ...
- 【转】Python查找某文件夹下的所有excel文件
# -*- coding: utf-8 -*- # author:baoshan import os dirname = r'D:\0.shenma\01.聊城资料\01.数据资料\02.聊城年鉴数据 ...
- (转)2019年 React 新手学习指南 – 从 React 学习线路图说开去
原文:https://www.html.cn/archives/10111 注:本文根据 React 开发者学习线路图(2018) 结构编写了很多新手如何学习 React 的建议.2019 年有标题党 ...
- Chrome禁用software_reporter_tool
今天开机后,从几分钟到半个小时之间,感觉机器反应有些慢,发现CPU占用80-90%.查看任务管理器, 有一个 software_reporter_tool.exe 的程序占用了一半的CPU使用率. 转 ...
- FineReport简单部署
一.部署方式 1.官网发布包部署 2.自定义tomcat部署 二.发布包部署 1.下载一个发布包:https://www.finereport.com/product/download 解压后打开bi ...
- winform调用webservice假死怎么解决
主线程调用外部web service,没有返回时,主线程阻塞了,界面肯定假死耗时操作都是要在工作线程里面执行的.一般情况下winform调用webservice时步骤1添加服务引用---高级----添 ...
- 一款新的好用的SSH工具——FinalShell
FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功能:免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网穿 ...
- 【整理】【docker】【Linux】整理笔记
1.Linux安装docker 参考文章:https://blog.csdn.net/yanpenglei/article/details/78944553 Docker 要求系统的内核版本高于 3. ...
- Python Number(数字)
Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象将被创建: A ...
- Golang-使用mysql
一.安装mysql-driver驱动 go get github.com/go-sql-driver/mysql 二.安装完毕之后,就可以通过go语言操作mysql了 const ( _selectU ...