ORACLE逻辑存储结构
块: 数据块 他是最基础的逻辑存储单元,数据以行的形式存储到我么的数据块中

区 :多个块的集合 并且区组成了物理的数据文件

段 :(表 索引 物化视图 物化视图日志 大对象 大对象) 那么在括号中的每一个对象都是一个段。而区由组成了段[逻辑的方式] 一个段中包含多个数据文件

表空间 :表空间指的是段的集合 一个表空间中存在多个段的是 (小表空间) 但是有种特殊的表空间叫(大表空间) 比如说 BLOB CLOB BFILE.....这些都是大表空间中存储的数据,并且大表空间只能有一个文件。

BLOB 主要存视频 图片 。。。。。一般是不大于4G。
CLOB 主要是存文字、xml代码块等 。像我们博客大篇的文字都是用clob类型。
BFILE主要是是使用了 物理+数据库两种方式进行存储 物理的文件存在磁盘空间中 而 这个文件的路径 存储都数据库的表中。

我们现在存储大文件都是用redis进行存储,备份的用rman备份,但是我老师过备份现在都不用rman备份,都是用存储备份。

表、索引和段与表空间的对应于使用关系
我们在创建表和创建索引的过程中,实际上就是在建立一个段。而这个段他会根据你表中列的相关类型发生变化。比如说:
CREATE TABLE TAB_T (ID CHAR(18),NAME VARCHAR2(100),MEMBER CLOB,IMAGE BLOB);
根据分析我们可以得出,这里如果不看相关表中字段数据类型的话,实际上他只应该创建一个段,并且使用的是小表空间类型,但是这里有两个字段MEMBER和IMAGE使用的是大对象数据类型,所以要为这两个字段,单独创建一个大表空间,并且相关的类型有自己对应段。并且也要为这两个字段(member和image)创建独立的索引。这两个大对象的索引有是段结构,所以一个大对象创建后会创建出两个段来,一个是自身的大对象数据段,一个是大对象索引段。
如果这里我们要把ID这个字段变成主键的话,那么这个ID字段也要创建出一个对应的索引段。而这个索引段应该存储到小表空间类型中,他可以和TBA_T的这个表在一个表空间中,也可以不和这个表在一个表空间中,因为数据段尽量不要和索引段放在一起,放置IO争抢问题。

数据块和UNDO块之间的关系
当我们数据块中的一行数据发生UPDATE的时候,首先我们数据块ITL会去记录相关事务的事务编号,以及事务状态和事务产生的老数据保存的UNDO的块的信息,并且这些都是又UNDO段中的事务表同步给UNDO块的。

一个UNDO块只能被一个事务使用,但是一个事务可能使用多个UNDO块

行迁移

发生在update,当一个数块在做UPDATE操作的时候,无法容纳新数据(delete后 insert进来的),他会将数据写到一个新的数据块中,并且ROWID不发生任何改变依旧是一个。我们管这种情况叫做行迁移

行链接

当一个数据块在做INSERT操作的时候,无法容纳新数据时,他会将数据写到另一个数据块中,并且会把相关的数据指针指向到数据结尾(另一个块开头的位置)这样就会发生行链接,只有一个ROWID编号。

无论是行迁移还是行连接,都不会影响事务一致性,但是却会影响事务的IO.因为无形之中我们在读一行数据的时候,本来应该读一个块,结果变成了读两个块,甚至是多个块,而且这里大家要记住,不只是数据块会发生行迁移或者行连接,我们的UNDO块依旧会发生。

HWM(高水位线):当我们的段接近不可写状态,我们称之为高水位线,一般到80%时开始预警,90%严重警告,或直接导致段拒写。

UNDO的几种状态
FREE 代表UNDO表空间中有足够的空间来记录相关的事务。我们称之为FREE状态

commit前状态:

active状态 事务未提交的状态,我们称之为active状态,这个状态UNDO表空间的UNDO块是不允许被再使用的。

commit后状态:

inactive状态 事务过期激活状态,这种状态是事务提交后,UNDO块中的数据没有超过预设的retention时间,所以我门称之为inactive状态。这时候undo块中的数据依旧是不可以再次被使用的。

expired状态 事务提交后,并且过retention时间的UNDO数据,那么这个数据块可以被重新使用。

