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 可能会发生变化。
注意:
    在内部,数据库执行行移动,就像行是被物理地删除、然后又重新插入。不过,行移动被认为是更新,会隐含触发触发器。


相关文章
|
5月前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
174 5
|
5月前
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
91 0
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的还原数据
Oracle数据库中的还原数据(也称为undo数据或撤销数据)存储在还原表空间中,主要用于支持查询的一致性读取、实现闪回技术和恢复失败的事务。文章通过示例详细介绍了还原数据的工作原理和应用场景。
【赵渝强老师】Oracle的还原数据
|
5月前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的物理存储结构
Oracle的物理存储结构包括数据文件、联机重做日志文件、控制文件、归档日志文件、参数文件、告警日志文件、跟踪文件和备份文件。这些文件在硬盘上存储数据库的各种数据和日志信息,确保数据库的正常运行和故障恢复。视频讲解和详细说明见原文。
|
3月前
|
Oracle 关系型数据库 数据库
oracle数据创建同义词
oracle数据创建同义词
62 0
|
5月前
|
Oracle 关系型数据库 BI
ORACLE Apex: EBS多组织结构 理解与配置
【8月更文挑战第11天】在Oracle Apex中理解和配置与EBS多组织结构相关内容需掌握:1) EBS多组织结构概念及组成部分,如法律实体、业务单位与库存组织;2) Oracle Apex与EBS集成的目的与方式,包括提供友好界面及自定义业务流程;3) 在Apex中配置多组织结构应用,涉及数据访问控制、页面报表设计及业务流程集成。整体而言,需精通EBS架构与Apex开发技术,以实现高效灵活的企业解决方案。
126 2
|
5月前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
110 0