数据库页面结构——Oracle篇(二)

简介:

页面是数据库存储管理的基本单位,也是和磁盘交互的最小单位。页面在数据库中有承上启下的作用,页面支撑着数据库的各种管理功能,包括表管理、索引管理、集群管理以及缓冲区管理等。在页面上也保存着数据库中最重要的信息——用户数据,所以页面的管理非常重要,今天接着讨论Oracle页面管理更详细的内容,主要包括页公共头、事务层、表目录、项目录、数据区域以及尾巴。


Page Common Header


Oracle数据库的页公共头是所有的页面都有的一个结构,其大小为20个字节,内容主要包括:

1、页面的类型,占用1Byte:表页面、索引页面、回滚段页面或者临时表页面等

2、页面的版本信息,占用1Byte:目前数据页面是A2

3、保留空间,占用2Byte,一般都被填充成0x0000

4、数据页面的物理地址,占用4Byte,也被称为RDBA信息(Relative Data Block Address):包括文件号和文件内的偏移等

5、SCN(System Change Number ) Base 信息,占用4个字节

6、SCN Wrap 信息,占用2字节

7、SEQ(Sequence number)信息,占用1Byte

8、FLG(Flags)信息,占用1Byte

9、校验信息,占用2个字节:保存页面校验值,用于检查页面的完整性,如果是0x0000表示没打开校验功能,只有将 DB_BLOCK_CHECKSUM 设置为TRUE时才会进行校验。

10、保留空间,占用2Byte,一般都被填充成0x0000

Transaction Layer


Oracle数据库页面的事务层主要包括两个部分的信息。

固定部分:

1、页面类型,占用1Byte,0x01表示数据页面

2、对象编号,占用4Byte,这个数值在前面的ROWID中可以找到

3、页面最后一次刷出的时间,简称为:CSC(Cleanout SCN),占用4Byte。

4、ITL(Interested Transaction List )项数目,简称为:ITC(Interested Transaction Count ),占用1Byte

5、BDBA(Block relative data block address )信息,占用4Byte

除此之外,还有下面信息,但这几个信息的值都是0,再没有仔细确认它们的保存位置:

a. 标志信息,如果页面在空闲列表中,此标志将被标记成大写字母O

b. 空闲空间锁,简称为: FSL(Free Space Lock)

c. 下一个空闲页面指针,简称为:FNX(Free NeXt block)

变化部分:主要是ITLs信息

默认情况下只包含表数据的页面只有一个ITL,但对于包含索引数据的页面,会有两个ITL信息。

在创建索引和表时,通过INITRANS子句可以修改默认的ITL的数量,对于并发要求高的应用,最好将此值设置的大一点。ITL的数量的取值范围是1~255,设置的越大,事务层占用的空间就越多,页面能保存的数据就越少,但并发性越好。建议不要走两个极端,设置的符合真实的应用即可,用4、8、16几个值。

每一个ITL大小为24字节,但这个结构大小与不同的版本相关,我参考的是Oracle12C文档中的值。

ITL结构体主要包括下面信息:

1、事务号,简称为:XID(Transaction ID ),占用8Byte

2、回滚页面地址,简称为:UBA(Undo Block Address ),占用8Byte

3、事务状态标识,占用1Byte

4、事务在当前页面持有的锁总数,占用1Byte

5、一个SCN或者一个FSC(Free Space Credit),占用6Byte

Table directory


因为Oracle有些页面上会保存多个表的数据,主要是使用了聚集的情况下同一个页面会保存多个表数据。下面是表目录的详细内容:

1、表目录个数,占用1Byte

2、表数据在项目录上的索引偏移,简称为:PTI(Position Table Indicates) ,每个表项占用2Byte,第一个表一般都是0x0000。

需要注意的是,表目录个数和表目录这两部分内容并没有保存在一起,这个相关的内容,下次会继续说明。

Row Directory


项目录是一个复杂的结构体,其中记录了数据行和页面空间相关的重要信息,具体如下:

1、页面上的数据项个数,简称为:NROW,占用2Byte

2、第一个空闲项的位置,简称为:FRRE(First fRee Row Entry),如果没有就用0xFFFF填充。

3、空闲空间起始位置,简称为:FSBO(Free Space Begin Offset ),占用2Byte。

4、空闲空间结束位置,简称为:FSEO(Free Space End Offset ),占用2Byte。

5、页面可用空间大小,简称为:AVSP(AVailable SPace),占用2Byte

6、页面总的空间,简称为:TOSP(TOtal SPace ),占用2Byte

7、项目录数,后面的有效的项目录个数,占用2Byte。

8、每一行起始位置在页面上的偏移,简称为:PRI(Position Row Indicates),项目录中的每一项占用2Byte。

旧的版本中,项目录中除了保存项的偏移之外,还保存了项的一些简单状态信息,例如:删除项,链接项,迁移项等状态信息。后来支持的页面大小有所扩展,目前已经将这些信息都保存到了行数据头上。

Row Data


行数据部分主要包含这个页面上的用户数据,每一行是一块连续的空间,前几个是行头信息,其后紧跟行的所有数据。

行数据上面保存的内容主要有:行状态标识、行上的锁类型、列偏移数组、聚集键的位置和所有的列数据。以后介绍行结构的时候会涉及到这部分内容,到时候再详细的介绍。

Tail


每个页面的最后四个字节用于检查页面块是否是同一次写入磁盘的页面,以避免写磁盘到一半的时候突然断电引起的页面不一致的情况。

Oracle的页面结构先介绍这么多,下一次会实际的演示一下,如何看Oracle的页面结构。


本文来自云栖社区合作伙伴“DBGEEK”

目录
相关文章
|
9月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
802 93
|
8月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
426 0
|
11月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
9月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
640 8
|
11月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
531 11
|
11月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
11月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle RMAN的目录数据库
Oracle RMAN默认将备份元信息存储在控制文件中,但控制文件损坏或丢失会导致恢复失败,且备份增多会使控制文件无限增长。为解决这些问题,Oracle引入了RMAN目录数据库(Catalog Database),专门用于存储RMAN备份的元信息。使用目录数据库可提升备份管理效率,支持多数据库共享、长期备份历史记录存储,并可保存RMAN脚本。本文详细介绍了如何创建目录数据库、注册目标数据库及其操作步骤。
334 0
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
1430 2
|
存储 缓存 Oracle
Oracle数据库可扩展性和性能
【7月更文挑战第6天】
583 7

推荐镜像

更多