UNDO的重要参数指标:
UNDO表空间的位置:在我们的ORACLE数据库中,一个实例只能使用一个UNDO表空间。
UNDO的retenion时间:指的时事务提交后我们的undo数据可以保留的事件,一般是900秒
guarantee 保证所有的UNDO数据块中的数据都不过retention时间。

经典面试题:
UNDO表空间不释放出了啥事?
1 retention时间过长
2 事务并没有大量提交,依旧处在锁的状态
3 UNDO表空间开了自增,不停的有FREE空间给新生事务使用

UNDO表空间使用算法
UNDO表空间优先使用FREE空间
当FREE空间不够用的时候,开始使用EXPIRED状态的UNDO块
当EXPIRED状态的块也不够用的时候,他就要等待INACTIVE的UNDO块过retention时间,变成EXPIRED的UNDO块后接着使用
如果一直不提交,那么就一直没有INACTIVE,一直没有INACTIVE就一直没有expireed。(这个就和lru算法一样,循环利用)

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

  1. oracle逻辑存储结构

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

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

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

  3. InnoDB 逻辑存储结构

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

  4. MySQL InnoDB 逻辑存储结构

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

  5. MYSQL Innodb逻辑存储结构

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

  6. InnoDB逻辑存储结构

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

  7. InnoDB存储引擎表的逻辑存储结构

    1.索引组织表:     在InnoDB存储引擎中,表都是依照主键顺序组织存放的.这样的存储方式的表称为索引组织表,在innodb存储引擎表中,每张表都有主键.假设创建的时候没有显式定义主键,则Inn ...

  8. Oracle 逻辑存储结构

    一.总述 逻辑存储结构是 Oracle 数据库存储结构的核心内容,对 Oracle 数据库的所有操作都会涉及逻辑存储结构.逻辑存储结构是从逻辑的角度分析数据库的组成,是对数据存储结构在逻辑概念上的划分 ...

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

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

随机推荐

  1. Alpha阶段中间产物提交入口

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9865 git地址:https://e.coding.net/Eustia ...

  2. Spring Boot 配置文件中使用变量、使用随机数

    参数引用 在application.properties中的各个参数之间可以直接通过是使用placeHolder的方式进行引用,如: book.author=Clark book.name=C++ b ...

  3. 信息管理java

    代码: package 信息管理;//信1805-1 20183763 凌云 public class ScoreInformation { private String stunumber = &q ...

  4. Java基础知识学习(一)--引用

    1.概念 如果一个变量的类型为类类型,而非基本类型,那么该变量就叫做引用:   2.对象引用 new Person(); 如上,代表创建了一个对象,但也仅仅是创建了,并没有办法去访问它.   为了访问 ...

  5. Django常用字段及参数、事务、数据库查询优化

    常用字段 注意: Django中没有设置对应char类型的字段,但可以支持自己定义. 自定义对应于数据库的char类型字段: from django.db.models import Field cl ...

  6. Qt 下QMessageBox下中文乱码问题

    Qt版本 Qt Creator 2.4.1 Based on Qt 4.8.0 (64 bit) 现象 QMessageBox调用setText()一直是乱码 解决方法 QTextCodec::set ...

  7. Go中锁的那些姿势,估计你不知道

    什么是锁,为什么使用锁 用俗语来说,锁意味着一种保护,对资源的一种保护,在程序员眼中,这个资源可以是一个变量,一个代码片段,一条记录,一张数据库表等等. 就跟小孩需要保护一样,不保护的话小孩会收到伤害 ...

  8. 【转】利用Eclipse编辑中文资源文件(application_zh_CN.properties )

    既然生为中国人,就没有什么好抱怨的了,遇到编码的问题,那只有解决它了. 如果经常使用Struts,并做过国际化操作的人来说,对于中文资源文件的处理应该不会感到陌生的.比如下面两个文件,一个是英文的,一 ...

  9. mongodb学习(二)——基本的数据操作

    数据操作(重点) 数据库的核心--CRUD,增加和删除较为简单,查询和修改较复杂 查询 关系运算符 $gt 大于 $lt 小于 $gte 大于等于 $lte 小于等于 $eq | (key: valu ...

  10. 题解 LA3720

    题目大意 多组数据,每组数据给定两个整数 \(n,m\),请求出 \(n\times m\) 的点阵(即 \((n-1)\times(m-1)\) 的方格)中有多少条非水平竖直的经过至少两个格点的不同 ...