深入解析Oracle数据块的内部结构

Oracle 数据块详解(block) 文章目录 1 概述2 组成3 示例附件 - 数据块结构信息 1 概述 1. 作用 (1) 屏蔽了不同 '操作系统(Windows、Linux、Unix)的差异',全部数据操作采用对 Oracle 块的操作 2. 特性 (1) 数据块 'block' 是 Oracle '最小的存储单元',也是 '最小的 I/O 单元' (2) 目前有五种大小:2KB、4KB、8KB(默认)、16KB、32KB -- 必须是倍数增加 (3) 不可更改,除非重新创建数据库 .. 阅读详情

访问www.tomcoding.com网站,学习Oracle内部数据结构,详细文档说明,下载Oracle的exp/imp,DUL,logminer,ASM工具的源代码,学习高技术含量的内容。

在Oracle数据库的存储体系中,数据块是整个体系的最小逻辑单元,也是I/O操作的基本单位。理解数据块的内部结构,不仅能够帮助DBA排查数据损坏、空间分配异常等底层问题,更能让开发者从根本上优化数据库的存储与访问性能。

Oracle数据块是分层结构,从上到下依次是块头,事务固定层,事务可变层,数据头层,表目录层,行目录层,空闲空间,行数据层和块尾。我们从上到下来分析各个层的结构。

1. 块头(Block Header)

块头是数据块最外层的元数据区域,存储整个块的基础控制信息,主要用于在SGA的缓存中识别不同的数据块。包含数据块的类型,数据块的地址(RDBA),块的系统改变号(SCN)和块的校验和等内容。一个块头的dump信息如下。

buffer tsn: 9 rdba: 0x02000087 (8/135)
scn: 0x0000.003f2481 seq: 0x01 flg: 0x06 tail: 0x24810601
frmt: 0x02 chkval: 0x70f9 type: 0x06=trans data

2. 事务固定层(Tansaction Layer Fixed)

这一次包含了块的事务信息中的固定部分,包含了段内的对象ID(segment object id),事务槽的个数,管理这个块的块地址(BDBA),块内的数据类型等。这部分的dump信息如下。

Block header dump:  0x02000087
 Object id on Block? Y
 seg/obj: 0x1338d  csc: 0x00.3f2480  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x2000080 ver: 0x01 opc: 0
     inc: 0  exflg: 0
其中事务槽的个数叫做itc,在这里是2,这个值决定了事务可变层中ITL的个数。

3. 事务可变层(Transaction Layer Variable)

这一层就是ITL(Interested Transaction List):也叫事务槽,每个槽位占用24字节,记录当前块上所有未提交事务的信息,用于实现多版本并发控制与行锁管理,ITL的个数在上一次中,由itc变量控制。事务槽的dump信息如下。

 Itl           Xid                                  Uba                       Flag  Lck        Scn/Fsc
0x01   0x0009.01c.00000d6b  0x00c010d0.0309.2c  --U-    1  fsc 0x0000.003f2481
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

4. 数据头层(Data Header Layer)

数据头是定义块中数据信息的结构,比如块中包含了多少个表的数据(ntab),块中一共包含了多少条数据(nrow),数据空闲空间的偏移量(fsbo),总共的空闲空间大小(tosp)等等。数据头的dump信息如下。

data_block_dump,data header at 0x2b57aace6a64
===============
tsiz: 0x1f98
hsiz: 0x14
pbl: 0x2b57aace6a64
     76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x1f4c
avsp=0x1f38
tosp=0x1f38
 

5. 表目录层(Table Directory Layer)

这是一个数组结构,数据块中包含了几个表的数据,这个数组就有几个元素,普通表的数据块中只包含一个表,所有这里只有一个数组元素,Cluster表的数据块中可能包含几个表的数据,所以就会有好几个数组元素,数组的下标就是表的编号。这个结构有两个字段,分别叫做nrow和offs,表示表在块中包含的数据条数和表数据在下面的行目录中开始的位置。它的dump信息如下。

0xe:pti[0]      nrow=1  offs=0

表示块中只有一个表的数据,数据条数是1,从行目录的第0个元素开始计算。

6. 行目录(Row Directory Layer)

行目录的结构比较简单,其实就是一个2字节的数组,每个数组元素中存放着一条记录的偏移量,叫做row offset,这个偏移量就是这行数据开始的位置,有多少条数据就有多少个数组元素。这个偏移量有一个相对地址,这个相对地址是数据头的基地址,这一点一定要搞清楚,因为很容易会把这个偏移量看做是相对于块头的地址。所以这个偏移量加上数据头的偏移量才是数据相对于块头的位置。行目录的dump信息如下。

