最小单位的输入\输出

数据块由操作系统中的一个或多个块组成

数据库是表空间的基本单位 DB_BLOCK_SIZE

查看 Oracle 块的大小语句:

SQL> show parameter db_block_size

  

在早期的数据库中,Oracle 只支持一种数据块的大小。从 9i 版本支持了改变大小的设置。但也不是随便改动的,规定范围在 2KB 到 32KB 之间,必须是倍数增加的,也就是 2KB\4KB\8KB\16KB\32KB 五种大小。

需要注意的是,块大小的设置是在数据库创建时候设置的,一旦设置好是不可更改的。类似于我们磁盘的存储格式,FAT16、FAT32、NTFS.... ,要想改变存储格式只能数数据全部格式化掉。

数据块的结构

 

Header:数据块头,记录了一些控制信息,帮助 Oracle 定位这个块,块与块之间的串联信息。

Free Space:处于空闲状态的空间。

Data:已经写入数据的空间,数据存放的方式是自底网上,就像现实中的箱子。

Oracle 是如何管理存储的

High-Water Mark

 

对于一个新建立的表,表中包含很多数据块,water mark 原始指向表中的第一个数据块。 water mark 随着插入的数据“向前”移动。当把插入的数据删除掉一些,water mark 并不会“向后”移动。也就是 water mark 的位置表示历史的最高水位。 那么我们要想插入一些数据时,oralce 是按什么样的规则输选择插入位置呢?

 
 

Oracle 数据插入的时候,首先会先查找灰色部分的空间的,灰色部分表示就已经插入数据的块,但这些块并不是已经被完全占满了,有些或多或少的都会留下一些空间。如果插入一个很小的数据,灰色被占的数据块中可以完全插入的,就会被插在这一部分。

如果数据比较大,查找了所有被占用块都无法插入,那么将会选择“曾经”插入过数据的空白块进行插入,也就是上图浅灰色部分。

如果数据非常大,曾经插入数据的空白块都无法插入,那么只好动用从未被插入过数据的空白块进行插入。当然 water mark 也就会“向前”移动。

OK 下面就来具体分析,每个数据块,是否允许插入数据的规则。

 
 
 

pctfree:剩余空间的百分比小于等于此参数,停止插入数据

pctused:使用空间的百分比小于等于此参数,可以插入数据

freelist:可以插入数据的状态。

块头(数据块的头)不在百分比的范围内,当剩余空间大于20%的时候,那这个块就是纳入 freelist 中,当我要插入一条数据时,freelist 是会扫描这个块的,检查其它是否可以存放要插入的数据。当小于20%的时候,说明这个块已经满了,会从 freelist 中去掉,插入数据时不作为扫描的对象。

一个小于 20% 空闲的块会从 freelist 上摘除,那么一个块在什么情况下会被重新挂到 freelist 上呢?对于一个已经从 freelist 上摘除的块,可以能由于删除更新操作,其空间会得到释放,当占用空间小于 40% 时,也就是空闲空间大于 60% 时,这个块被有认为是空间的块又会被重现挂到 freelist 上。

