Oracle数据块结构概述

简介: 整理自Oracle 11g R2 官方文档《concepts》001 概述     Oracle数据库以数据块(也称为Oracle块或页)为单位,来管理数据库数据文件中的逻辑存储空间。
整理自Oracle 11g R2 官方文档《concepts》

001 概述
    Oracle数据库以数据块(也称为Oracle块或)为单位,来管理数据库数据文件中的逻辑存储空间。数据块是数据库I/O的最小单位。

002 数据块和操作系统块
    在物理级别,存储在磁盘文件中的数据库数据由操作系统块组成。操作系统块是操作系统可以读取或写入的最小数据单位。相比之下,Oracle块是一个逻辑存储结构,其大小和结构对操作系统是透明的。下图显示操作系统块与数据块的大小可能有所不同。数据库按数据块(而不是按操作系统块)的倍数来请求数据。     

    当数据库请求一个数据块时,操作系统将此操作转换为对永久存储数据的多个请求。数据块与操作系统块的逻辑分离具有以下含义:
    ·应用程序不需要确定磁盘上的数据的物理地址。
    ·数据库数据可以在多个物理磁盘上进行条带化或镜像。

003 数据块大小
    每个数据库都有一个数据库块大小。DB_BLOCK_SIZE初始化参数在数据库被创建时设置其数据块大小。此大小是system和sysaux表空间的大小,并且是其他表空间的默认大小。不能更改数据库的块大小,除非重新创建数据库。
    如果尚未设置DB_BLOCK_SIZE,则默认数据块大小特定于操作系统。数据库的标准数据块大小为4KB或8KB。如果数据块和操作系统块的大小不同,则数据块大小必须是操作系统块大小的整数倍。

004 表空间块大小
    你可以创建其块大小不同于DB_BLOCK_SIZE设定值的表空间。当你需要将一个可移动表空间移动到一个不同的平台时,非标准的块大小非常有用。

005 数据块格式
    每个数据块有一个格式或内部结构,使得数据库能够跟踪块中的数据和可用空间。各种数据块的格式是类似的,无论其包含的是表、索引、或表簇数据。下图显示了一个未压缩的数据块的格式,由上而下依次是即块头、表目录、行目录、空闲空间和行数据。

006 数据块开销
    Oracle数据库使用块开销来管理块本身。块开销不能用来存储用户数据。块开销将包括以下部分:
    ·块头
    此部分包含关于块的一般信息,包括磁盘地址和段类型。对于事务管理块,其块头包含活动的和历史的事务信息
    每个更新块的事务都需要一个事务条目。 Oracle 数据库预先在块头 中为事务条目保留空间。 在分配给段用于支持事务性更改的数据块 中,当块头空间耗尽时,可用空间也可以容纳事务条目。事务条目所 需的的空间取决于操作系统。但是, 绝大多数操作系统中的事务条目 需要大约 23 个字节。
    ·表目录
    对于堆组织表,此目录包含有关其行存储在该块中的表的元数据 个表可以将行存储在相同的块中。
    ·行目录
    对于堆组织表,此目录描述该块的数据部分中的行的位置当已在行目录中分配空间后,即使在行被删除后,数据库也不会回收 此空间因此,就算某块现在是空的,但若之前曾经达到 50 行,则 在行目录仍会保留已分配的 100 字节。仅在块中插入新行时,数据 库才会重用此空间。

    块开销的某些部分是大小固定的,但总的大小是可变的。平均起来,块开销 总计在 84 到 107 字节左右。


007 行格式
    块的行数据部分包含实际数据,如表行或索引键条目等。正如每个数据块具有一个内部的格式,每一行也有一个格式,使得数据库能够跟踪行中的数据。
    Oracle数据库以可变长度记录形式来存储行。行包含在一个或多个行片断中。每个行片断有一个行头和列数据。


 ·行头
    Oracle数据库使用行头来管理存储在块中的行片断。行头包含以下信息:
    行片断中的各列
    表簇的簇键
    位于其他数据块中的各个行片断
        如果整个行可以插入到一个数据块中,则Oracle数据库将该行存储为一个行片断。但是,如果所有行数据不能插入一个单一的块,或者一个更新导致现有的行不能容纳在原来的块中,则数据库将该行存储为多个行片断。数据块中通常每行只包含一个行片断。
    包含在一个块中的完全行至少有 3 个字节的行头。