0x1a:pri[0]     offs=0x1f80
0x1c:pri[1]     offs=0x1f74
0x1e:pri[2]     offs=0x1f64
0x20:pri[3]     offs=0x1f54
 

7. 空闲空间(Free Space)

行目录是从块头的方向往块尾增长的,每增加一行数据,行目录就增加一个元素。块中的数据是从块尾向块头的方向增长的,每增加一行数据,就向块头方向移动一段位置,所以在行目录和最后的数据行之间就有一段空间,这就是空闲空间,PCTFREE参数决定了空闲空间的大小。

8. 行数据层(Row Data Layer)

行数据位于块的底部,自下而上增长,是真正存储表中实际业务数据的区域。通常情况下一行数据在一个块中由一个数据片组成,在行链接的情况下单行数据可以跨多个数据块存储,由多个数据片组成,每个数据片在一个块中。每一个数据片的存储结构分为:行头(Row Header)和列数据。行头一般有三个字节,分别是fb,lb和cc。fb是数据片的标志,决定数据行由怎样的数据片组成。lb是锁标志,如果不为0,则表示这行数据对应着块中ITL的哪个槽位。cc则表示数据片中包含几列数据。列数据由数据长度和数据值组成,不同类型的列有不同格式的数据表示形式。数据行的dump信息如下。

tab 0, row 0, @0x1f4c
tl: 76 fb: --H-FL-- lb: 0x1  cc: 5
col  0: [ 2]  c1 02
col  1: [30]
 31 61 61 61 61 61 61 61 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
 20 20 20 20 20
col  2: [10]  31 62 62 62 62 62 62 62 62 62
col  3: [12]  31 63 63 63 63 63 63 63 63 63 63 63
col  4: [14]  31 64 64 64 64 64 64 64 64 64 64 64 64 64
 

9. 块尾(Block Tail)

数据块的块尾由4个字节组成,用于块的校验。在前面的块头dump信息中其实包含了块尾的信息。

buffer tsn: 9 rdba: 0x02000087 (8/135)
scn: 0x0000.003f2481 seq: 0x01 flg: 0x06 tail: 0x24810601
frmt: 0x02 chkval: 0x70f9 type: 0x06=trans data
 

oracle数据块(block)结构详解 NULL 博文链接:https://hbyuan.iteye.com/blog/850709 立即下载

相关推荐

SuperPoint+SuperGlue在HLoc中的实战效果对比:5大公开数据集测试报告

本文在HLoc框架下,对传统SIFT与深度学习组合SuperPoint+SuperGlue在五大公开数据集上的视觉定位效果进行了实战对比测试。报告详细分析了两种方案在Aachen Day-Night、RobotCar Seasons等不同光照、季节及场景下的表现,揭示了SuperPoint+SuperGlue在应对剧烈光照变化和长期外观变化时的显著优势,并提供了基于HLoc模块化设计的选型与配置策略。

weixin_29093169的博客 425

使用BBED帮助理解Oracle数据块结构

BBED是Oracle提供的块编辑器,借助BBED,可以帮助我们更好的理解Oracle的Block的结构。当然,反过来说,也只有更加理解块的结构,才能更好的利用BBED完成某些特殊情况下的灾难恢复。 Oracle Data Block的结构简图如下,其中从Data header到Row Data部分合称Data Layer: --------------------- - Cache Lay

heizistudio的专栏 878

三菱PLC通信库大比拼:手把手教你用C#实现最高效的McProtocol数据读写

本文深入比较了三菱PLC通信库的性能,重点介绍了如何使用C#高效实现McProtocol数据读写。通过实测数据对比HslCommunication、McProtocol-next和自定义方案的优劣,提供优化技巧和代码示例,帮助开发者在工业自动化场景中提升通信效率。

m0n1o2p的博客 254

oracle数据块详解

数据库的逻辑结构包括:数据块,区,段,表空间。 oracle数据块是oracle数据库存储基础,有磁盘空间的若干字节组成,数据块是oracle数据库的最小逻辑单元,可以定义数据块为2k、4k、8k、16k、32k甚至更大,默认oracle块大小是8k,通常我们称为oracle块。当然正常情况下oracle块应该是os块的整数倍,当然具有标准大小的块叫做标准块,和标准块不同的块叫做非标准块...

数据库天地 922

Kali Linux实战:5种局域网DoS攻击手法全解析(附防御方案)

