楼主: jhbrokey
151 0

[经济类] oracle从入门到精通--物理存储结构 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-1-29
最后登录
2018-1-29

楼主
jhbrokey 发表于 昨天 17:52 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

物理存储结构概述

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命令来进行修改,以保证配置的安全性和一致性。

查看与修改服务器参数

可通过以下方式查看当前数据库的服务器参数配置:

  1. 查询数据字典视图:

    v$parameter

    该视图可用于判断某个参数是否已被修改,以及其是否支持通过ALTER SYSTEM或ALTER SESSION命令动态调整。

  2. 使用SQL*Plus工具执行命令:

    show parameter

    该命令可直接显示当前实例的各项参数设置。

修改服务器参数的主要方法有:

  1. 通过OEM界面修改:使用system账户登录Oracle Enterprise Manager,进入“服务器”页面下的“初始化参数”选项,在“值”列中直接编辑所需参数,最后保存更改即可。
  2. 使用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 文件的结构化元信息,便于解析和管理原始跟踪数据。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Oracle 入门到精通 ACL CLE Enterprise

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-6 09:07