Oracle数据块的更多相关文章

  1. [转]Oracle数据块体系的详细介绍

    数据块概述Oracle对数据库数据文件(datafile)中的存储空间进行管理的单位是数据块(data block).数据块是数据库中最小的(逻辑)数据单位.与数据块对应的,所有数据在操作系统级的最小 ...

  2. Oracle数据块损坏的恢复实例

    测试环境:11.2.0.4 1.构建数据块损坏的测试环境 2.有备份:常规恢复坏块 3.无备份:跳过坏块 1.构建数据块损坏的测试环境 1.1 创建测试表 --Create Table t_test ...

  3. oracle数据块核心剖析

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp57 数据块(Oracle Data Blocks),本文简称为" ...

  4. java.sql.SQLException: ORA-01578: ORACLE 数据块损坏问题解决办法

    错误信息: java.sql.SQLException: ORA-01578: ORACLE 数据块损坏 (文件号 17, 块号 315703) ORA-01110: 数据文件 17: 'D:\ORA ...

  5. Oracle数据块损坏篇之10231内部事件

    实验:某个分区数据块损坏,不完全恢复此分区表数据 背景:数据库没有有效备份,某个分区中有数据块损坏. 要求:最大限度恢复此分区数据. 环境:RHEL 6.4 + Oracle 11.2.0.4 1. ...

  6. ORACLE 数据块dump

    1. rdba(Tablespace relative database block address) 是相对数据块地址,是数据所在的地址,rdba可就是rowid 中rfile#+block#. 根 ...

  7. Oracle数据块深入分析总结

    http: 最近在研究块的内部结构,把文档简单整理了一下,和大家分享一下.该篇文章借助dump和BBED对数据 库内部结构进行了分析,最后附加了一个用BBED解决ORA-1200错误的小例子.在总结的 ...

  8. 使用BBED理解和修改Oracle数据块

    1.生成bbed list file文件: SQL> select file#||' '||name||' '||bytes from v$datafile; $ vim dbfile.txt ...

  9. Oracle 数据块损坏与恢复具体解释

    1.什么是块损坏: 所谓损坏的数据块,是指块没有採用可识别的 Oracle 格式,或者其内容在内部不一致. 通常情况下,损坏是由硬件故障或操作系统问题引起的.Oracle 数据库将损坏的块标识为&qu ...

  10. Oracle 数据块

    以emp表为例 SYS@ prod>select * from scott.emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ...

随机推荐

  1. LibreOffice/Calc:在表格中始终显示某列/某行

    本文适用于LibreOffice Calc 5.1.6.2 + Ubuntu 16.04,熊猫帮帮主@cnblogs 2018/3/5 编写表格时,我们常常使用表格最左侧的一列和最上方的一行作为序号列 ...

  2. noi.ac #534 猫

    题目链接:戳我 [问题描述] 有n座山,m只猫和p个工作人员.山从左往右编号为1∼n,山i和i−1之间的距离是di米. 有一天,猫都到山上去玩了:第i只猫会到山hi去,并一直玩到时间ti,之后就在那座 ...

  3. XOR Guessing

    ​ E. XOR Guessing 第一次做这种交互题,刚开始还看不懂,现在已经差不多可以理解了,清空缓存区用cout<<endl;即可,需要注意的是,如果用fflush(stdout)来 ...

  4. UCenter网站部署

    搭建LAMP环境部署UCenter LAMP环境: Linux+Apache+mysql+php  用来搭建动态网站或者服务器的开源软件 一.需要安装的软件 [root@tiandong ~]# yu ...

  5. MS11-080提权

    前提是你渗透进入了一台服务器 这是微软11年的第80个漏洞 每一个漏洞都有一个对应的kb(补丁) 这里我们直接在kali里面搜索 root@kali:~# searchsploit ms11- --- ...

  6. C++入门经典-例9.5-为具体类型的参数提供默认值

    1:默认模板参数是指类模板中由默认的数据类型作为参数的参数,在模板定义时,还可以为默认的数据类型声明,变量,并为变量赋值.代码如下: // 9.5.cpp : 定义控制台应用程序的入口点. #incl ...

  7. linux 下载jdk

    1.官方下载jdk的地方 jdk8下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...

  8. spring-jms,spring-boot-starter-activemq JmsTemplate 发送方式

    spring-jms,spring-boot-starter-activemq JmsTemplate 发送方式 背景: 原来我准备是setDefaultDestinationName 设置队列的名称 ...

  9. 【黑马JavaWeb】.1.2反射机制

    文章目录 反射:框架设计的灵魂 获取Class类对象的方式 学习视频:https://www.bilibili.com/video/av47886776?p=10 本来一万行的代码,使用框架以后简化到 ...

  10. 黑马lavarel教程---12、lavarel验证码

    黑马lavarel教程---12.lavarel验证码 一.总结 一句话总结: 用插件的时候仔细看插件的版本要求 1.lavarel安装验证码插件的时候,如果(可选)需要定义自己的配置,则需要生成配置 ...