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

简介:

前面已经介绍了Oracle页面结构,今天就带领大家看看,前面说的页面结构在Oracle 12C中是不是这样子的。

要了解Oracle页面结构,必须能够查看对应的物理磁盘上保存的内容,就需要知道修改所对应的物理页面的位置。数据库中有一个叫ROWID的家伙,就是为了给用户说明数据在物理磁盘上保存的位置,但Oracle的ROWID有点复杂,所以先介绍一下ROWID的结构:

Oracle的ROWID由四部分组成,一共18个字符,整体是一个64进制的数字,每个字符都是Base-64的字符,显示给用户的字符(A-z,0-9,+,/)共计64个。第一部分是对象编号,共占用6位;第二部分是文件编号,共占用3位;第三部分是文件上页面的编号,共占用6位;第四部分是数据在页面上的编号,共占用3位。

了解了ROWID结构,我们就可以自己建表,并根据ROWID来定位我们的数据在磁盘上的位置,进而分析数据中保持的内容。下面先建一张表,并插入两条记录:

然后就可以查看插入的记录的ROWID,从而确定插入数据在物理磁盘上的位置:

我通过ROWID能查到对象编号,文件编号,页面编号以及项号。但还不知道数据在那个文件,这就需要通过文件编号找到文件路径,可以执行下面SQL语句:

SQL> SELECT d.file_id, d.file_name  FROM dba_data_files d;

FILE_ID FILE_NAME

---------- ----------------------------------------

1 D:\APP\ORACLE\ORADATA\ORCL\SYSTEM01.DBF

3 D:\APP\ORACLE\ORADATA\ORCL\SYSAUX01.DBF

5 D:\APP\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF

6 D:\APP\ORACLE\ORADATA\ORCL\USERS01.DBF

SQL>

这样就可以看到我们找到的文件编号是1的文件路径为:

D:\APP\ORACLE\ORADATA\ORCL\SYSTEM01.DBF

为了让我们看到的磁盘数据和刚才的修改一致,再做一个检查点,让数据库将数据写出到磁盘中:

SQL> ALTER SYSTEM checkpoint;

系统已更改。

SQL>

现在知道文件路径了,文件中的偏移的页面数也知道了,还需要确定一下页面大小:

SQL> show parameter db_block_size

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_block_size                        integer     8192

SQL>

在我的环境上,页面大小是8KB,根据这些信息可以定位到我的数据的具体位置在文件:D:\APP\ORACLE\ORADATA\ORCL\SYSTEM01.DBF的偏移0x30E42000的页面的第1和2个项目录,然后我们看看这个页面上到底保存的什么信息。中间都是空闲空间,所以我将中间的数据没有贴出来,只截取页面头和页尾的数据部分,页头我选中的部分是项目录的个数,我插入了两条记录,所以这里是0x0002,其后紧跟着是项目录数组;页尾我选中的部分是第一条数据,可以看到末尾还多了四个字节,这四个字节是用于页面校验的:

在上图中可以看到我插入的两条记录,第一条占用了12个字节,第二条占用了10个字节,这些数据的组织结构以后再细说。

再返回去看页头部分,可以看到里边有两个项的偏移,分别是0x1F94和0x1F8A。通过这两个偏移怎么计算数据的位置呢?这作为这一次的一个小问题留给大家。


本文来自云栖社区合作伙伴“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、导出并验证恢复的数据库文件。
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
2632 28
|
11月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle RMAN的目录数据库
Oracle RMAN默认将备份元信息存储在控制文件中,但控制文件损坏或丢失会导致恢复失败,且备份增多会使控制文件无限增长。为解决这些问题,Oracle引入了RMAN目录数据库(Catalog Database),专门用于存储RMAN备份的元信息。使用目录数据库可提升备份管理效率,支持多数据库共享、长期备份历史记录存储,并可保存RMAN脚本。本文详细介绍了如何创建目录数据库、注册目标数据库及其操作步骤。
334 0
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。

推荐镜像

更多