·列数据
    在行头之后的列数据部分存储行中的实际数据。行片断通常按 CREATE  TABLE 语句中列出的顺序来存储列,但这个顺序并不总是能保证的。例 如,LONG 类型列总是在最后。
    如上图所示,对行片断中的每一列,Oracle 数据库独立地存储列长度和 列数据。所需的空间取决于数据类型。如果列的数据类型是可变长度的,则 用于容纳一个值所需的空间可能在其数据被更新时会增长和收缩。
    每一行都在数据块标头的行目录中有一个槽位。槽位指向行的开始部分。

·Rowid 格式
    Oracle 数据库使用一个 rowid 唯一地标识一行。在内部, rowid 是一个结 构,用于保存数据库访问行所需要的信息。一个 rowid 并不物理地存储在数 据库中,而是从存储数据的文件和块推导而来的。
    扩展的 rowid 包括数据对象号。这种 rowid 类型使用每个行的物理地址的  64 进位编码。编码的字符为 A-Z、 a-z、 0-9、 +、和/。

下面的示例用来查询 ROWID 伪列来显示 employees 表中雇员 100 的所在行的  扩展 rowid。
SYS@ORCL > select rowid from hr.employees where employee_id=100;

ROWID
------------------
AAAVTFAAFAAAADPAAA

    一个扩展 rowid 以一个四段式格式显示, OOOOOOFFFBBBBBBRRR, 此格 式分为以下几个组件:
    · OOOOOO 
    数据对象号标识段,即data object number(如示例中的数据对象 AAAVTF)。 数据库中的每个段都被分配了一个数据对象号。同一段中的模式对象( 如一 个表簇)具有相同的数据对象号。
    · FFF
    表空间相对数据文件号,即relative file number,标识包含行的数据文件 (如示例中的文件 AAF)
    ·BBBBBB
    数据块号标识包含行的块,即block number( 如示例中的块 AAAADP) 。块号是 相对于他们的数据文件的,而不是其表空间。因此, 具有相同块号的 两行,可以驻留在同一表空间的不同数据文件中。
    · RRR
    行号标识块中的行,即row number(如示例中的 AAA) 。

    在一个 rowid 被分配给一个行片断后, 该 rowid 在特殊情况下可以更改。例如,如果启用了行移动,则 rowid 可能会因为分区键更新、闪回表操作、收缩表操作等而发生变化。如果禁用了行移动,则如果使用 Oracle 数据库实用程序导出和导入了行,其 rowid 可能会发生变化。
注意:
    在内部,数据库执行行移动,就像行是被物理地删除、然后又重新插入。不过,行移动被认为是更新,会隐含触发触发器。


相关文章
|
4天前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
2月前
|
SQL Oracle 关系型数据库
Oracle 将表中的数据查出更改某一字段的值后再插入该表
Oracle 将表中的数据查出更改某一字段的值后再插入该表
32 2
|
2月前
|
存储 Oracle NoSQL
Oracle 表空间、数据文件、schema的关系
Oracle 表空间、数据文件、schema的关系
36 2
|
2月前
|
SQL Oracle 关系型数据库
Oracle查询优化-查询只包含数字或字母的数据
【2月更文挑战第4天】【2月更文挑战第10篇】查询只包含数字或字母的数据
88 1
|
3月前
|
Oracle 关系型数据库
Oracle查询优化-从表中随机返回N条数据
【1月更文挑战第2天】【1月更文挑战第5篇】有些场景需要抽验数据,例如为了防止做假或者抽检行为,就需要随机抽查。
42 0
|
3月前
|
Oracle 关系型数据库 数据库
Oracle查询优化-复制表的定义及数据
【1月更文挑战第5天】【1月更文挑战第14篇】在Oracle数据库中,复制表定义和复制表数据是两个常见的操作。
51 1
|
4天前
|
Oracle 安全 关系型数据库
Oracle数据守卫(DG):数据的“守护者”与“时光机”
【4月更文挑战第19天】Oracle Data Guard保障数据安全,通过实时维护备库实现故障切换,保证业务连续性。它使用日志传输和应用保持数据同步,如同“时光机”,借助闪回技术能恢复误操作数据。此外,它还提供数据压缩、加密和故障转移等功能,提升数据库安全性与性能。作为数据管理员,理解并善用Data Guard是确保企业数据安全的关键。
|
4天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
4天前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
4天前
|
存储 Oracle 数据管理
Oracle 12c的自动数据优化(ADO)与热图:数据管理的“瘦身”与“透视”艺术
【4月更文挑战第19天】Oracle 12c的ADO和热图技术革新数据管理。ADO智能清理无用数据,优化存储,提升查询速度,实现数据"瘦身";热图则以直观的视觉表示展示数据分布和状态,助力识别性能瓶颈,犹如数据的"透视"工具。这两项技术结合,强化数据管理,为企业业务发展保驾护航。

推荐镜像

更多