本文以Kali Linux为平台,深入解析了局域网内五种典型的DoS攻击手法,包括TCP SYN Flood、ICMP Flood、MAC地址泛洪、DHCP耗尽以及应用层CC攻击模拟。通过实战演示结合Wireshark抓包分析,清晰揭示了攻击原理与流量特征,并提供了从主机加固、防火墙规则到交换机安全配置(如端口安全、DHCP Snooping)等企业级防御方案,旨在帮助安全人员构建纵深防御体系。

weixin_29313423的博客 396

Mediapipe手势识别实战——基于关节角度计算实现动态手势分类

本文详细介绍了如何利用Mediapipe进行手势识别,通过计算手指关节弯曲角度实现动态手势分类。文章从基础原理出发,讲解了关节角度计算的数学方法,并提供了Python实现代码。同时,还分享了数字手势和OK手势的识别实战经验,以及性能优化和工程实践中的关键技巧,帮助开发者快速掌握实时手势识别技术。

weixin_26891599的博客 402

oracle数据块内部结构详解

操作系统块是操作系统读写的最小操作单元,也是操作系统文件的属性之一。当创建一个Oracle数据库时,选择一个基于操作系统块的整数倍大小作为Oracle数据库块的大小。Oracle数据库读写操作则是以Oracle块为最小单位,而非操作系统块。数据库块也称逻辑块或Oracle块,它对应磁盘上一个或多个物理块,它的大小由初始化参数DB_BLOCK_SIZE决定,可以定义数据块为2K、4K、8K、16K、32K甚至更大,默认Oracle块大小是8K。

睡不醒的每天 1462

单细胞测序数据读取实战指南:从入门到精通

本文提供了单细胞测序数据读取的实战指南,涵盖从标准10X Genomics格式到通用表达矩阵及RDS文件的读取方法。文章重点解析了数据读取的核心步骤、常见问题解决方案及进阶技巧,旨在帮助用户夯实数据分析基础,确保后续分析流程的准确性。

weixin_29095587的博客 460

Oracle数据库存储结构:逻辑存储结构(一)

Oracle数据库存储结构:逻辑存储结构数据块(data blocks)区(extents)段(segments)表空间(tablespaces) 本文所讨论的内容涉及的数据库版本为 Oracle 19c。 数据块(data blocks) 区(extents) 段(segments) 表空间(tablespaces) ...

Sebastien23的博客 5594

开源的预测气象大模型与数据获取/可视化

「开源气象大模型与数据获取指南」摘要: 当前主流AI气象模型(如ECMWF的AIFS、DeepMind的GraphCast、华为Pangu等)主要基于ERA5/HRES数据训练。开源资源可通过ECMWF OpenData、GitHub仓库及Google Cloud获取,其中AIFS数据采用CCBY-4.0许可可商用,其他模型多有限制性许可。典型应用流程包括:1)通过Python包获取实时预报数据;2)加载预训练权重进行推理;3)使用xarray/cartopy或Zarr进行可视化。训练数据可从CDS下载ER

专注AI大模型,软件混淆,授权 792

Android系统开机时间分析与优化指南

本文系统阐述了Android开机时间优化的全流程技术方案。首先详细解析了从电源键按下到桌面显示的完整启动流程及关键事件序列,然后介绍了秒表计时、日志分析和自动化脚本三种测量方法。重点从底层和上层两个维度提出了具体优化措施:底层包括编译器优化、内核驱动裁剪和日志精简;上层涵盖系统服务参数调整、应用预优化和功能组件精简。最后提供了验证工具和方法,并强调优化需要在性能、功耗和功能间取得平衡。通过这套系统化方案,可有效提升Android设备的开机速度与用户体验。

学无止境 350

Oracle优化之数据块结构

