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


相关文章
|
2月前
|
SQL Oracle 关系型数据库
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
|
2月前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
53 0
|
2月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之从Oracle数据库同步数据时,checkpoint恢复后无法捕获到任务暂停期间的变更日志,如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7天前
|
SQL 存储 Oracle
TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
**TDengine 3.3.2.0 发布摘要** - 开源与企业版均强化性能,提升WebSocket、stmt模式写入与查询效率,解决死锁,增强列显示。 - taos-explorer支持geometry和varbinary类型。 - 企业版引入UDT,允许自定义数据转换。 - 新增Oracle和SQL Server数据接入。 - 数据同步优化,支持压缩,提升元数据同步速度,错误信息细化,支持表名修改。 - 扩展跨平台支持,包括麒麟、Euler、Anolis OS等。
18 0
|
10天前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在online模式下增量抓取Oracle数据时,在archive_log切换时,出现数据丢失的情况,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
SQL 数据采集 Oracle
实时计算 Flink版产品使用问题之如何读取oracle中的blob类型的数据
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
Oracle 关系型数据库 数据库
实时计算 Flink版产品使用问题之连接到Oracle数据库但无法读取到数据,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
Oracle Java 关系型数据库
实时计算 Flink版产品使用合集之在同步Oracle数据时,需要下载并添加到项目中的jar包主要包括哪些
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之在进行Oracle数据库的全量同步时,只同步了一条数据而源表实际上包含多条数据,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
资源调度 Oracle 关系型数据库
实时计算 Flink版产品使用合集之同步Oracle数据时,一张表产生了大量的连接数,如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。