当前位置: 首页 > news >正文

深入理解下oracle 11g block组成

    深层次说,oracle数据库的最少组成单位应该是块,一般默认情况下,oracle数据库的块大小是8kb,其中存储着我们平常所需的数据。我们在使用过程中,难免会疑问道:“oracle数据块中到底是怎样组成的,平常说的块头是怎样的?”。今天我们就深入去探究下oracle数据块信息,了解其组成格式。

一、获取块

1.1,获取块信息

    我们查看我们用户表的段区信息,根据区的信息,去获取我们需要的数据块。我本地使用表T_OBJ,我们查询信息如下:

SQL> select name from v$datafile where file#=5;NAME
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/oracle/app/data/ORCL/DT_TPC_DAT.DBF

    我们表T_OBJ的段从5号数据库文件128号块开始,但是因为128块是段头,故我们选取第二个区136号块查看。

1.2,块获取

1.2.1,dd方式

     我们可以通过操作系统dd命令去获取一个数据块,并结合od命令进行具体数据查看:

[root@oracle11g app]# dd if=/oracle/app/data/ORCL/DT_TPC_DAT.DBF bs=8196 skip=135 count=1 | od -xv > 136.out
1+0 records in
1+0 records out
8196 bytes (8.2 kB) copied, 8.6958e-05 s, 94.3 MB/s
[root@oracle11g app]# 

1.2.2,dump方式

    我们通过数据库的dump命令进行具体数据块的陈列:

SQL> oradebug setmypid
Statement processed.
SQL> alter system dump datafile 5 block 136;System altered.SQL> oradebug tracefile_name
/oracle/app/oracle/diag/rdbms/orcl/ORCL/trace/ORCL_ora_10811.trc

1.2.3,bbed方式 

    我们也可以通过bbed的方式,查看具体的块的数据信息:

二、块解析

    我们通过bbed及打印的日志信息,我们可以看出,一个数据块包含:块头,数据区,块尾。其中块头最复杂,包含:块基本信息,事务相关信息,数据存储信息,空闲空间信息等。

2.1,块头基本信息

  • Typ:                         块类型
  • Fmt:                         块格式,一般值都是0x02
  • Filler:                        暂时没用
  • RDBA:                      数据块的相对地址
  • SCNBase:                SCN的基数
  • SCNWrap:                SCN的高16位
  • Seq:                          顺序号,用于记录同一时间修改的排序号
  • Flg:                           也是用来区分块的一个标志,例如0x01代表新块
  • ChkVal:                     块的检查值
  • Tail:                           用来验证块的一致性的值

    下面陈列下块的具体分类:

  • 0x01:    undo段头
  • 0x02:    undo数据块
  • 0x03:    保存undo段头
  • 0x04:    保存undo数据块
  • 0x05:    数据段头(临时数据段头,索引数据段头,数据数据段头。。)
  • 0x06:    KTB-managed数据块
  • 0x07:    临时表数据块
  • 0x08:    排序key
  • 0x09:    排序run
  • 0x0a:    段空闲链表块
  • 0x0b:    数据文件头 

    下面陈列Flg的对应类型:

  •  0x01:    新块,基本是无数据
  •  0x02:    延迟日志块
  •  0x04:    检查点值已存储
  •  0x08:    临时块

 2.2,块头事务信息

    我们看完块头记录的块的基本信息,接着我们看看用来记录事务信息的部分:

  • rdba:          数据块相对地址
  • seg/obj:      段或对象id
  • csc:            块清理的scn号
  • itc:              事务槽数
  • flg:              0代表在空闲链表上,其他不同值不同代表
  • typ:             1代表数据,2代表索引
  • fsl:               ITL TX空闲槽
  • fnx:              空闲链表下一个块的相对地址
  • itl:                事务槽号
  • xid:              事务id
  • uba:             undo地址
  • flg:               事务标志,例如:C代表已提交。
  • lck:               代表事务锁住的行数
  • scn/fsc:         scn代表事务提交scn号,fsc代表空闲空间

2.3,块头数据信息

    接下来记录的是具体的数据的位置信息,其中有:包含表的个数,数据行数等:

  • tsiz:      数据区大小
  • hsiz:     数据头大小
  • pbl:       指向该块的指针地址
  • flag:      
  • ntab:     块中包含的表的个数,一般都是为1,在聚簇中存在多表
  • nrow:    数据行数
  • frre:       空闲行索要条目
  • fsbo:      空闲空间开始偏移地址
  • fseo:      空闲空间结束便宜地址
  • avsp:     可用空间
  • tosp:      事务全部提交可用空间 

2.4,数据行信息

    接下来我们就可以看到数据块中存放的数据行,里面存放信息如下:

tab:     表号

row:    第几行

tl:        行大小

fb:       标志位

lb:       锁标记位

cc:      总列数(表列)

2.5,tail信息

    tail为验证数据块一致性的信息,我们就通过bbed打印其相应信息:

BBED> p tailchk    
ub4 tailchk                                 @8188     0x7060064fBBED> 
BBED> 

http://www.lryc.cn/news/492372.html

相关文章:

  • Qt Graphics View 绘图架构
  • 大数据-234 离线数仓 - 异构数据源 DataX 将数据 从 HDFS 到 MySQL
  • 零基础学安全--shell脚本学习(1)脚本创建执行及变量使用
  • C#对INI配置文件进行读写操作方法
  • 华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座
  • 请求响应(学习笔记)
  • JavaScript核心语法(5)
  • 2024年第15届蓝桥杯C/C++组蓝桥杯JAVA实现
  • MongoDB 和 Redis 是两种不同类型的数据库比较
  • CLIP-Adapter: Better Vision-Language Models with Feature Adapters 论文解读
  • Spring Boot 开发环境搭建详解
  • 网络安全中的数据科学如何重新定义安全实践?
  • 安装数据库客户端工具
  • GoogleTest做单元测试
  • 深入解析 EasyExcel 组件原理与应用
  • JSON数据转化为Excel及数据处理分析
  • (计算机网络)期末
  • 【AI技术赋能有限元分析应用实践】将FEniCS 软件安装在Ubuntu22.04
  • 快速识别模型:simple_ocr,部署教程
  • 【C/C++】数据库链接入门教程:从零开始的详细指南!MySQL集成与操作
  • C#中面试的常见问题005
  • 使用Redis生成全局唯一id
  • pnpm:包管理的新星,平替 npm 和 yarn
  • Android调起系统分享图片到其他应用
  • 详解Qt QBuffer
  • Python基础学习-11函数参数
  • GTK#框架让C# Winform程序跨平台运行
  • 在Kubernetes使用CronJob实现定时删除指定天数外的文件(我这里使用删除备份mysql数据库文件为例)
  • 使用 Elastic 收集 Windows 遥测数据:ETW Filebeat 输入简介
  • 力扣-位运算-4【算法学习day.44】