Oracle体系结构与实例数据库
Oracle 体系结构的核心是实例与数据库的分工:实例包含内存和进程,数据库包含控制文件、数据文件、联机日志和归档日志。理解这个分工,是后续学习恢复、性能、锁和高可用的起点。
# 1. 学习目标与定位
| 维度 | 内容 |
|---|---|
| 难度层级 | 基础到核心 |
| 核心目标 | 从底层运行链路理解本篇主题,能把概念、SQL、指标、故障和工程取舍连起来 |
| 适合人群 | 开发人员理解 SQL 为什么会受到内存、日志和锁影响;运维人员理解启动、关闭、恢复和文件状态。 |
# 2. 核心概念总览
Oracle体系结构与实例数据库
├─ Instance
├─ Database
├─ SGA
├─ PGA
├─ Background Processes
├─ Control File
├─ Data File
├─ Online Redo Log
└─ Archived Redo Log
这张图只用来定位本章范围。正文不会把每个词机械拆成固定问答,而是按 Oracle 的真实运行机制解释它们之间如何协作、在哪里影响开发、在哪里影响运维。
# 3. 底层原理详解
实例启动时先读取参数文件并分配内存,进入 NOMOUNT;随后读取控制文件,进入 MOUNT;再打开数据文件和联机日志,进入 OPEN。这个过程把软件进程、内存结构和物理数据库文件逐步连接起来。
SGA 是共享内存,包含 Buffer Cache、Shared Pool、Redo Log Buffer 等结构;PGA 是进程私有内存,用于排序、哈希、会话状态和游标执行。后台进程负责把内存变化安全落到文件上。
Oracle 的恢复依赖控制文件、数据文件、Redo 和归档日志的一致性。实例崩溃后通常通过 Redo 做实例恢复;介质损坏则需要数据文件备份和归档日志做介质恢复。
# 4. 关键机制拆解
# 4.1. 启动阶段与状态转换
NOMOUNT 阶段只需要参数文件,适合创建数据库或重建控制文件;MOUNT 阶段控制文件已打开,但数据文件未打开,适合恢复、改归档模式或重命名文件;OPEN 阶段数据库可供业务访问。
很多恢复操作要求数据库处于特定状态。资深 DBA 不会把 startup/open 当成简单命令,而会根据控制文件、数据文件和日志状态选择正确阶段。
# 4.2. 实例内存与后台进程
实例内存负责把频繁访问的数据块、解析结果和字典信息缓存起来。后台进程把事务日志、脏块、检查点和归档工作异步推进,减少前台会话等待。
开发人员的大 SQL、大排序、大事务会改变 SGA/PGA 和后台进程压力。运维排查时要看前台等待是否被 DBWn、LGWR、CKPT、ARCn 等后台进程拖住。
# 4.3. 控制文件、数据文件与日志文件
控制文件是数据库结构目录,记录数据文件、日志文件、归档序列、备份信息和检查点。数据文件保存实际数据块,联机 Redo 日志保存近期变更,归档日志保存历史 Redo。
控制文件多路复用、日志组多成员、数据文件备份和归档保留策略共同决定恢复能力。任何一个环节缺失,都会在故障时暴露。
# 4.4. 实例恢复与介质恢复
实例恢复发生在实例崩溃后,Oracle 根据 Redo 重做已提交或需要重放的变更,再根据 Undo 回滚未提交事务。介质恢复发生在数据文件损坏或丢失后,需要从备份还原文件并应用归档。
这就是为什么归档模式对生产库几乎是必需的:没有归档,只能恢复到最近备份点;有归档,才可能恢复到指定时间或故障前位置。
# 5. 功能模块细节补充
本节围绕概念图中的模块逐个补充底层细节,重点讲它们在 Oracle 运行链路中的位置和相互关系,而不是按固定角色模板拆分。
# 5.1. Instance
Instance 是实例与数据库协作链路中的组成部分。实例侧负责运行时内存、进程和调度,数据库侧负责控制文件、数据文件和日志文件;该模块的异常通常会反映到启动阶段、后台进程等待、告警日志或恢复流程中。
# 5.2. Database
Database 是实例与数据库协作链路中的组成部分。实例侧负责运行时内存、进程和调度,数据库侧负责控制文件、数据文件和日志文件;该模块的异常通常会反映到启动阶段、后台进程等待、告警日志或恢复流程中。
# 5.3. SGA
SGA 是实例与数据库协作链路中的组成部分。实例侧负责运行时内存、进程和调度,数据库侧负责控制文件、数据文件和日志文件;该模块的异常通常会反映到启动阶段、后台进程等待、告警日志或恢复流程中。
# 5.4. PGA
PGA 是实例与数据库协作链路中的组成部分。实例侧负责运行时内存、进程和调度,数据库侧负责控制文件、数据文件和日志文件;该模块的异常通常会反映到启动阶段、后台进程等待、告警日志或恢复流程中。
# 5.5. Background Processes
Background Processes 是实例与数据库协作链路中的组成部分。实例侧负责运行时内存、进程和调度,数据库侧负责控制文件、数据文件和日志文件;该模块的异常通常会反映到启动阶段、后台进程等待、告警日志或恢复流程中。
# 5.6. Control File
Control File 是实例与数据库协作链路中的组成部分。实例侧负责运行时内存、进程和调度,数据库侧负责控制文件、数据文件和日志文件;该模块的异常通常会反映到启动阶段、后台进程等待、告警日志或恢复流程中。
# 5.7. Data File
Data File 是实例与数据库协作链路中的组成部分。实例侧负责运行时内存、进程和调度,数据库侧负责控制文件、数据文件和日志文件;该模块的异常通常会反映到启动阶段、后台进程等待、告警日志或恢复流程中。
# 5.8. Online Redo Log
Online Redo Log 是实例与数据库协作链路中的组成部分。实例侧负责运行时内存、进程和调度,数据库侧负责控制文件、数据文件和日志文件;该模块的异常通常会反映到启动阶段、后台进程等待、告警日志或恢复流程中。
# 5.9. Archived Redo Log
Archived Redo Log 是实例与数据库协作链路中的组成部分。实例侧负责运行时内存、进程和调度,数据库侧负责控制文件、数据文件和日志文件;该模块的异常通常会反映到启动阶段、后台进程等待、告警日志或恢复流程中。
# 6. 开发人员重点提醒
- 理解提交成功依赖 Redo 持久化,不要把数据库写入当作普通内存操作。
- 批量作业要评估日志、Undo、临时空间和后台进程压力。
- 故障时给出准确业务时间点,有助于 DBA 判断恢复目标。
# 7. 运维人员重点提醒
- 熟练掌握实例状态、文件状态、日志组状态和归档状态查询。
- 控制文件、联机日志和归档目录必须纳入多路复用和备份策略。
- 启动失败时先看 alert log,再判断是参数、控制文件、数据文件还是日志问题。
# 8. 典型问题与排查
- 数据库无法 OPEN:检查控制文件中的数据文件状态、恢复需求和日志可用性。
- 提交变慢:检查 log file sync、log file parallel write、LGWR、存储延迟和同步备库。
- 实例崩溃恢复慢:检查崩溃前脏块、检查点推进和 Redo 量。
# 9. 实践建议与检查清单
- 能解释 NOMOUNT/MOUNT/OPEN
- 控制文件已多路复用
- 日志组成员冗余
- 归档模式已验证
- alert log 路径清楚
- 实例恢复和介质恢复能区分
# 10. 阶段小结
本篇的学习重点不是记住术语,而是能把底层机制、业务语义和生产证据连起来。读完本篇后,应该能解释关键组件如何协作、常见问题为什么发生、开发侧如何避免制造风险、运维侧如何用指标和日志把问题定位到具体链路。