数据库页面结构——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”

目录
相关文章
|
3天前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
17 0
|
10天前
|
存储 Oracle 网络协议
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
|
14天前
|
Oracle 网络协议 关系型数据库
异地使用PLSQL远程连接访问Oracle数据库【内网穿透】
异地使用PLSQL远程连接访问Oracle数据库【内网穿透】
|
14天前
|
SQL Oracle 安全
Oracle数据库中的事务和锁
【4月更文挑战第19天】Oracle数据库的事务和锁是确保数据完整性和并发控制的核心机制。事务遵循ACID原则,保证操作的原子性、一致性、隔离性和持久性。通过COMMIT或ROLLBACK来管理事务更改。锁包括共享锁(读)、排他锁(写)、行级锁和表级锁,用于控制并发访问。自动锁机制在DML操作时生效,防止数据冲突。事务和锁共同维护数据库的稳定和安全。
|
14天前
|
存储 Oracle 关系型数据库
Oracle RAC:数据库集群的舞动乐章
【4月更文挑战第19天】Oracle RAC是Oracle提供的高可用性数据库解决方案,允许多个实例共享同一数据库,确保业务连续性和数据完整性。通过集群件和全局缓存服务实现服务器间的协调和通信。RAC提供高可用性,通过故障转移应对故障,同时提升性能,多个实例并行处理请求。作为数据管理员,理解RAC的架构和管理至关重要,以发挥其在数据管理中的最大价值。
|
14天前
|
监控 Oracle 安全
Oracle用户事件触发器:数据库世界的“福尔摩斯”
【4月更文挑战第19天】Oracle用户事件触发器是数据库中的监控机制,类似于“福尔摩斯”,在用户执行特定操作时自动触发。它们关注用户行为而非数据变化,可用于权限检查、安全监控、性能优化等。通过DDL语句创建,需注意逻辑清晰、条件合适及定期更新,以适应数据库变化和业务发展。掌握其使用能有效保障数据安全与稳定。
|
14天前
|
SQL 存储 Oracle
Oracle语句级触发器:数据库的“隐形哨兵”
【4月更文挑战第19天】Oracle语句级触发器是数据库中的自动执行程序,当特定事件(如INSERT、UPDATE、DELETE)发生时,会针对整个SQL语句触发。以新员工入职记录日志为例,创建语句级触发器可自动在操作后向日志表插入信息,减少手动工作并提高性能。虽然无法处理行级详细信息,但在处理大量数据时,相比行级触发器更高效。掌握触发器使用能提升数据管理效率和安全性。
|
22天前
|
Oracle 安全 关系型数据库
【Oracle】玩转Oracle数据库(六):模式对象管理与安全管理
【Oracle】玩转Oracle数据库(六):模式对象管理与安全管理
23 10
|
22天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(三):数据库的创建和管理
【Oracle】玩转Oracle数据库(三):数据库的创建和管理
58 5
|
22天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(五):PL/SQL编程
【Oracle】玩转Oracle数据库(五):PL/SQL编程
54 8

推荐镜像

更多