【数据库】Oracle学习笔记整理之一:ORACLE体系结构 - 核心组成部分概述
Oracle数据库采用客户端/服务器架构,由三大核心组件构成:1)实例(Instance)包含内存结构(SGA共享全局区和PGA程序全局区)和后台进程(如PMON、SMON等),负责数据库运行管理;2)数据库(Database)是物理文件集合,包括数据文件、控制文件和重做日志等,用于持久化存储;3)客户端通过Oracle Net连接数据库发起请求。实例负责处理操作,数据库存储数据,客户端发起业务请
Oracle 的核心组成部分概述
Oracle 数据库是一个典型的 客户端/服务器(C/S)架构系统,其运行依赖三大核心组件:
- 实例(Instance) :内存与进程的集合,负责管理数据库操作
- 内存(SGA + PGA) + 进程(用户进程、服务器进程、后台进程等)
- 数据库(Database) :物理文件的集合,用于持久化存储数据
- 数据文件 + 控制文件 + 重做日志等物理文件
- 客户端(Client) :发起连接和请求的应用或用户
- 任何通过 Oracle Net 连接数据库的应用或工具
“实例管运行,数据库存数据,客户端发请求。”
一、实例结构(Instance Architecture)
Oracle 实例是数据库启动后创建的 内存结构 + 进程体系,是“动态管理数据库”的核心载体。
1. 内存结构
内存是实例“实时运算与数据缓存”的战场,分为 共享(SGA) 和 私有(PGA) 两大区域:
- ✅ SGA(System Global Area,系统全局区)
所有会话共享的内存池,随实例启动分配,关闭释放,核心组件及功能:
| 组件名 | 功能说明 | 关键价值 |
|---|---|---|
| 共享池(Shared Pool) | 缓存 SQL 执行计划(Library Cache)、数据字典(Data Dictionary Cache)。 | 复用执行计划,减少硬解析开销;加速元数据查询。 |
| 数据库缓冲区缓存(Database Buffer Cache) | 缓存从数据文件读取的数据块,优先内存访问。 | 大幅减少磁盘 I/O,提升查询/更新效率。 |
| 重做日志缓冲区(Redo Log Buffer) | 临时存储事务产生的“重做记录”(Redo Entry),等待后台进程持久化。 | 异步落盘,提升事务提交效率,保障数据可恢复。 |
| 大池(Large Pool)(可选) | 承担 RMAN 备份、共享服务器模式等“大内存操作”,减轻共享池压力。 | 优化资源分配,避免共享池碎片化。 |
| Java 池(Java Pool)(可选) | 存储 JVM 相关对象,支持数据库内 Java 代码执行(如 PL/Java 存储过程)。 | 扩展数据库能力,适配 Java 生态需求。 |
| 流池(Streams Pool)(已弃用) | 原用于 Oracle Streams 复制(12c 后逐步淘汰,功能并入 GoldenGate 等)。 | 历史组件,现代架构中无需关注。 |
| IM 列存储(In-Memory Column Store)(可选) | 以 “列格式” 在内存中存储指定表 / 分区的数据,独立于传统行式缓存(Database Buffer Cache)。支持列压缩、向量计算(SIMD 指令)。 | 企业可在同一数据库中高效支持 “交易 + 分析” 混合负载,无需单独部署数据仓库,尤其适合需要实时数据分析的业务场景(如金融风控、电商实时报表)。 |
🔹 管理:SGA 大小由
SGA_TARGET(动态调整)或SGA_MAX_SIZE(上限控制)参数管理,可通过v$sga视图监控。
- ✅ PGA(Program Global Area,程序全局区)
每个服务器进程私有的内存区域,会话专属,随会话创建分配,结束释放:- 存储内容:排序区(Sort Area)、哈希连接区(Hash Area)、游标状态、绑定变量等“会话级临时数据”。
- 管理机制:总量由
PGA_AGGREGATE_TARGET参数控制(自动管理模式),数据库根据负载动态分配。
🔹 特点:私有性保障会话间互不干扰,避免资源冲突;动态分配让内存利用更高效。
2. 进程结构
进程是实例“动态执行任务”的载体,覆盖 用户交互、核心运算、系统守护 全流程,分为三类:
-
✅ 用户进程(User Process)
- 角色:客户端发起连接的“入口进程”,运行在客户端机器。
- 行为:不直接操作数据库文件,仅通过网络向服务器进程发送 SQL 请求(如查询、更新),并接收结果。
- 示例:
- Java 应用中
DriverManager.getConnection()触发的进程。 - 本地命令行
sqlplus username/password@database启动的进程。
- Java 应用中
-
✅ 数据库进程(Database Processes)
Oracle 核心工作进程,处理用户请求、管理存储,细分为两类:- 服务器进程(Server Process)
- 职责:
- 接收用户进程的 SQL 指令(查询/插入/更新等)。
- 协调 SGA 与数据文件:优先从
Database Buffer Cache取数据;缓存缺失时,从数据文件加载。 - 利用 PGA 执行排序、哈希连接等“会话级计算”,生成结果返回用户进程。
- 模式适配:
- 专用服务器模式:1:1 绑定用户进程,独享资源(适合高并发、低延迟场景,如 OLTP 业务)。
- 共享服务器模式:多用户进程复用少数服务器进程(节省资源,适合大量短连接、轻负载场景)。
- 职责:
- 后台进程(Background Process)
实例启动即常驻的“守护进程”,自动维护数据库健康与数据一致性,典型进程及功能:
- 服务器进程(Server Process)
| 进程名 | 核心职责 | 关键价值 |
|---|---|---|
| PMON(Process Monitor) | 清理异常会话:回滚未提交事务、释放锁、回收 PGA 资源,保障系统整洁。 | 避免资源泄漏,维持实例稳定性。 |
| SMON(System Monitor) | 实例崩溃后自动恢复(前滚重做日志、回滚未提交事务);合并空闲数据块。 | 实现“故障自愈”,保障数据一致性;优化存储。 |
| DBWn(Database Writer) | 批量刷写“脏数据块”(Buffer Cache 中被修改但未落盘的数据)到数据文件。 | 异步落盘,平衡内存性能与数据持久化需求。 |
| LGWR(Log Writer) | 实时将 Redo Log Buffer 内容写入联机重做日志,确保事务“持久性”。 |
保障事务提交即落盘,支撑崩溃恢复与数据守护。 |
| CKPT(Checkpoint Process) | 触发检查点:更新控制文件/数据文件头的 SCN(系统变更号),标记已持久化的数据版本。 | 加速实例恢复(崩溃后无需全量扫描日志)。 |
| ARCn(Archiver Process) | 归档模式下,复制“写满的联机重做日志”为归档日志(用于灾难恢复、日志挖掘)。 | 支撑时间点恢复(PITR),扩展容灾能力。 |
-
✅ 守护/应用程序进程(Daemon & Application Processes)
为 系统级高可用、集群扩展 设计的辅助进程,覆盖网络监听、集群管理等场景:- 网络监听器(Network Listener)
- 配置:通过
listener.ora定义监听地址(如localhost)、端口(默认1521)。 - 作用:
- 被动监听客户端连接请求,验证身份后分配服务器进程(专用/共享模式)。
- 支持 动态服务注册:
PMON自动向监听器上报实例信息(如服务名、实例名),无需手动配置。
- 配置:通过
- Grid 基础架构守护进程(Grid Infrastructure Daemons)
- 适用场景:RAC(实时应用集群)、ASM(自动存储管理)等高可用环境。
- 典型进程:
- 网络监听器(Network Listener)
| 进程名 | 核心职责 |
|---|---|
| CRSD(Cluster Ready Services Daemon) | 管理集群资源(实例、监听、VIP 等),自动故障切换,保障 RAC 高可用。 |
| ASM(Automatic Storage Management) | 专为 ASM 磁盘组设计,调度磁盘 I/O、维护冗余数据同步,支撑共享存储管理。 |
进程体系价值:分层设计让 Oracle 既灵活响应用户请求(用户进程 ↔ 服务器进程),又能自动化保障数据安全(后台进程),还可扩展集群/存储能力(守护进程),构建高可用、高性能架构。
二、数据库(Database)
“数据库”是 Oracle 实例管理的 物理文件集合,是数据“持久化存储”的载体,核心文件及作用:
| 文件类型 | 作用说明 | 是否必须 | 关键特性 |
|---|---|---|---|
| 数据文件(Data Files) | 存储实际数据(表、索引、LOB 等),属于某个表空间。 | ✅ 必须 | 表空间的物理实现,损坏会丢失数据。 |
| 控制文件(Control File) | 记录数据库物理结构:数据文件/日志文件位置、SCN、DBID、日志序列号等。 | ✅ 必须 | 极其关键!建议多路复用(镜像),防止单点故障。 |
| 重做日志文件(Redo Log Files) | 记录所有数据变更操作(DML、DDL),用于崩溃恢复。 | ✅ 必须 | 至少两组,循环写入;每组可镜像(多成员)。 |
| 归档日志文件(Archive Logs) | 已填满的重做日志的归档副本(归档模式下生成)。 | ❌ 可选 | 支撑时间点恢复(PITR)、逻辑 standby 等。 |
| 参数文件(Parameter File) | 定义实例启动参数(如 SGA 大小、字符集)。 | ✅ 必须 | 支持 SPFILE(二进制,推荐)和 PFILE(文本)。 |
| 密码文件(Password File) | 存储 SYSDBA、SYSOPER 权限用户的认证信息,用于远程 DBA 登录。 |
❌ 可选 | 无则仅支持本地 OS 认证(如 sqlplus / as sysdba)。 |
| 跟踪日志文件(Trace Files) | 记录诊断信息:alert.log(系统告警)、进程跟踪文件(故障排查)。 |
✅ 推荐 | 位于 diagnostic_dest 目录,是排障核心依据。 |
核心风险:控制文件、重做日志、数据文件是数据库“三大基石”,任何一个损坏都可能导致数据库无法启动或数据丢失,务必做好备份与多路复用。
三、客户端(Client)
客户端是用户/应用与数据库交互的“入口”,负责发起连接、发送请求、接收结果,典型连接方式:
| 方式 | 适用场景 | 典型工具/技术 |
|---|---|---|
| JDBC | Java 应用连接(如 Spring、WebLogic) | DriverManager.getConnection() |
| ODBC | Windows 应用(Excel、Power BI 等) | 系统数据源(DSN)配置 |
| OCI | C/C++ 原生开发 | Oracle Call Interface 库 |
| SQL*Plus | DBA 日常管理、脚本执行 | 命令行工具 sqlplus username/password@database |
连接机制
- 客户端通过 Oracle Net Services(由
listener.ora配置)建立连接。 - 监听器运行在数据库服务器,监听端口(默认
1521),验证客户端请求后,分配服务器进程处理。
✅ 本质上,Oracle 是一个典型的 C/S(客户端/服务器)架构系统:
- 客户端 提出业务请求(如“查询员工工资”)
- 服务器端(实例 + 数据库) 负责解析、执行、返回结果
- 两者通过 Oracle Net 协议通信,实现解耦与高效协作
更多推荐





所有评论(0)