【数据库】Oracle学习笔记整理之一:ORACLE的核心组成部分
Oracle 的核心组成部分
Oracle 数据库是一个典型的 客户端/服务器(C/S)架构系统,其运行依赖三大核心组件:
- 实例(Instance) :内存与进程的集合,负责管理数据库操作
- 内存(SGA + PGA) + 进程(前台 + 后台)
- 数据库(Database) :物理文件的集合,用于持久化存储数据
- 数据文件 + 控制文件 + 重做日志等物理文件
- 客户端(Client) :发起连接和请求的应用或用户
- 任何通过 Oracle Net 连接数据库的应用或工具
“实例管运行,数据库存数据,客户端发请求。”
一、实例结构(Instance Architecture)
Oracle 实例是数据库启动时创建的一组 内存结构 和 后台进程,它是数据库运行的核心环境。一个实例只能打开一个数据库(RAC 除外)。
1. 内存结构
✅ SGA(System Global Area,系统全局区)
SGA 是一块共享内存区域,由所有服务进程和后台进程共同使用,随实例启动而分配,关闭时释放。
组件 | 功能说明 |
---|---|
共享池(Shared Pool) | 缓存 SQL 执行计划(Library Cache)、数据字典信息(Data Dictionary Cache),提升解析效率 |
数据库缓冲区缓存(Database Buffer Cache) | 缓存从数据文件读取的数据块,减少磁盘 I/O |
重做日志缓冲区(Redo Log Buffer) | 临时存放事务产生的重做记录,等待 LGWR 写入日志文件 |
大池(Large Pool)(可选) | 用于备份恢复(RMAN)、共享服务器模式等大内存操作,减轻共享池压力 |
Java 池(Java Pool)(可选) | 存储 JVM 相关对象,支持数据库内 Java 执行 |
流池(Streams Pool)(已弃用) | 原用于 Oracle Streams 复制功能(12c 后逐步淘汰) |
🔹 SGA 是共享的,所有会话共享这些资源,其大小由
SGA_TARGET
或SGA_MAX_SIZE
控制。
✅ PGA(Program Global Area,程序全局区)
PGA 是每个服务器进程私有的内存区域,不被共享。
- 存储会话专用信息:排序区、哈希连接区、游标状态、绑定变量等。
- 每个连接的用户进程都有独立的 PGA。
- 总量由
PGA_AGGREGATE_TARGET
参数控制(自动管理)。
🔹 PGA 是私有的,生命周期与会话绑定,会话结束即释放。
2. 进程结构
✅ 服务器进程(Server Process)
- 接收客户端 SQL 请求。
- 在 SGA 中查找或从数据文件加载数据块。
- 执行查询或 DML 操作,并将结果返回客户端。
- 可能使用 PGA 进行排序、哈希等操作。
📌 在专用服务器模式下,每个用户连接对应一个服务器进程。
✅ 后台进程(Background Processes)
Oracle 实例启动时自动运行的关键进程,保障数据库稳定运行。
进程 | 作用 |
---|---|
PMON(Process Monitor) | 清理异常终止的会话:回滚事务、释放锁、释放资源 |
SMON(System Monitor) | 实例恢复(崩溃后)、清理临时段、合并空闲空间 |
DBWn(Database Writer) | 将“脏数据块”从 Buffer Cache 写入数据文件(支持多个,如 DBW0~DBW9) |
LGWR(Log Writer) | 将 Redo Log Buffer 写入 Online Redo Log 文件,保障事务持久性 |
CKPT(Checkpoint Process) | 触发检查点,更新控制文件和数据文件头,标记已写入的 SCN |
ARCn(Archiver Process) | 归档模式下,将填满的联机重做日志复制为归档日志(用于 PITR) |
MMON / MMNL | 收集性能统计信息,写入 AWR(自动工作负载资料库),支持 ADDM 分析 |
✅ 所有后台进程协同工作,确保数据库的高可用性、一致性和性能。
二、数据库(Database)— 物理存储结构
“数据库”指的是 Oracle 实例所管理的物理文件集合,是数据持久化的载体。
文件类型 | 作用 | 是否必须 | 说明 |
---|---|---|---|
数据文件(Data Files) | 存储实际数据(表、索引、LOB 等) | ✅ 必须 | 属于某个表空间,是逻辑结构的物理实现 |
控制文件(Control File) | 记录数据库的物理结构: • 数据文件/日志文件位置 • SCN、DBID、日志序列号等 | ✅ 必须 | 极其关键!建议多路复用(镜像)以防丢失 |
重做日志文件(Redo Log Files) | 记录所有数据变更操作,用于崩溃恢复 | ✅ 必须 | 至少两组,循环写入;每组可含多个成员(镜像) |
归档日志文件(Archive Logs) | 已填满的重做日志的归档副本 | ❌ 可选 | 开启归档模式后生成,支持时间点恢复(PITR) |
参数文件(Parameter File) | 定义实例启动参数 | ✅ 必须 | 支持 SPFILE(二进制,推荐)和 PFILE(文本) |
密码文件(Password File) | 存储具有 SYSDBA 、SYSOPER 权限用户的认证信息 | ❌ 可选 | 用于远程 DBA 登录(如 sqlplus / as sysdba ) |
跟踪日志文件(Trace Files) | 记录诊断信息: • alert.log :系统级告警日志• 进程跟踪文件:用于故障排查 | ✅ 推荐保留 | 位于 diagnostic_dest 目录下 |
✅ 控制文件、重做日志、数据文件是数据库运行的三大核心文件,任何一者损坏都可能导致数据库无法启动或数据丢失。
三、客户端(Client)
客户端是连接 Oracle 数据库并发起请求的应用程序或用户终端。
常见连接方式:
方式 | 适用场景 |
---|---|
JDBC | Java 应用连接数据库(如 Spring、WebLogic) |
ODBC | Windows 应用、Excel、Power BI 等通用连接 |
OCI(Oracle Call Interface) | C/C++ 等原生开发接口 |
SQL*Plus / SQL Developer / Toad | DBA 或开发者使用的管理工具 |
连接机制
- 客户端通过 Oracle Net Services(即监听器
listener.ora
)建立连接。 - 监听器运行在数据库服务器上,监听指定端口(默认 1521)。
- 当客户端发起连接请求时,监听器验证并分配一个 服务器进程 为其服务。
✅ 本质上,Oracle 是一个典型的 C/S(客户端/服务器)架构系统:
- 客户端 提出业务请求(如“查询员工工资”)
- 服务器端(实例 + 数据库) 负责解析、执行、返回结果
- 两者通过 Oracle Net 协议通信,实现解耦与高效协作