找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4417

积分

0

好友

576

主题
发表于 9 小时前 | 查看: 4| 回复: 0

Oracle的架构设计非常精妙,其核心架构可以精炼地概括为:一个实例 + 一个数据库。这两者紧密协作,共同构成了完整的Oracle数据库服务器。简单来说,实例负责动态的管理与运算,而数据库则负责静态的数据存储。

🔩 实例 (Instance)

实例是运行在操作系统层面的内存区域和后台进程的集合,它是数据库的“大脑”和“引擎”,负责管理数据库文件并为客户端应用程序提供服务。实例本身是临时的,关闭后即消失。它主要细分为以下两大部分:

内存结构 (Memory Structures)

内存结构是数据库性能的核心,直接决定了数据处理的速度,主要包括:

  • 系统全局区 (SGA, System Global Area):在实例启动时分配的共享内存池,被所有服务器进程和后台进程共享。其核心组件有:

    • 共享池 (Shared Pool):用于缓存SQL语句的执行计划、PL/SQL代码以及数据字典信息,目的是避免重复解析,极大提升SQL执行效率。
    • 数据缓冲区 (Database Buffer Cache):缓存从磁盘数据文件中读取的数据块。对数据的增删改查操作首先在这里进行,从而减少物理I/O,是加速数据读写的关键。
    • 重做日志缓冲区 (Redo Log Buffer):一个循环使用的缓冲区,用于临时记录所有数据变更操作(即重做条目),这些记录最终会被写入重做日志文件,是保证事务持久性和故障恢复的基础。
    • 其他可选池:如大池(Large Pool,用于共享服务器、并行查询等)、Java池(Java Pool,用于Java虚拟机)等,用于支持特定的数据库功能。
  • 程序全局区 (PGA, Program Global Area):这是为每个服务器进程或后台进程单独分配的私有内存区域,其他进程无法访问。它包含了进程运行所需的特定数据和控制信息,例如排序区、会话变量、游标状态等。

进程结构 (Process Structures)

进程是内存中正在运行的执行单元,Oracle实例包含多种类型的进程:

  • 用户进程 (User Process):由用户启动的应用程序进程(如SQL*Plus、你的Java应用),它负责与Oracle服务器建立连接。
  • 服务进程 (Server Process):与用户进程通信,代表用户执行SQL语句、从数据文件读取数据,并将结果返回给用户进程。
  • 后台进程 (Background Process):这些是数据库的“管家”和“守护进程”,在实例启动时自动创建,负责执行核心的维护与管理任务。关键的几类包括:
    • 数据库写进程 (DBWn):负责将SGA数据缓冲区中已被修改的“脏数据块”异步写回到磁盘上的数据文件中。
    • 日志写进程 (LGWR):负责将SGA重做日志缓冲区中的重做记录顺序写入磁盘的重做日志文件。这是一个同步操作,对事务提交至关重要。
    • 系统监控进程 (SMON):负责实例恢复(如实例异常关闭后的重启)、清理不再使用的临时段等系统级的清理工作。
    • 进程监控进程 (PMON):监控其他用户进程和服务进程,并在进程异常失败时负责清理其占用的资源(如释放锁、回滚事务)。
    • 检查点进程 (CKPT):定期触发检查点,更新控制文件和数据文件头,记录数据库的一致状态点,从而在恢复时减少需要应用的重做日志量,加速恢复过程。

🗄️ 数据库 (Database)

数据库是存储所有用户数据和元数据的物理文件集合,它独立于实例而持久存在。即使实例关闭,数据库文件仍然保存在磁盘上。数据库由物理和逻辑两层结构组成,这为管理提供了极大的灵活性。

物理存储结构 (Physical Storage)

这是操作系统层面可见的实际文件,是数据的最终载体:

  • 数据文件 (Data File):真正存储表、索引、簇等用户数据的文件。
  • 控制文件 (Control File):数据库的“元数据中枢”和“路线图”。它记录了数据库的名称、创建时间戳、所有数据文件和重做日志文件的位置等关键信息。数据库的启动和正常运行都离不开它。
  • 重做日志文件 (Redo Log File):数据库的“操作日志”或“飞行记录器”。它记录了对数据所做的所有更改,主要用于实例故障时的恢复(前滚操作)。通常以组的形式存在,循环写入。
  • 参数文件 (Parameter File):实例启动时的“配置清单”(如 init.oraspfile.ora),定义了SGA大小、进程数量、数据库名等大量初始化参数。
  • 归档日志文件 (Archived Redo Log File):重做日志文件被写满后,可以被归档进程(ARCH)复制生成的副本。它们构成了数据库的完整变更历史,是进行介质恢复(如磁盘损坏)和数据备份的基础。
  • 其他辅助文件:如密码文件(用于远程管理员的身份验证)、告警日志文件(记录数据库运行中的重大事件和错误信息)等。

逻辑存储结构 (Logical Storage)

这是从DBA和应用程序开发者视角看到的抽象数据组织层次,它屏蔽了底层物理文件的复杂性,从大到小依次为:

  • 表空间 (Tablespace):最高级别的逻辑存储容器。一个数据库由多个表空间构成,一个表空间可以包含一个或多个物理数据文件。它是进行空间管理和用户权限分配的主要单元,例如SYSTEM表空间存放数据字典,USER表空间存放用户数据。
  • 段 (Segment):在表空间中为特定数据库对象(如表、索引、回滚段等)分配的空间。每个需要独立存储结构的对象都拥有一个唯一的段。
  • 区 (Extent):当段空间不足时,Oracle会为其分配一组连续的数据块,这个分配单元就叫区。它是Oracle进行空间分配和回收的基本单位。
  • 数据块 (Data Block):Oracle中最小的I/O单元,也是逻辑存储的最小单位。一个数据块对应操作系统的一个或多个块,里面存储着表或索引的行数据。

理解Oracle这种“实例+数据库”的分离设计,以及物理与逻辑存储的分离,是进行高效数据库管理、性能调优和故障诊断的基石。这种精妙的架构使得Oracle能够在管理海量数据的同时,保持高度的可靠性、可用性和可扩展性。




上一篇:SEO工具实测:那些被热捧的AI技能,为何没能解放我的双手?
下一篇:苹果CEO库克卸任,公司市值跌破4万亿美元
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-23 13:13 , Processed in 0.747065 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表