物理存储结构概述
Oracle数据库的存储体系可分为逻辑与物理两个层面。其中,逻辑存储结构是为便于管理而设计的一套抽象层次,而物理存储结构则更为具体和直观,主要描述数据在磁盘上的实际分布情况。
从整体来看,Oracle的数据在逻辑上归属于表空间,而在物理层面则保存于表空间所包含的数据文件中。这些数据文件是操作系统中的普通文件,由Oracle在创建表空间时自动生成。
Oracle的物理存储由多种关键文件构成,主要包括:数据文件、控制文件、重做日志文件、归档日志文件、参数文件、密码文件以及警告日志文件等,如下图所示:
数据文件详解
数据文件用于存放用户应用程序的数据及Oracle系统自身的内部信息。每个表空间可包含一个或多个数据文件,但一个数据文件只能属于唯一的表空间。
当创建表空间时,Oracle会同步生成对应的数据文件。在该表空间中创建数据对象(如表、索引)时,用户无法指定具体的存储文件,系统将自动选择合适的数据文件并分配空间。同一对象的数据可以完全存放在单一数据文件中,也可跨多个数据文件进行分布存储。
在读取操作中,Oracle首先尝试从内存中的高速数据缓存区获取数据。若所需数据未命中缓存,则从相应的数据文件读取,并加载至缓冲区。对于写入操作(如更新或插入),数据并不会立即写入磁盘,而是先暂存在数据缓冲区中,随后由后台进程DBWR根据策略将其持久化到数据文件中。这种机制有效减少了磁盘I/O频率,提升了系统响应效率。
数据文件主要分为以下三类:
- 系统数据文件(如 SYSTEM01.DBF 和 SYSAUX01.DBF):用于存储Oracle系统的元数据和核心结构信息。包括数据字典、系统表、用户定义的表名、列名及其类型等均存放于此。
- 撤销数据文件(如 UNDOTBS01.DBF):隶属于撤销表空间,用于保存事务修改前的旧值,以便支持回滚操作和一致性读取。撤销段通常独立存在于专门的撤销表空间中。
- 用户数据文件(如 USERS01.DBF、EXAMPLE01.DBF):用于存储用户应用相关的业务数据,涵盖所有与具体应用关联的信息内容。
需要注意的是,上述分类未包含临时表空间所使用的临时数据文件。由于其特殊性,自Oracle 9i起,临时数据文件已被从常规数据文件中分离出来,可通过查询以下数据字典视图来查看相关信息:
dba_temp_files
或
v$tempfile
控制文件的作用与特性
控制文件是一个二进制格式的系统文件,记录了数据库的关键物理结构信息,包括但不限于:数据库名称、数据文件与日志文件的路径与名称、数据库创建时间等。
该文件通常在安装Oracle或创建数据库时自动生成,其默认存储位置由服务器参数文件中的特定参数决定:
SPFILEORCL.ORA
的
CONTROL_FILES
参数值。
控制文件对数据库启动至关重要。实例启动过程中,必须成功访问至少一个有效的控制文件才能继续加载和打开数据库。若控制文件缺失或包含错误信息,实例将无法正常启动。
具体流程如下:系统首先读取初始化参数文件SPFILE;接着为SGA分配内存,进入实例安装阶段;此时控制文件被打开,Oracle从中读取所有数据文件和重做日志文件的信息,并依次打开它们以供后续访问。
每个数据库至少拥有一个控制文件,虽然可以配置多个副本,但每个控制文件仅能服务于一个数据库。除了基础信息外,控制文件在运行期间还会持续记录系统更改号(SCN)、检查点信息以及归档日志的状态等动态内容。
出于高可用性和容灾考虑,Oracle在安装或建库时默认会创建两个或三个完全相同的控制文件副本,分别存放于不同路径。这样即使其中一个损坏,系统仍可使用其他副本维持运行。但如果全部控制文件均不可用,则数据库将无法启动。
每当数据库的物理结构发生变化(如新增数据文件)或需要执行恢复操作时,Oracle都会自动更新控制文件以保持其信息同步。
日志文件
日志文件主要用于记录数据库中所有事务的操作过程,确保数据的一致性与可恢复性。它主要包括重做日志文件和归档日志文件两种类型。重做日志文件记录所有对数据库的变更操作,是实现故障恢复的核心组件;当重做日志组被填满后,在归档模式下会被归档为归档日志文件,用于长期保留和备份恢复。
Oracle数据库在运行过程中依赖多种关键文件来保障数据的完整性、可恢复性与系统稳定性。其中,日志文件起着至关重要的作用,主要用于记录对数据库所进行的各项修改操作。几乎所有对数据的变更都会被写入日志文件中,当系统发生故障时,可以通过这些记录还原原始状态,从而避免已有操作成果的丢失。
Oracle的日志体系主要包括以下两类:
- 重做日志文件(Redo Log File)
- 归档日志文件(Archive Log File)
重做日志文件的作用与机制
重做日志文件用于保存数据库中所有已发生的更改信息,包括但不限于数据的插入、更新和删除操作,同时也涵盖由Oracle内部行为引发的数据变化,例如数据库或索引的创建等。在执行事务提交(COMMIT)命令时,系统会优先将该操作对应的原始记录写入重做日志缓冲区,随后由LGWR进程将其持久化到相应的重做日志文件中。只有当日志写入成功后,新的数据才会反馈给应用程序,这种机制确保了即使在系统崩溃的情况下,也能通过日志恢复未持久化的数据。
为了提升性能,在某些场景下可以对特定表或表空间设置NOLOGGING属性,使得部分DML操作(如建表、删视图、改索引等)不生成重做日志,从而减少日志量并加快处理速度。但需要注意的是,这类操作在恢复时可能无法还原相关数据。
每个Oracle实例都会启用一个日志线程,用以追踪数据库的所有变更。该线程由多个“日志组”组成,而每个日志组又包含一个或多个物理日志文件,形成冗余保护。
在数据库运行期间,产生的重做信息首先暂存于SGA中的重做日志缓冲区。当满足以下任一条件时——用户发出COMMIT命令,或者缓冲区使用率达到1/3——LGWR进程便会启动,将缓冲区内容写入当前活跃的日志组文件中。日志写入按顺序循环进行:当前日志组写满后,系统自动切换至下一个;当所有日志组都被使用一遍后,LGWR将回到第一个日志组重新覆写。
归档日志文件与数据库运行模式
由于重做日志采用循环写入方式,旧的日志记录最终会被新记录覆盖。为防止重要历史日志丢失,Oracle引入了归档日志机制。
Oracle支持两种运行模式:
- 非归档模式:在此模式下,系统持续将日志写入重做日志组,一旦所有日志组写满,便从头开始覆盖之前的日志文件,不保留已被覆写的日志内容。
- 归档模式:在日志组即将被覆写前,ARCH进程会先将其中的内容复制到归档日志文件中,这一过程称为“归档”。归档完成后,LGWR才能继续覆写原日志组。
SPFILEsid.ora
尽管归档模式增强了数据可恢复能力,但也带来一定开销:一方面,LGWR需等待ARCH完成归档操作,导致事务响应延迟;另一方面,归档文件本身占用大量磁盘空间。因此,默认情况下Oracle以非归档模式运行。
服务器参数文件(SPFILE)
SPFILE,即服务器参数文件,是一个二进制格式的配置文件,用于存储Oracle实例的关键初始化参数,如数据库名称、控制文件路径、日志缓冲区大小等。在实例启动时,Oracle会自动读取SPFILE中的参数,并据此完成系统的初始化配置。
该文件在安装数据库时由系统自动生成,命名规则为:
PWD<sid>
其中,sid代表当前数据库实例的名称。
SPFILE中的参数由Oracle系统统一维护,建议不要直接编辑该文件。若需调整参数,推荐通过Oracle企业管理器(OEM)或ALTER SYSTEM命令来进行修改,以保证配置的安全性和一致性。
查看与修改服务器参数
可通过以下方式查看当前数据库的服务器参数配置:
- 查询数据字典视图:
v$parameter该视图可用于判断某个参数是否已被修改,以及其是否支持通过ALTER SYSTEM或ALTER SESSION命令动态调整。
- 使用SQL*Plus工具执行命令:
show parameter该命令可直接显示当前实例的各项参数设置。
修改服务器参数的主要方法有:
- 通过OEM界面修改:使用system账户登录Oracle Enterprise Manager,进入“服务器”页面下的“初始化参数”选项,在“值”列中直接编辑所需参数,最后保存更改即可。
- 使用ALTER SYSTEM命令修改:可在SQL环境中执行该命令来动态调整参数,适用于支持动态修改的参数项。
辅助性系统文件
除核心的数据文件、控制文件、日志文件及SPFILE外,Oracle还需依赖若干辅助文件来保障正常运行,主要包括密码文件、警告文件和追踪文件。
密码文件
密码文件是一种二进制文件,用于验证具有SYSDBA或SYSOPER权限用户的登录身份。当远程客户端尝试以高权限角色连接数据库时,系统通常需要借助密码文件完成认证。
默认情况下,密码文件位于%ORACLE_HOME%\database目录下,命名格式为:
C:\>ORAPWD FILE=<filename> PASSWORD=<password> ENTRIES=<max_users>
其中sid为数据库实例名。该文件可在创建实例时由系统自动生成,也可通过ORAPWD工具手动创建。创建命令的基本格式如下:
filename
其中,指定了生成的密码文件名称。
设置 internal/sys 账户的口令,可通过特定命令进行配置。
password
密码文件中允许存储的用户数量存在上限,该数值决定了能够以 sysdba 或 sysoper 权限登录数据库的最大用户数。
max_users
在完成密码文件的创建后,需配置初始化参数 remote_login_passwordfile 以控制其使用方式。该参数包含三种可选状态:
- NONE:若操作系统已完成身份验证,则无需再通过 Oracle 密码文件进行校验。
- SHARED:允许多个数据库实例共享同一密码文件进行认证。
- EXCLUSIVE:仅允许单一数据库实例使用该密码文件进行验证。
警告日志文件(也称警告文件)是 Oracle 系统中的一个文本格式日志文件,主要用于记录系统运行过程中的关键事件与错误信息。其中,运行类信息通常涵盖实例的启动与关闭、表空间的创建以及数据文件的添加等操作;而错误信息则包括空间扩展失败、实例启动异常等情况。
Oracle 实例在日常运行中所产生的各类基础日志信息均会被写入警告文件。该文件的具体存储路径可通过查询 BACKGROUND_DUMP_DEST 参数获取,此参数的值由服务器进程及后台进程共同维护并写入。
跟踪文件分为两类:后台进程跟踪文件和用户进程跟踪文件。
后台进程跟踪文件用于记录 Oracle 后台进程中出现的警告或错误详情。其在磁盘上的存储位置由初始化参数指定。
BACKROUND_DUMP_DEST 文件命名遵循特定规则,格式如下所示。<sid>_<processname>_<spid>.trc
用户进程跟踪文件则主要用于记录与用户会话相关的活动,尤其适用于 SQL 语句的执行追踪。通过分析此类文件,可评估 SQL 语句的执行效率与性能表现。该类文件的存储路径由 USER_DUMP_DEST 参数确定,命名模式为。
<sid>_ora_<spid>.trc
除了常见的 .trc 扩展名跟踪文件外,还存在一种 .trm 文件,称为追踪元数据文件。此类文件伴随每个 .trc 文件自动生成,一一对应。.trm 文件保存了对应 .trc 文件的结构化元信息,便于解析和管理原始跟踪数据。


雷达卡


京公网安备 11010802022788号







