Oracle数据库数据文件的概述

Oracle数据库数据文件的概述

在操作系统层面, Oracle 数据库将数据库数据存储在数据文件中。每个数据库必须至少有一个数据文件。

Oracle 数据库将表空间中的数据在物理上存储为数据文件。

使用数据文件

Oracle 关系数据结构中用于存储用户数据的逻辑结构,其中最重要的是表。每个非分区模式对象和每个对象的分区都存储在其自己的段中。为便于管理, Oracle 数据库在表空间中为用户数据分配空间。与段类似,表空间也是逻辑存储结构。每个段只属于一个表空间。例如,非分区表的数据存储在单个段中,最终也存储在一个表空间中。

表空间和数据文件的区别:
1、每个表空间包含一个或多个数据文件,这需要遵从运行 Oracle 数据库的操作系统。
2、数据库数据被集中地存储在位于每个数据库表空间的数据文件中。
3、段可以跨越一个或多个数据文件,但它不能跨多个表空间。
4、数据库必须有 SYSTEM 表空间和 SYSAUX 表空间。Oracle 数据库自动在数据库创建过程中为 SYSTEM 表空间分配数据库的第一个数据文件。

备注:SYSTEM 表空间包含数据字典,它是包含数据库元数据的一组表。通常,数据库也有一个撤销表空间和临时表空间 (通常称为 TEMP)。

下图显示了表空间、 数据文件、和段之间的关系。

image-20260429103653791

永久和临时数据文件

临时文件类似于永久数据文件。

永久表空间中包含持久性的模式对象。永久表空间中的对象存储在数据文件中。

临时表空间中仅包含用于会话期间的模式对象。本地管理的临时表空间具有临时文件,它是被设计用于存储在哈希、 排序、和其他操作使用的数据的特殊文件。临时文件还用于存储在内存中的空间不足时的结果集数据。

临时文件和永久数据文件的区别

1、永久性数据库对象(如表)绝不会存储在临时文件中。
2、临时文件始终被设置为 NOLOGGING 模式,这意味着永远不会为其生成重做。介质恢复不识别临时文件。
3、不能将临时文件置为只读模式。
4、无法使用 ALTER DATABASE 语句来创建一个临时文件。
5、当创建临时文件或调整其大小时,并不能始终保证会为他们分配指定文件大小的磁盘空间。在 Linux 和 UNIX 等的文件系统上,临时文件被创建为稀疏文件。在这种情况下,磁盘块并不是在文件的创建或调整大小时分配的,而是在块第一次被访问时分配的。
备注:稀疏文件使你能够快速地创建临时文件或调整其大小 ;但是,当之后访问临时文件时,可能会超出磁盘空间。

临时文件信息显示在数据字典视图 DBA_TEMP_FILES 和动态性能视图 V$TEMPFILE 中,不在 DBA_DATA_FILES 或V$DATAFILE 视图中。

联机和脱机数据文件

每个数据文件可能是联机的(可用) 或脱机的(不可用)。
可以通过让单个数据文件或临时文件脱机或联机,来改变其可用性。脱机的数据文件不能被访问,直至他们恢复联机状态。

管理员因为很多原因将数据文件脱机,包括执行脱机备份、重命名数据文件、或数据块破坏。如果数据库无法写入数据文件,则数据库自动将其脱机。

与数据文件类似,表空间本身也可以是脱机的或联机的。当将一个联机表空间中的数据文件脱机时,表空间本身将仍保持联机状态。可以将整个表空间脱机,来使该表空间中的所有数据文件暂时不可用

数据文件结构

Oracle 数据库通过分配指定数量的磁盘空间,加上数据文件头开销,来为表空间创建数据文件。
在 Oracle 数据库之下运行的操作系统,负责在将文件分配给数据库之前,从文件中清除旧信息和授权。

数据文件头包含数据文件的元数据,例如数据文件大小和检查点 SCN。每个文件头包含一个绝对文件号和一个相对文件号。绝对文件号唯一地标识数据库内的数据文件。相对文件号唯一地标识表空间内的数据文件。

当 Oracle 数据库刚创建一个数据文件时,分配的磁盘空间已格式化,但不包含任何用户数据。
数据库会保留此空间,将来用于容纳其相关联的表空间中的数据段。
随着表空间中的数据增长,Oracle 数据库将用数据文件中的可用空间来为段分配扩展区。

下图说明了数据文件中不同类型的空间。扩展区要么是已使用的,意味着他们包含段数据,或是空闲的,意味着它们是可重用的。随时间的流逝,表空间中的对象不断更新和删除,会产生很多小的空白空间,但太小不足以被重用以容纳新数据。这种类型的空白空间称为碎片化的可用空间。

image-20260429104322981

posted @ 2026-05-20 14:31  数据库路上  阅读(6)  评论(0)    收藏  举报