1、基本组成 块头:存放一些基本信息,如物理位置,块所属的段类型(数据段、索引段、回滚段等) 表目录:如果块中存储的数据为表数据,则表目录中保存这个表的相关信息 行目录:如果块中存储的数据为表数据,则行目录中保存数据行的相关信息。 行记录:真正存放数据的区域,这部分空间已被使用。 自由空间:未使用的区域,用于新行的插入或者已经存在行的更新。 2、自由空间(free spac...

筷子的博客 902

QGis二次开发 —— 5.1、基于qgis开发雷达扫描、无人机飞行跟踪等(附:源码及工程)

基于qgis开发雷达扫描、无人机飞行跟踪等

322

微观世界的精密齿轮:深度解析Oracle数据块内部结构从块头到行目录的逐字节分析

【数据块是一栋单元楼,ITL是访客登记簿】单元楼的门牌号和物业办公室。记录着这栋楼的基本信息。访客登记簿。每个正在装修(修改数据)的业主(事务)都需要在登记簿上登记。登记簿的槽位有限(INITRANS),满了就得等。楼层房间号索引。快速找到每一户(每一行)住哪个房间。房间门口的“装修中”牌子。指向登记簿上的装修队伍编号(ITL槽号)。每户人家的实际物品。理解了数据块的内部结构,你就真正理解了Oracle的行级锁、一致性读和空间管理这三大核心机制的微观基础。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 523

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Oracle数据块内部结构

第二部分为可变长度,包含itl,长度根据itl条目的个数变化,每个itl长度为24字节,内部结构名ktbbhitl。BBED是Oracle提供的块编辑器,借助BBED,可以帮助我们更好的理解Oracle的Block的结构。当然,反过来说,也只有更加理解块的结构,才能更好的利用BBED完成某些特殊情况下的灾难恢复。Data Layer:包括Data Header,Table Directory,Row Directory,Free Space和Row Data。每个条目长4字节,内部数据结构名kdbt。

gaoda00136的博客 642

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【internal】oracle数据块解析

首先区分两组函数 dump('字符',1016) utl_raw.cast_to_raw('字符') utl_raw.cast_to_varchar2('十六进制编码') dump字符后为格式,分为8,10,16,分别表示其进制,如果加上1000,如1010,1016,1008则要显示字符集信息。 这组函数翻译raw类型和字符类型数据,默认是读取定长分割的十六进制数据。 对于GBK编码

践行见远 974

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

oracle数据块格式小结

Oracle数据块可分为三层 更细化 Cache layer--20字节,包含DBA、块类型、块格式、SCN;数据块被读取时进行完整性检查,确保没有损坏或fracture,即块更新信息只有部分被写入磁盘;Transaction layer 固定事务layer--块类型,最后一次块清除时间csc,ITL数量itc; 可变事务layer--包含ITL,每个24字节;Data laye...

sqlora的专栏 838

Oracle 数据块(Block)的内部结构与ITL槽管理

Oracle 数据块(Block)的内部结构与ITL槽管理

chenoracle的博客 1144

oracle dump 部分数据,5.oracle的dump理解五 數據塊理論

5.oracle的dump理解五 數據塊理論前兩篇描述了我們在操作層面看到的一些東西,但是沒有理論指導,看到越多我們只會越迷糊。所以,蛤蟆從官方文檔上摘取一些老少皆宜的內容來補腦。塊是數據塊IO的最小單位。1數據塊和操作系統塊從物理層面,數據庫的塊存儲時候是由操作系統塊組成。操作系統塊是操作系統可以讀寫的最小數據單位。ORACLE塊是一個邏輯存儲結構結構,大小和結構對操作系統是透明的。如...

weixin_42524750的博客 186

oracle block 内部结构

oracle block 内部结构 信息参考: http://www.ixora.com.au/ 特别感谢 overtime 大哥对我的无私的帮助和对我一直鼓励支持我的网友这些资料是没得到oracle 支...

cuipo8998的博客 135

Oracle数据块深入分析总结

http://czmmiao.iteye.com/blog/1495332 最近在研究块的内部结构,把文档简单整理了一下,和大家分享一下。该篇文章借助dump和BBED对数据 库内部结构进行了分析,最后附加了一个用BBED解决ORA-1200错误的小例子。在总结的过程中参考了 《Disassembling the Oracle Data Block》以及网上的翻译版本。  dump说明

wxwpxh的专栏 712

oracle数据块 格式,Oracle数据块格式

数据块结构Oracle 数据块有三部分:Cache layerTransaction layerData layerOracle Data Block的结构简图如下,其中从Data header到Row Data部分合称Data Layer:---------------------- Cache Layer ----------------------- Transaction Layer --...

weixin_35756130的博客 289

Oracle中怎么导出索引数据块?

《Oracle唯一索引和NULL空值之间的关系》文章写到了dump索引数据块,当我们需要看一些数据表、索引在块上的存储形式时,dump数据块是一种很直接的操作。1. 创建测试表,含1000条数据,创建唯一索引,SQL>createtablett1asselectowner,object_id,object_namefromdba_objects...

bisal的专栏 967

转抄:Oracle数据块深入分析总结

转抄:Oracle数据块深入分析总结 转抄http://czmmiao.iteye.com/blog/1495332 最近在研究块的内部结构,把文档简单整理了一下,和大家分享一下。该篇文章借助dump和B...

congyun6558的博客 145
上一篇: 遇到一个ORA-01017错误,解决方法
下一篇: MSSM管理的Oracle段头块
tomcoding
博客等级 码龄9年 410粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值